@truefoundry/trueforge 0.2.0-rc.5 → 0.2.0-rc.7

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 (212) hide show
  1. package/dist/_frontend/assets/{AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js → AgentCodeSnippets-UWKIJI6U-BuMY_5q9.js} +1 -1
  2. package/dist/_frontend/assets/AgentCodeSnippets-UWKIJI6U-BuMY_5q9.js.br +0 -0
  3. package/dist/_frontend/assets/AgentCodeSnippets-UWKIJI6U-BuMY_5q9.js.gz +0 -0
  4. package/dist/_frontend/assets/AgentMetricChart-4ZJJED5Q-Ck2gd1mC.js +1 -0
  5. package/dist/_frontend/assets/AgentMetricChart-4ZJJED5Q-Ck2gd1mC.js.br +0 -0
  6. package/dist/_frontend/assets/AgentMetricChart-4ZJJED5Q-Ck2gd1mC.js.gz +0 -0
  7. package/dist/_frontend/assets/AgentOverview-UZBCVNMP-EMNirCRT.js +1 -0
  8. package/dist/_frontend/assets/AgentOverview-UZBCVNMP-EMNirCRT.js.br +0 -0
  9. package/dist/_frontend/assets/AgentOverview-UZBCVNMP-EMNirCRT.js.gz +0 -0
  10. package/dist/_frontend/assets/{AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js → AgentSessionEventTimeline-N4RXG2NU-JgVOEYK9.js} +1 -1
  11. package/dist/_frontend/assets/AgentSessionEventTimeline-N4RXG2NU-JgVOEYK9.js.br +0 -0
  12. package/dist/_frontend/assets/AgentSessionEventTimeline-N4RXG2NU-JgVOEYK9.js.gz +0 -0
  13. package/dist/_frontend/assets/{AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js → AgentSessionEventTimelineChart-EMWNJMMK-BRwdPd5w.js} +1 -1
  14. package/dist/_frontend/assets/AgentSessionEventTimelineChart-EMWNJMMK-BRwdPd5w.js.br +0 -0
  15. package/dist/_frontend/assets/AgentSessionEventTimelineChart-EMWNJMMK-BRwdPd5w.js.gz +0 -0
  16. package/dist/_frontend/assets/{AgentSessions-WHODEG2M-OzQblCn4.js → AgentSessions-CD7JAQTC-BXh1e6-3.js} +1 -1
  17. package/dist/_frontend/assets/AgentSessions-CD7JAQTC-BXh1e6-3.js.br +0 -0
  18. package/dist/_frontend/assets/AgentSessions-CD7JAQTC-BXh1e6-3.js.gz +0 -0
  19. package/dist/_frontend/assets/{ConnectorSettings-QTAI4TQX-PySj_xEm.js → ConnectorSettings-GEI4S6SD-BUjOgTQp.js} +1 -1
  20. package/dist/_frontend/assets/ConnectorSettings-GEI4S6SD-BUjOgTQp.js.br +0 -0
  21. package/dist/_frontend/assets/ConnectorSettings-GEI4S6SD-BUjOgTQp.js.gz +0 -0
  22. package/dist/_frontend/assets/{DockLayout-TATYU5SV-DAuT7yes.js → DockLayout-JZ4DKDOR-jsSVZPx1.js} +1 -1
  23. package/dist/_frontend/assets/{DrawerLayout-DXHNV33K-BP-6TUEf.js → DrawerLayout-AV4FJTGV-DoyHvbgS.js} +2 -2
  24. package/dist/_frontend/assets/DrawerLayout-AV4FJTGV-DoyHvbgS.js.br +0 -0
  25. package/dist/_frontend/assets/DrawerLayout-AV4FJTGV-DoyHvbgS.js.gz +0 -0
  26. package/dist/_frontend/assets/{ModelSettings-UWTBHQRG-L5KYrHBM.js → ModelSettings-4TNETPJJ-1PfEncEw.js} +1 -1
  27. package/dist/_frontend/assets/ModelSettings-4TNETPJJ-1PfEncEw.js.br +0 -0
  28. package/dist/_frontend/assets/ModelSettings-4TNETPJJ-1PfEncEw.js.gz +0 -0
  29. package/dist/_frontend/assets/SandboxSettings-IEIWFKQW-DMx0nXkz.js +1 -0
  30. package/dist/_frontend/assets/SandboxSettings-IEIWFKQW-DMx0nXkz.js.br +0 -0
  31. package/dist/_frontend/assets/SandboxSettings-IEIWFKQW-DMx0nXkz.js.gz +0 -0
  32. package/dist/_frontend/assets/SchedulesPage-ZG5IMQI3-DM9Xo4uZ.js +1 -0
  33. package/dist/_frontend/assets/SchedulesPage-ZG5IMQI3-DM9Xo4uZ.js.br +0 -0
  34. package/dist/_frontend/assets/SchedulesPage-ZG5IMQI3-DM9Xo4uZ.js.gz +0 -0
  35. package/dist/_frontend/assets/{SettingsBuilder-3OA4UCIM-AN2PJd1q.js → SettingsBuilder-B2ULQPIT-D67kXI0z.js} +2 -2
  36. package/dist/_frontend/assets/SettingsBuilder-B2ULQPIT-D67kXI0z.js.br +0 -0
  37. package/dist/_frontend/assets/SettingsBuilder-B2ULQPIT-D67kXI0z.js.gz +0 -0
  38. package/dist/_frontend/assets/{ShellRouteSync-J74MV23Q-CDk4uzrR.js → ShellRouteSync-SJXFKUAJ-BhQD7AoV.js} +1 -1
  39. package/dist/_frontend/assets/ShellRouteSync-SJXFKUAJ-BhQD7AoV.js.br +0 -0
  40. package/dist/_frontend/assets/ShellRouteSync-SJXFKUAJ-BhQD7AoV.js.gz +0 -0
  41. package/dist/_frontend/assets/{SidebarLayout-EQXQPYIU-zWCTPIcp.js → SidebarLayout-XUM2Y6PA-BQdDTrNi.js} +2 -2
  42. package/dist/_frontend/assets/SidebarLayout-XUM2Y6PA-BQdDTrNi.js.br +0 -0
  43. package/dist/_frontend/assets/SidebarLayout-XUM2Y6PA-BQdDTrNi.js.gz +0 -0
  44. package/dist/_frontend/assets/{SkillSettings-KQ6GQ7JW-oZVHsKV_.js → SkillSettings-NHBL5ZXU-BmInxxan.js} +1 -1
  45. package/dist/_frontend/assets/SkillSettings-NHBL5ZXU-BmInxxan.js.br +0 -0
  46. package/dist/_frontend/assets/SkillSettings-NHBL5ZXU-BmInxxan.js.gz +0 -0
  47. package/dist/_frontend/assets/TrueForgeUIWithRouter-NVV7IXXP-DBsGykLD.js +1 -0
  48. package/dist/_frontend/assets/{WidgetLayout-YWZTYFZL-BgYVWW8O.js → WidgetLayout-T7DBLKV3-CfF0xPJV.js} +1 -1
  49. package/dist/_frontend/assets/WidgetLayout-T7DBLKV3-CfF0xPJV.js.br +0 -0
  50. package/dist/_frontend/assets/WidgetLayout-T7DBLKV3-CfF0xPJV.js.gz +0 -0
  51. package/dist/_frontend/assets/{chunk-4MCIDE2C-ClJFqC75.js → chunk-2QTH6JHX-DIiHfgUm.js} +1 -1
  52. package/dist/_frontend/assets/chunk-2QTH6JHX-DIiHfgUm.js.br +0 -0
  53. package/dist/_frontend/assets/chunk-2QTH6JHX-DIiHfgUm.js.gz +0 -0
  54. package/dist/_frontend/assets/chunk-3R62ISBR-CDV8LPCs.js +1 -0
  55. package/dist/_frontend/assets/chunk-3R62ISBR-CDV8LPCs.js.br +0 -0
  56. package/dist/_frontend/assets/chunk-3R62ISBR-CDV8LPCs.js.gz +0 -0
  57. package/dist/_frontend/assets/{chunk-62JRHF6Z-CXLsU_my.js → chunk-62JRHF6Z-bd9_iLmQ.js} +1 -1
  58. package/dist/_frontend/assets/chunk-62JRHF6Z-bd9_iLmQ.js.br +0 -0
  59. package/dist/_frontend/assets/chunk-62JRHF6Z-bd9_iLmQ.js.gz +0 -0
  60. package/dist/_frontend/assets/{chunk-ZZB3JIBQ-EN4V28Ji.js → chunk-NFUX2ESW-D-OknU8a.js} +2 -2
  61. package/dist/_frontend/assets/chunk-NFUX2ESW-D-OknU8a.js.br +0 -0
  62. package/dist/_frontend/assets/chunk-NFUX2ESW-D-OknU8a.js.gz +0 -0
  63. package/dist/_frontend/assets/{cssMode-Dk1ChNt4.js → cssMode-Buxt2F5C.js} +1 -1
  64. package/dist/_frontend/assets/cssMode-Buxt2F5C.js.br +0 -0
  65. package/dist/_frontend/assets/cssMode-Buxt2F5C.js.gz +0 -0
  66. package/dist/_frontend/assets/{freemarker2-D_Yi-Euz.js → freemarker2-Cdfv6ur6.js} +1 -1
  67. package/dist/_frontend/assets/freemarker2-Cdfv6ur6.js.br +0 -0
  68. package/dist/_frontend/assets/freemarker2-Cdfv6ur6.js.gz +0 -0
  69. package/dist/_frontend/assets/{handlebars-Cm_UQxos.js → handlebars-Dv-Q7Um6.js} +1 -1
  70. package/dist/_frontend/assets/handlebars-Dv-Q7Um6.js.br +0 -0
  71. package/dist/_frontend/assets/handlebars-Dv-Q7Um6.js.gz +0 -0
  72. package/dist/_frontend/assets/{html-BIx_CMMA.js → html-Cwmd4EDN.js} +1 -1
  73. package/dist/_frontend/assets/html-Cwmd4EDN.js.br +0 -0
  74. package/dist/_frontend/assets/html-Cwmd4EDN.js.gz +0 -0
  75. package/dist/_frontend/assets/{htmlMode-D7eeA6bm.js → htmlMode-Cf0xNt85.js} +1 -1
  76. package/dist/_frontend/assets/htmlMode-Cf0xNt85.js.br +0 -0
  77. package/dist/_frontend/assets/htmlMode-Cf0xNt85.js.gz +0 -0
  78. package/dist/_frontend/assets/{index-Y_4XXAao.js → index-BIRSKAK8.js} +243 -243
  79. package/dist/_frontend/assets/index-BIRSKAK8.js.br +0 -0
  80. package/dist/_frontend/assets/index-BIRSKAK8.js.gz +0 -0
  81. package/dist/_frontend/assets/{index-uWXj7DW5.js → index-BxyaDaQf.js} +1 -1
  82. package/dist/_frontend/assets/index-BxyaDaQf.js.br +0 -0
  83. package/dist/_frontend/assets/{index-uWXj7DW5.js.gz → index-BxyaDaQf.js.gz} +0 -0
  84. package/dist/_frontend/assets/{index-BJUe77Ib.js → index-OPxVm2Vd.js} +3 -3
  85. package/dist/_frontend/assets/index-OPxVm2Vd.js.br +0 -0
  86. package/dist/_frontend/assets/index-OPxVm2Vd.js.gz +0 -0
  87. package/dist/_frontend/assets/{javascript-CHojKZO8.js → javascript-BooEWA5C.js} +1 -1
  88. package/dist/_frontend/assets/{jsonMode-BTk9mIUo.js → jsonMode-Bc4b557E.js} +1 -1
  89. package/dist/_frontend/assets/jsonMode-Bc4b557E.js.br +0 -0
  90. package/dist/_frontend/assets/jsonMode-Bc4b557E.js.gz +0 -0
  91. package/dist/_frontend/assets/{liquid-M5ngFTv5.js → liquid-Dpr5_yD4.js} +1 -1
  92. package/dist/_frontend/assets/liquid-Dpr5_yD4.js.br +0 -0
  93. package/dist/_frontend/assets/liquid-Dpr5_yD4.js.gz +0 -0
  94. package/dist/_frontend/assets/{lspLanguageFeatures-jPhJA8WX.js → lspLanguageFeatures-BR2DRsTt.js} +1 -1
  95. package/dist/_frontend/assets/lspLanguageFeatures-BR2DRsTt.js.br +0 -0
  96. package/dist/_frontend/assets/lspLanguageFeatures-BR2DRsTt.js.gz +0 -0
  97. package/dist/_frontend/assets/{mdx-DmyHsr0E.js → mdx-HA7ugVt3.js} +1 -1
  98. package/dist/_frontend/assets/mdx-HA7ugVt3.js.br +0 -0
  99. package/dist/_frontend/assets/mdx-HA7ugVt3.js.gz +0 -0
  100. package/dist/_frontend/assets/{python-BRFA9b-I.js → python-C2JnSJsq.js} +1 -1
  101. package/dist/_frontend/assets/python-C2JnSJsq.js.br +0 -0
  102. package/dist/_frontend/assets/python-C2JnSJsq.js.gz +0 -0
  103. package/dist/_frontend/assets/{razor-CYsS4Kjw.js → razor-DxJxbSt9.js} +1 -1
  104. package/dist/_frontend/assets/razor-DxJxbSt9.js.br +0 -0
  105. package/dist/_frontend/assets/razor-DxJxbSt9.js.gz +0 -0
  106. package/dist/_frontend/assets/{tsMode-COQtB6OT.js → tsMode-DSQIB4wq.js} +1 -1
  107. package/dist/_frontend/assets/tsMode-DSQIB4wq.js.br +0 -0
  108. package/dist/_frontend/assets/tsMode-DSQIB4wq.js.gz +0 -0
  109. package/dist/_frontend/assets/{typescript-B3uUksf0.js → typescript-CYdXdQVS.js} +1 -1
  110. package/dist/_frontend/assets/typescript-CYdXdQVS.js.br +0 -0
  111. package/dist/_frontend/assets/typescript-CYdXdQVS.js.gz +0 -0
  112. package/dist/_frontend/assets/{workers-CgLq606Q.js → workers-C1M-tlfr.js} +1 -1
  113. package/dist/_frontend/assets/workers-C1M-tlfr.js.br +0 -0
  114. package/dist/_frontend/assets/workers-C1M-tlfr.js.gz +0 -0
  115. package/dist/_frontend/assets/{xml-YO228FLn.js → xml-uosDAHfe.js} +1 -1
  116. package/dist/_frontend/assets/xml-uosDAHfe.js.br +0 -0
  117. package/dist/_frontend/assets/xml-uosDAHfe.js.gz +0 -0
  118. package/dist/_frontend/assets/{yaml-CirMKB9x.js → yaml-CFmHi-W6.js} +1 -1
  119. package/dist/_frontend/assets/yaml-CFmHi-W6.js.br +0 -0
  120. package/dist/_frontend/assets/yaml-CFmHi-W6.js.gz +0 -0
  121. package/dist/_frontend/index.html +1 -1
  122. package/dist/controller-main.js.map +1 -1
  123. package/dist/main.js +481 -289
  124. package/dist/main.js.map +1 -1
  125. package/dist/postgres/migrations/20260909_000001_agent_description.js +16 -0
  126. package/dist/postgres/migrations/20260909_000001_agent_description.js.map +1 -0
  127. package/dist/sqlite/migrations/20260911_000001_agent_description.js +18 -0
  128. package/dist/sqlite/migrations/20260911_000001_agent_description.js.map +1 -0
  129. package/package.json +3 -3
  130. package/dist/_frontend/assets/AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js.br +0 -0
  131. package/dist/_frontend/assets/AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js.gz +0 -0
  132. package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js +0 -1
  133. package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js.br +0 -0
  134. package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js.gz +0 -0
  135. package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js +0 -1
  136. package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js.br +0 -0
  137. package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js.gz +0 -0
  138. package/dist/_frontend/assets/AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js.br +0 -0
  139. package/dist/_frontend/assets/AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js.gz +0 -0
  140. package/dist/_frontend/assets/AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js.br +0 -0
  141. package/dist/_frontend/assets/AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js.gz +0 -0
  142. package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js.br +0 -0
  143. package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js.gz +0 -0
  144. package/dist/_frontend/assets/ConnectorSettings-QTAI4TQX-PySj_xEm.js.br +0 -0
  145. package/dist/_frontend/assets/ConnectorSettings-QTAI4TQX-PySj_xEm.js.gz +0 -0
  146. package/dist/_frontend/assets/DrawerLayout-DXHNV33K-BP-6TUEf.js.br +0 -0
  147. package/dist/_frontend/assets/DrawerLayout-DXHNV33K-BP-6TUEf.js.gz +0 -0
  148. package/dist/_frontend/assets/ModelSettings-UWTBHQRG-L5KYrHBM.js.br +0 -0
  149. package/dist/_frontend/assets/ModelSettings-UWTBHQRG-L5KYrHBM.js.gz +0 -0
  150. package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js +0 -1
  151. package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js.br +0 -0
  152. package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js.gz +0 -0
  153. package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js +0 -1
  154. package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js.br +0 -0
  155. package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js.gz +0 -0
  156. package/dist/_frontend/assets/SettingsBuilder-3OA4UCIM-AN2PJd1q.js.br +0 -0
  157. package/dist/_frontend/assets/SettingsBuilder-3OA4UCIM-AN2PJd1q.js.gz +0 -0
  158. package/dist/_frontend/assets/ShellRouteSync-J74MV23Q-CDk4uzrR.js.br +0 -0
  159. package/dist/_frontend/assets/ShellRouteSync-J74MV23Q-CDk4uzrR.js.gz +0 -0
  160. package/dist/_frontend/assets/SidebarLayout-EQXQPYIU-zWCTPIcp.js.br +0 -0
  161. package/dist/_frontend/assets/SidebarLayout-EQXQPYIU-zWCTPIcp.js.gz +0 -0
  162. package/dist/_frontend/assets/SkillSettings-KQ6GQ7JW-oZVHsKV_.js.br +0 -0
  163. package/dist/_frontend/assets/SkillSettings-KQ6GQ7JW-oZVHsKV_.js.gz +0 -0
  164. package/dist/_frontend/assets/TrueForgeUIWithRouter-R3UXQZRY-wD0P6NXT.js +0 -1
  165. package/dist/_frontend/assets/WidgetLayout-YWZTYFZL-BgYVWW8O.js.br +0 -0
  166. package/dist/_frontend/assets/WidgetLayout-YWZTYFZL-BgYVWW8O.js.gz +0 -0
  167. package/dist/_frontend/assets/chunk-4MCIDE2C-ClJFqC75.js.br +0 -0
  168. package/dist/_frontend/assets/chunk-4MCIDE2C-ClJFqC75.js.gz +0 -0
  169. package/dist/_frontend/assets/chunk-62JRHF6Z-CXLsU_my.js.br +0 -0
  170. package/dist/_frontend/assets/chunk-62JRHF6Z-CXLsU_my.js.gz +0 -0
  171. package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js +0 -1
  172. package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js.br +0 -0
  173. package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js.gz +0 -0
  174. package/dist/_frontend/assets/chunk-ZZB3JIBQ-EN4V28Ji.js.br +0 -0
  175. package/dist/_frontend/assets/chunk-ZZB3JIBQ-EN4V28Ji.js.gz +0 -0
  176. package/dist/_frontend/assets/cssMode-Dk1ChNt4.js.br +0 -0
  177. package/dist/_frontend/assets/cssMode-Dk1ChNt4.js.gz +0 -0
  178. package/dist/_frontend/assets/freemarker2-D_Yi-Euz.js.br +0 -0
  179. package/dist/_frontend/assets/freemarker2-D_Yi-Euz.js.gz +0 -0
  180. package/dist/_frontend/assets/handlebars-Cm_UQxos.js.br +0 -0
  181. package/dist/_frontend/assets/handlebars-Cm_UQxos.js.gz +0 -0
  182. package/dist/_frontend/assets/html-BIx_CMMA.js.br +0 -0
  183. package/dist/_frontend/assets/html-BIx_CMMA.js.gz +0 -0
  184. package/dist/_frontend/assets/htmlMode-D7eeA6bm.js.br +0 -0
  185. package/dist/_frontend/assets/htmlMode-D7eeA6bm.js.gz +0 -0
  186. package/dist/_frontend/assets/index-BJUe77Ib.js.br +0 -0
  187. package/dist/_frontend/assets/index-BJUe77Ib.js.gz +0 -0
  188. package/dist/_frontend/assets/index-Y_4XXAao.js.br +0 -0
  189. package/dist/_frontend/assets/index-Y_4XXAao.js.gz +0 -0
  190. package/dist/_frontend/assets/index-uWXj7DW5.js.br +0 -0
  191. package/dist/_frontend/assets/jsonMode-BTk9mIUo.js.br +0 -0
  192. package/dist/_frontend/assets/jsonMode-BTk9mIUo.js.gz +0 -0
  193. package/dist/_frontend/assets/liquid-M5ngFTv5.js.br +0 -0
  194. package/dist/_frontend/assets/liquid-M5ngFTv5.js.gz +0 -0
  195. package/dist/_frontend/assets/lspLanguageFeatures-jPhJA8WX.js.br +0 -0
  196. package/dist/_frontend/assets/lspLanguageFeatures-jPhJA8WX.js.gz +0 -0
  197. package/dist/_frontend/assets/mdx-DmyHsr0E.js.br +0 -0
  198. package/dist/_frontend/assets/mdx-DmyHsr0E.js.gz +0 -0
  199. package/dist/_frontend/assets/python-BRFA9b-I.js.br +0 -0
  200. package/dist/_frontend/assets/python-BRFA9b-I.js.gz +0 -0
  201. package/dist/_frontend/assets/razor-CYsS4Kjw.js.br +0 -0
  202. package/dist/_frontend/assets/razor-CYsS4Kjw.js.gz +0 -0
  203. package/dist/_frontend/assets/tsMode-COQtB6OT.js.br +0 -0
  204. package/dist/_frontend/assets/tsMode-COQtB6OT.js.gz +0 -0
  205. package/dist/_frontend/assets/typescript-B3uUksf0.js.br +0 -0
  206. package/dist/_frontend/assets/typescript-B3uUksf0.js.gz +0 -0
  207. package/dist/_frontend/assets/workers-CgLq606Q.js.br +0 -0
  208. package/dist/_frontend/assets/workers-CgLq606Q.js.gz +0 -0
  209. package/dist/_frontend/assets/xml-YO228FLn.js.br +0 -0
  210. package/dist/_frontend/assets/xml-YO228FLn.js.gz +0 -0
  211. package/dist/_frontend/assets/yaml-CirMKB9x.js.br +0 -0
  212. package/dist/_frontend/assets/yaml-CirMKB9x.js.gz +0 -0
package/dist/main.js CHANGED
@@ -510,7 +510,9 @@ var init_config = __esm({
510
510
  });
511
511
 
512
512
  // src/db/agentStore.ts
513
- import { AgentSpecSchema } from "@truefoundry/trueforge-core/agent-session";
513
+ import {
514
+ AgentSpecSchema
515
+ } from "@truefoundry/trueforge-core/agent-session";
514
516
  function parseStoredAgentSpec(manifest) {
515
517
  return AgentSpecSchema.parse(manifest);
516
518
  }
@@ -2104,7 +2106,7 @@ function parseCommaSeparatedQuery(val) {
2104
2106
  }
2105
2107
  return val.split(",").map((part) => part.trim()).filter((part) => part.length > 0);
2106
2108
  }
2107
- var NameSchema, PAGE_LIMIT, EVENTS_PAGE_LIMIT;
2109
+ var NameSchema, PAGE_LIMIT, EVENTS_PAGE_LIMIT, AGENTS_PAGE_DEFAULT, AGENTS_PAGE_LIMIT;
2108
2110
  var init_common = __esm({
2109
2111
  "src/schemas/common.ts"() {
2110
2112
  "use strict";
@@ -2114,6 +2116,8 @@ var init_common = __esm({
2114
2116
  ).openapi("ResourceName");
2115
2117
  PAGE_LIMIT = 25;
2116
2118
  EVENTS_PAGE_LIMIT = 100;
2119
+ AGENTS_PAGE_DEFAULT = 50;
2120
+ AGENTS_PAGE_LIMIT = 100;
2117
2121
  }
2118
2122
  });
2119
2123
 
@@ -3865,7 +3869,7 @@ var init_mcpServerStore = __esm({
3865
3869
 
3866
3870
  // src/schemas/schedule.ts
3867
3871
  import { z as z24 } from "@hono/zod-openapi";
3868
- import { CreatedBySubjectSchema as CreatedBySubjectSchema4, TokenPaginationSchema } from "@truefoundry/trueforge-core/agent-session";
3872
+ import { CreatedBySubjectSchema as CreatedBySubjectSchema4, TokenPaginationSchema as TokenPaginationSchema2 } from "@truefoundry/trueforge-core/agent-session";
3869
3873
  var SCHEDULE_MIN_INTERVAL_SECONDS, CRON_FIELD, InvalidCronError, CronExpressionSchema, TimezoneSchema, IsoTimestamp, NullableIsoTimestamp, ScheduleTaskSchema, ScheduleStatusSchema, ScheduleManifestObjectSchema, ScheduleManifestSchema, ScheduleSchema, CreateScheduleRequestSchema, UpdateScheduleRequestSchema, GetScheduleResponseSchema, ListSchedulesResponseSchema, DeleteScheduleResponseSchema, ScheduleRunStatusSchema, ScheduleRunSchema, ListScheduleRunsResponseSchema, CreateScheduleRunRequestSchema, CreateScheduleRunResponseSchema, ExecuteScheduleRunRequestSchema;
3870
3874
  var init_schedule = __esm({
3871
3875
  "src/schemas/schedule.ts"() {
@@ -3923,7 +3927,7 @@ var init_schedule = __esm({
3923
3927
  GetScheduleResponseSchema = z24.object({ data: ScheduleSchema }).openapi("GetScheduleResponse");
3924
3928
  ListSchedulesResponseSchema = z24.object({
3925
3929
  data: z24.array(ScheduleSchema),
3926
- pagination: TokenPaginationSchema
3930
+ pagination: TokenPaginationSchema2
3927
3931
  }).openapi("ListSchedulesResponse");
3928
3932
  DeleteScheduleResponseSchema = z24.object({}).openapi("DeleteScheduleResponse");
3929
3933
  ScheduleRunStatusSchema = z24.enum(["scheduled", "triggered", "failed"]).openapi("ScheduleRunStatus");
@@ -3941,7 +3945,7 @@ var init_schedule = __esm({
3941
3945
  }).strict().openapi("ScheduleRun");
3942
3946
  ListScheduleRunsResponseSchema = z24.object({
3943
3947
  data: z24.array(ScheduleRunSchema),
3944
- pagination: TokenPaginationSchema
3948
+ pagination: TokenPaginationSchema2
3945
3949
  }).openapi("ListScheduleRunsResponse");
3946
3950
  CreateScheduleRunRequestSchema = z24.object({
3947
3951
  schedule_id: z24.string().min(1).max(64).describe("Immutable schedule identifier.")
@@ -4330,12 +4334,17 @@ __export(PostgresAgentStore_exports, {
4330
4334
  PostgresAgentStore: () => PostgresAgentStore
4331
4335
  });
4332
4336
  import { CreatedBySubjectSchema as CreatedBySubjectSchema5 } from "@truefoundry/trueforge-core/agent-session";
4337
+ import {
4338
+ decodeOffsetPageToken as decodeOffsetPageToken3,
4339
+ paginateOffsetRows as paginateOffsetRows2
4340
+ } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
4333
4341
  import { sql as sql10 } from "kysely";
4334
4342
  function toRecord(row) {
4335
4343
  return {
4336
4344
  id: row.id,
4337
4345
  tenant_id: row.tenant_id,
4338
4346
  name: row.name,
4347
+ description: row.description,
4339
4348
  manifest: parseStoredAgentSpec(row.manifest),
4340
4349
  external_id: row.external_id,
4341
4350
  created_by_subject: CreatedBySubjectSchema5.parse(row.created_by_subject),
@@ -4370,15 +4379,26 @@ var init_PostgresAgentStore = __esm({
4370
4379
  }
4371
4380
  async listAgents(input, transaction) {
4372
4381
  if (input.external_ids?.length === 0) {
4373
- return [];
4382
+ return { data: [], pagination: { limit: input.limit ?? 0 } };
4374
4383
  }
4375
4384
  const db = transaction ?? this.#db;
4376
4385
  let query = db.selectFrom("agent").selectAll().where("tenant_id", "=", input.tenant_id);
4377
4386
  if (input.external_ids !== void 0) {
4378
4387
  query = query.where("external_id", "in", [...input.external_ids]);
4379
4388
  }
4380
- const rows = await query.orderBy("name").execute();
4381
- return rows.map(toRecord);
4389
+ if (input.agent_name !== void 0) {
4390
+ query = query.where(sql10`position(lower(${input.agent_name}) in lower(name)) > 0`);
4391
+ }
4392
+ query = query.orderBy("name");
4393
+ if (input.limit === void 0) {
4394
+ const rows2 = await query.execute();
4395
+ const data2 = rows2.map(toRecord);
4396
+ return { data: data2, pagination: { limit: data2.length } };
4397
+ }
4398
+ const offset = decodeOffsetPageToken3(input.page_token);
4399
+ const rows = await query.limit(input.limit + 1).offset(offset).execute();
4400
+ const { data, pagination } = paginateOffsetRows2(rows, input.limit, offset);
4401
+ return { data: data.map(toRecord), pagination };
4382
4402
  }
4383
4403
  async getOwnedIds(input, transaction) {
4384
4404
  if (input.ids.length === 0) {
@@ -4414,6 +4434,7 @@ var init_PostgresAgentStore = __esm({
4414
4434
  id: newId(),
4415
4435
  tenant_id: input.tenant_id,
4416
4436
  name: input.name,
4437
+ description: input.description,
4417
4438
  manifest: json(input.manifest),
4418
4439
  external_id: input.external_id,
4419
4440
  created_by_subject: json(input.created_by_subject),
@@ -4434,13 +4455,14 @@ var init_PostgresAgentStore = __esm({
4434
4455
  }
4435
4456
  }
4436
4457
  async updateAgent(input, transaction) {
4437
- if (input.manifest === void 0 && input.external_id === void 0) {
4438
- throw new Error("updateAgent requires manifest and/or external_id");
4458
+ if (input.manifest === void 0 && input.description === void 0 && input.external_id === void 0) {
4459
+ throw new Error("updateAgent requires manifest, description, and/or external_id");
4439
4460
  }
4440
4461
  const db = transaction ?? this.#db;
4441
4462
  try {
4442
4463
  const row = await db.updateTable("agent").set({
4443
4464
  ...input.manifest === void 0 ? {} : { manifest: json(input.manifest) },
4465
+ ...input.description === void 0 ? {} : { description: input.description },
4444
4466
  ...input.external_id === void 0 ? {} : { external_id: input.external_id },
4445
4467
  updated_at: now()
4446
4468
  }).where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).returningAll().executeTakeFirst();
@@ -5241,8 +5263,8 @@ var init_capabilities2 = __esm({
5241
5263
 
5242
5264
  // src/db/sqlite/session-store/queries/events.ts
5243
5265
  import {
5244
- decodeOffsetPageToken as decodeOffsetPageToken3,
5245
- paginateOffsetRows as paginateOffsetRows2
5266
+ decodeOffsetPageToken as decodeOffsetPageToken4,
5267
+ paginateOffsetRows as paginateOffsetRows3
5246
5268
  } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
5247
5269
  import {
5248
5270
  decodeSessionEventPageToken as decodeSessionEventPageToken2,
@@ -5277,7 +5299,7 @@ async function appendToEvents2(db, input) {
5277
5299
  });
5278
5300
  }
5279
5301
  async function listTurnEvents2(db, input) {
5280
- const offset = decodeOffsetPageToken3(input.page_token);
5302
+ const offset = decodeOffsetPageToken4(input.page_token);
5281
5303
  const limit = input.limit;
5282
5304
  const eventOrder = input.order === "desc" ? "desc" : "asc";
5283
5305
  const rows = await db.selectFrom("turn as t").leftJoin(
@@ -5293,7 +5315,7 @@ async function listTurnEvents2(db, input) {
5293
5315
  events.push(row.event);
5294
5316
  }
5295
5317
  }
5296
- return paginateOffsetRows2(events, limit, offset);
5318
+ return paginateOffsetRows3(events, limit, offset);
5297
5319
  }
5298
5320
  async function resolveAncestorChain2(db, sessionId, anchor) {
5299
5321
  const chain = [...anchor.ancestor_ids, anchor.turn_id];
@@ -5859,7 +5881,7 @@ __export(SqliteSessionStore_exports, {
5859
5881
  SqliteSessionStore: () => SqliteSessionStore
5860
5882
  });
5861
5883
  import {
5862
- decodeOffsetPageToken as decodeOffsetPageToken4,
5884
+ decodeOffsetPageToken as decodeOffsetPageToken5,
5863
5885
  encodeOffsetPageToken as encodeOffsetPageToken2
5864
5886
  } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
5865
5887
  var SqliteSessionStore;
@@ -5936,7 +5958,7 @@ var init_SqliteSessionStore = __esm({
5936
5958
  return getTurn2(this.db, input);
5937
5959
  }
5938
5960
  async listTurns(input) {
5939
- const offset = decodeOffsetPageToken4(input.page_token);
5961
+ const offset = decodeOffsetPageToken5(input.page_token);
5940
5962
  const result = await listTurns2(this.db, {
5941
5963
  session_id: input.session_id,
5942
5964
  limit: input.limit,
@@ -6635,12 +6657,17 @@ __export(SqliteAgentStore_exports, {
6635
6657
  import {
6636
6658
  CreatedBySubjectSchema as CreatedBySubjectSchema7
6637
6659
  } from "@truefoundry/trueforge-core/agent-session";
6660
+ import {
6661
+ decodeOffsetPageToken as decodeOffsetPageToken6,
6662
+ paginateOffsetRows as paginateOffsetRows4
6663
+ } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
6638
6664
  import { sql as sql21 } from "kysely";
6639
6665
  function recordColumns5(eb) {
6640
6666
  return [
6641
6667
  "id",
6642
6668
  "tenant_id",
6643
6669
  "name",
6670
+ "description",
6644
6671
  jsonText(eb.ref("manifest")).as("manifest"),
6645
6672
  "external_id",
6646
6673
  jsonText(eb.ref("created_by_subject")).as("created_by_subject"),
@@ -6670,15 +6697,26 @@ var init_SqliteAgentStore = __esm({
6670
6697
  }
6671
6698
  async listAgents(input, transaction) {
6672
6699
  if (input.external_ids?.length === 0) {
6673
- return [];
6700
+ return { data: [], pagination: { limit: input.limit ?? 0 } };
6674
6701
  }
6675
6702
  const db = transaction ?? this.#db;
6676
6703
  let query = db.selectFrom("agent").select(recordColumns5).where("tenant_id", "=", input.tenant_id);
6677
6704
  if (input.external_ids !== void 0) {
6678
6705
  query = query.where("external_id", "in", [...input.external_ids]);
6679
6706
  }
6680
- const rows = await query.orderBy("name").execute();
6681
- return rows.map(toRecord3);
6707
+ if (input.agent_name !== void 0) {
6708
+ query = query.where(sql21`instr(lower(name), lower(${input.agent_name})) > 0`);
6709
+ }
6710
+ query = query.orderBy("name");
6711
+ if (input.limit === void 0) {
6712
+ const rows2 = await query.execute();
6713
+ const data2 = rows2.map(toRecord3);
6714
+ return { data: data2, pagination: { limit: data2.length } };
6715
+ }
6716
+ const offset = decodeOffsetPageToken6(input.page_token);
6717
+ const rows = await query.limit(input.limit + 1).offset(offset).execute();
6718
+ const { data, pagination } = paginateOffsetRows4(rows, input.limit, offset);
6719
+ return { data: data.map(toRecord3), pagination };
6682
6720
  }
6683
6721
  async getOwnedIds(input, transaction) {
6684
6722
  if (input.ids.length === 0) {
@@ -6715,6 +6753,7 @@ var init_SqliteAgentStore = __esm({
6715
6753
  id: newId(),
6716
6754
  tenant_id: input.tenant_id,
6717
6755
  name: input.name,
6756
+ description: input.description,
6718
6757
  manifest: jsonbBind(input.manifest),
6719
6758
  external_id: input.external_id,
6720
6759
  created_by_subject: jsonbBind(input.created_by_subject),
@@ -6736,13 +6775,14 @@ var init_SqliteAgentStore = __esm({
6736
6775
  }
6737
6776
  }
6738
6777
  async updateAgent(input, transaction) {
6739
- if (input.manifest === void 0 && input.external_id === void 0) {
6740
- throw new Error("updateAgent requires manifest and/or external_id");
6778
+ if (input.manifest === void 0 && input.description === void 0 && input.external_id === void 0) {
6779
+ throw new Error("updateAgent requires manifest, description, and/or external_id");
6741
6780
  }
6742
6781
  const db = transaction ?? this.#db;
6743
6782
  try {
6744
6783
  const row = await db.updateTable("agent").set({
6745
6784
  ...input.manifest === void 0 ? {} : { manifest: jsonbBind(input.manifest) },
6785
+ ...input.description === void 0 ? {} : { description: input.description },
6746
6786
  ...input.external_id === void 0 ? {} : { external_id: input.external_id },
6747
6787
  updated_at: nowIso()
6748
6788
  }).where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).returning(recordColumns5).executeTakeFirst();
@@ -6791,8 +6831,8 @@ import {
6791
6831
  CreatedBySubjectSchema as CreatedBySubjectSchema8
6792
6832
  } from "@truefoundry/trueforge-core/agent-session";
6793
6833
  import {
6794
- decodeOffsetPageToken as decodeOffsetPageToken5,
6795
- paginateOffsetRows as paginateOffsetRows3
6834
+ decodeOffsetPageToken as decodeOffsetPageToken7,
6835
+ paginateOffsetRows as paginateOffsetRows5
6796
6836
  } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
6797
6837
  import { sql as sql22 } from "kysely";
6798
6838
  function scheduleColumns(eb) {
@@ -6959,7 +6999,7 @@ var init_SqliteScheduleStore = __esm({
6959
6999
  await db.deleteFrom("schedule").where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).execute();
6960
7000
  }
6961
7001
  async listSchedules(input, transaction) {
6962
- const offset = decodeOffsetPageToken5(input.page_token);
7002
+ const offset = decodeOffsetPageToken7(input.page_token);
6963
7003
  const db = transaction ?? this.#db;
6964
7004
  let query = db.selectFrom("schedule").select(scheduleColumns).where("tenant_id", "=", input.tenant_id);
6965
7005
  if (input.agent_names !== void 0) {
@@ -6967,7 +7007,7 @@ var init_SqliteScheduleStore = __esm({
6967
7007
  }
6968
7008
  query = whereCreatedByOrAgentIds2(query, input.created_by_or_agent_ids);
6969
7009
  const rows = await query.orderBy("created_at", "desc").orderBy("id").limit(input.limit + 1).offset(offset).execute();
6970
- const { data, pagination } = paginateOffsetRows3(rows, input.limit, offset);
7010
+ const { data, pagination } = paginateOffsetRows5(rows, input.limit, offset);
6971
7011
  return { data: data.map(toScheduleRecord), pagination };
6972
7012
  }
6973
7013
  async getOwnedIds(input, transaction) {
@@ -6979,10 +7019,10 @@ var init_SqliteScheduleStore = __esm({
6979
7019
  return rows.map((row) => row.id);
6980
7020
  }
6981
7021
  async listRuns(input, transaction) {
6982
- const offset = decodeOffsetPageToken5(input.page_token);
7022
+ const offset = decodeOffsetPageToken7(input.page_token);
6983
7023
  const db = transaction ?? this.#db;
6984
7024
  const rows = await db.selectFrom("schedule_run").select(runColumns).where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).orderBy("scheduled_for", "desc").orderBy("id").limit(input.limit + 1).offset(offset).execute();
6985
- const { data, pagination } = paginateOffsetRows3(rows, input.limit, offset);
7025
+ const { data, pagination } = paginateOffsetRows5(rows, input.limit, offset);
6986
7026
  return { data: data.map(toRunRecord), pagination };
6987
7027
  }
6988
7028
  async getRun(input, transaction) {
@@ -7709,8 +7749,8 @@ __export(PostgresScheduleStore_exports, {
7709
7749
  });
7710
7750
  import { CreatedBySubjectSchema as CreatedBySubjectSchema9 } from "@truefoundry/trueforge-core/agent-session";
7711
7751
  import {
7712
- decodeOffsetPageToken as decodeOffsetPageToken6,
7713
- paginateOffsetRows as paginateOffsetRows4
7752
+ decodeOffsetPageToken as decodeOffsetPageToken8,
7753
+ paginateOffsetRows as paginateOffsetRows6
7714
7754
  } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
7715
7755
  import { sql as sql25 } from "kysely";
7716
7756
  function toScheduleRecord2(row) {
@@ -7855,7 +7895,7 @@ var init_PostgresScheduleStore = __esm({
7855
7895
  await db.deleteFrom("schedule").where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).execute();
7856
7896
  }
7857
7897
  async listSchedules(input, transaction) {
7858
- const offset = decodeOffsetPageToken6(input.page_token);
7898
+ const offset = decodeOffsetPageToken8(input.page_token);
7859
7899
  const db = transaction ?? this.#db;
7860
7900
  let query = db.selectFrom("schedule").selectAll().where("tenant_id", "=", input.tenant_id);
7861
7901
  if (input.agent_names !== void 0) {
@@ -7863,7 +7903,7 @@ var init_PostgresScheduleStore = __esm({
7863
7903
  }
7864
7904
  query = whereCreatedByOrAgentIds(query, input.created_by_or_agent_ids);
7865
7905
  const rows = await query.orderBy("created_at", "desc").orderBy("id").limit(input.limit + 1).offset(offset).execute();
7866
- const { data, pagination } = paginateOffsetRows4(rows, input.limit, offset);
7906
+ const { data, pagination } = paginateOffsetRows6(rows, input.limit, offset);
7867
7907
  return { data: data.map(toScheduleRecord2), pagination };
7868
7908
  }
7869
7909
  async getOwnedIds(input, transaction) {
@@ -7875,10 +7915,10 @@ var init_PostgresScheduleStore = __esm({
7875
7915
  return rows.map((row) => row.id);
7876
7916
  }
7877
7917
  async listRuns(input, transaction) {
7878
- const offset = decodeOffsetPageToken6(input.page_token);
7918
+ const offset = decodeOffsetPageToken8(input.page_token);
7879
7919
  const db = transaction ?? this.#db;
7880
7920
  const rows = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).orderBy("scheduled_for", "desc").orderBy("id").limit(input.limit + 1).offset(offset).execute();
7881
- const { data, pagination } = paginateOffsetRows4(rows, input.limit, offset);
7921
+ const { data, pagination } = paginateOffsetRows6(rows, input.limit, offset);
7882
7922
  return { data: data.map(toRunRecord2), pagination };
7883
7923
  }
7884
7924
  async getRun(input, transaction) {
@@ -7998,101 +8038,162 @@ import { HTTPException as HTTPException2 } from "hono/http-exception";
7998
8038
  import { createRoute } from "@hono/zod-openapi";
7999
8039
 
8000
8040
  // src/schemas/agentImport.ts
8041
+ import { z as z3 } from "@hono/zod-openapi";
8042
+ import { AgentSpecSchema as AgentSpecSchema5, CreatedBySubjectSchema as CreatedBySubjectSchema3 } from "@truefoundry/trueforge-core/agent-session";
8043
+
8044
+ // src/schemas/agent.ts
8001
8045
  init_common();
8002
8046
  import { z as z2 } from "@hono/zod-openapi";
8003
- import { AgentSpecSchema as AgentSpecSchema4, CreatedBySubjectSchema as CreatedBySubjectSchema2 } from "@truefoundry/trueforge-core/agent-session";
8047
+ import {
8048
+ AgentSpecSchema as AgentSpecSchema4,
8049
+ CreatedBySubjectSchema as CreatedBySubjectSchema2,
8050
+ TokenPaginationSchema
8051
+ } from "@truefoundry/trueforge-core/agent-session";
8004
8052
  var RESERVED_AGENT_NAMES = /* @__PURE__ */ new Set(["tfg", "trueforge"]);
8005
- var ImportAgentItemSchema = z2.object({
8053
+ var AGENT_DESCRIPTION_MAX_LENGTH = 1024;
8054
+ var AgentDescriptionSchema = z2.string().trim().min(1).max(AGENT_DESCRIPTION_MAX_LENGTH);
8055
+ var CreateAgentRequestSchema = z2.object({
8006
8056
  name: NameSchema.refine((name) => !RESERVED_AGENT_NAMES.has(name), {
8007
8057
  message: "Agent name is reserved, cannot be used"
8008
8058
  }),
8059
+ description: AgentDescriptionSchema,
8060
+ manifest: AgentSpecSchema4
8061
+ }).strict().openapi("CreateAgentRequest");
8062
+ var UpdateAgentRequestSchema = z2.object({
8063
+ description: AgentDescriptionSchema.optional(),
8064
+ manifest: AgentSpecSchema4
8065
+ }).strict().openapi("UpdateAgentRequest");
8066
+ var AgentSchema = z2.object({
8067
+ id: z2.string().min(1).describe("Immutable server-generated agent identifier."),
8068
+ name: NameSchema,
8069
+ description: AgentDescriptionSchema,
8009
8070
  manifest: AgentSpecSchema4,
8010
- tenant_id: z2.string().min(1).describe("Tenant to create the agent under."),
8011
- created_by_subject: CreatedBySubjectSchema2.describe("Original creator to persist on the agent.")
8071
+ created_by_subject: CreatedBySubjectSchema2
8072
+ }).strict().openapi("Agent");
8073
+ var GetAgentResponseSchema = z2.object({ data: AgentSchema }).openapi("GetAgentResponse");
8074
+ var ListAgentsResponseSchema = z2.object({
8075
+ data: z2.array(AgentSchema),
8076
+ pagination: TokenPaginationSchema
8077
+ }).openapi("ListAgentsResponse");
8078
+ var DeleteAgentResponseSchema = z2.object({}).openapi("DeleteAgentResponse");
8079
+ var AgentCodeSnippetSampleCodeSchema = z2.object({
8080
+ stream: z2.string().describe("SDK sample that streams turn events."),
8081
+ non_stream: z2.string().describe("SDK sample that creates a turn without streaming.")
8082
+ }).strict().openapi("AgentCodeSnippetSampleCode");
8083
+ var AgentCodeSnippetSchema = z2.object({
8084
+ label_name: z2.string().min(1),
8085
+ language: z2.string().min(1),
8086
+ icon: z2.url(),
8087
+ sample_code: AgentCodeSnippetSampleCodeSchema
8088
+ }).strict().openapi("AgentCodeSnippet");
8089
+ var AgentCodeSnippetsSchema = z2.object({
8090
+ base_url: z2.url().describe("Public base URL for the TrueForge SDK `baseUrl`."),
8091
+ snippets: z2.array(AgentCodeSnippetSchema)
8092
+ }).strict().openapi("AgentCodeSnippets");
8093
+ var GetAgentCodeSnippetsResponseSchema = z2.object({ data: AgentCodeSnippetsSchema }).openapi("GetAgentCodeSnippetsResponse");
8094
+ var GetAgentCodeSnippetsRequestQuerySchema = z2.object({
8095
+ base_url: z2.url().optional().describe(
8096
+ "Public SDK base URL from the browser. When omitted, derived from the request origin and PUBLIC_BASE_URL."
8097
+ )
8098
+ }).strict().openapi("GetAgentCodeSnippetsRequestQuery");
8099
+
8100
+ // src/schemas/agentImport.ts
8101
+ init_common();
8102
+ var RESERVED_AGENT_NAMES2 = /* @__PURE__ */ new Set(["tfg", "trueforge"]);
8103
+ var ImportAgentCollaboratorSchema = z3.object({}).loose().openapi("ImportAgentCollaborator");
8104
+ var ImportAgentItemSchema = z3.object({
8105
+ name: NameSchema.refine((name) => !RESERVED_AGENT_NAMES2.has(name), {
8106
+ message: "Agent name is reserved, cannot be used"
8107
+ }),
8108
+ description: AgentDescriptionSchema.optional(),
8109
+ manifest: AgentSpecSchema5,
8110
+ tenant_id: z3.string().min(1).describe("Tenant to create the agent under."),
8111
+ created_by_subject: CreatedBySubjectSchema3.describe("Original creator to persist on the agent."),
8112
+ collaborators: z3.array(ImportAgentCollaboratorSchema).optional()
8012
8113
  }).strict().openapi("ImportAgentItem");
8013
- var ImportAgentsRequestSchema = z2.object({
8014
- agents: z2.array(ImportAgentItemSchema).describe("Agents to create; each carries tenant_id and created_by_subject.")
8114
+ var ImportAgentsRequestSchema = z3.object({
8115
+ agents: z3.array(ImportAgentItemSchema).describe("Agents to create; each carries tenant_id and created_by_subject.")
8015
8116
  }).strict().openapi("ImportAgentsRequest");
8016
- var ImportAgentItemResultSchema = z2.object({
8017
- name: z2.string().min(1),
8018
- tenant_id: z2.string().min(1),
8019
- status: z2.enum(["created", "exists", "failed"]),
8020
- agent_id: z2.string().min(1).optional(),
8021
- error: z2.string().optional()
8117
+ var ImportAgentItemResultSchema = z3.object({
8118
+ name: z3.string().min(1),
8119
+ tenant_id: z3.string().min(1),
8120
+ status: z3.enum(["created", "exists", "failed"]),
8121
+ agent_id: z3.string().min(1).optional(),
8122
+ error: z3.string().optional()
8022
8123
  }).strict().openapi("ImportAgentItemResult");
8023
- var ImportAgentsResultSchema = z2.object({
8024
- results: z2.array(ImportAgentItemResultSchema)
8124
+ var ImportAgentsResultSchema = z3.object({
8125
+ results: z3.array(ImportAgentItemResultSchema)
8025
8126
  }).strict().openapi("ImportAgentsResult");
8026
- var ImportAgentsResponseSchema = z2.object({
8127
+ var ImportAgentsResponseSchema = z3.object({
8027
8128
  data: ImportAgentsResultSchema
8028
8129
  }).strict().openapi("ImportAgentsResponse");
8029
- var ImportSessionSnapshotSchema = z2.object({
8030
- session_id: z2.string().min(1),
8031
- tenant_id: z2.string().min(1),
8032
- created_by_subject: CreatedBySubjectSchema2,
8033
- agent_name: z2.string().min(1).nullable().optional(),
8034
- agent_id: z2.string().min(1).nullable().optional(),
8035
- agent_spec: z2.record(z2.string(), z2.unknown()).nullable().optional(),
8036
- title: z2.string().nullable(),
8037
- last_turn_id: z2.string().nullable(),
8038
- custom: z2.record(z2.string(), z2.unknown()).nullable(),
8039
- last_activity_timestamp_ms: z2.number(),
8040
- created_at: z2.string().min(1),
8041
- updated_at: z2.string().min(1)
8130
+ var ImportSessionSnapshotSchema = z3.object({
8131
+ session_id: z3.string().min(1),
8132
+ tenant_id: z3.string().min(1),
8133
+ created_by_subject: CreatedBySubjectSchema3,
8134
+ agent_name: z3.string().min(1).nullable().optional(),
8135
+ agent_id: z3.string().min(1).nullable().optional(),
8136
+ agent_spec: z3.record(z3.string(), z3.unknown()).nullable().optional(),
8137
+ title: z3.string().nullable(),
8138
+ last_turn_id: z3.string().nullable(),
8139
+ custom: z3.record(z3.string(), z3.unknown()).nullable(),
8140
+ last_activity_timestamp_ms: z3.number(),
8141
+ created_at: z3.string().min(1),
8142
+ updated_at: z3.string().min(1)
8042
8143
  }).loose().openapi("ImportSessionSnapshot");
8043
- var ImportSessionThreadSchema = z2.object({
8044
- thread_id: z2.string().min(1),
8045
- context: z2.array(z2.unknown()),
8046
- current_context_usage: z2.unknown(),
8047
- parent: z2.unknown().nullable(),
8048
- completion: z2.unknown().nullable(),
8049
- agent_info: z2.unknown().nullable(),
8050
- capability_state: z2.record(z2.string(), z2.unknown()).nullable()
8144
+ var ImportSessionThreadSchema = z3.object({
8145
+ thread_id: z3.string().min(1),
8146
+ context: z3.array(z3.unknown()),
8147
+ current_context_usage: z3.unknown(),
8148
+ parent: z3.unknown().nullable(),
8149
+ completion: z3.unknown().nullable(),
8150
+ agent_info: z3.unknown().nullable(),
8151
+ capability_state: z3.record(z3.string(), z3.unknown()).nullable()
8051
8152
  }).loose().openapi("ImportSessionThread");
8052
- var ImportSessionEventSchema = z2.object({
8053
- id: z2.string().min(1),
8054
- created_at: z2.string().min(1)
8153
+ var ImportSessionEventSchema = z3.object({
8154
+ id: z3.string().min(1),
8155
+ created_at: z3.string().min(1)
8055
8156
  }).loose().openapi("ImportSessionEvent");
8056
- var ImportSessionTurnSchema = z2.object({
8057
- turn_id: z2.string().min(1),
8058
- first_turn_id: z2.string().min(1),
8059
- previous_turn_id: z2.string().nullable(),
8060
- ancestor_ids: z2.array(z2.string()),
8061
- input: z2.array(z2.unknown()),
8062
- state: z2.unknown(),
8063
- checkpoint: z2.unknown(),
8064
- custom: z2.record(z2.string(), z2.unknown()).nullable(),
8065
- created_at: z2.string().min(1),
8066
- updated_at: z2.string().min(1),
8067
- threads: z2.array(ImportSessionThreadSchema),
8068
- events: z2.array(ImportSessionEventSchema)
8157
+ var ImportSessionTurnSchema = z3.object({
8158
+ turn_id: z3.string().min(1),
8159
+ first_turn_id: z3.string().min(1),
8160
+ previous_turn_id: z3.string().nullable(),
8161
+ ancestor_ids: z3.array(z3.string()),
8162
+ input: z3.array(z3.unknown()),
8163
+ state: z3.unknown(),
8164
+ checkpoint: z3.unknown(),
8165
+ custom: z3.record(z3.string(), z3.unknown()).nullable(),
8166
+ created_at: z3.string().min(1),
8167
+ updated_at: z3.string().min(1),
8168
+ threads: z3.array(ImportSessionThreadSchema),
8169
+ events: z3.array(ImportSessionEventSchema)
8069
8170
  }).loose().openapi("ImportSessionTurn");
8070
- var ImportSessionRequestSchema = z2.object({
8171
+ var ImportSessionRequestSchema = z3.object({
8071
8172
  session: ImportSessionSnapshotSchema,
8072
- turns: z2.array(ImportSessionTurnSchema).min(1)
8173
+ turns: z3.array(ImportSessionTurnSchema).min(1)
8073
8174
  }).openapi("ImportSessionRequest");
8074
- var ImportSessionResultSchema = z2.object({
8075
- imported: z2.boolean(),
8076
- session_id: z2.string()
8175
+ var ImportSessionResultSchema = z3.object({
8176
+ imported: z3.boolean(),
8177
+ session_id: z3.string()
8077
8178
  }).openapi("ImportSessionResult");
8078
- var ImportSessionResponseSchema = z2.object({ data: ImportSessionResultSchema }).openapi("ImportSessionResponse");
8079
- var ImportSessionsCheckpointQuerySchema = z2.object({
8080
- tenant_id: z2.string().min(1).describe("Tenant whose imported-session watermark to read.")
8179
+ var ImportSessionResponseSchema = z3.object({ data: ImportSessionResultSchema }).openapi("ImportSessionResponse");
8180
+ var ImportSessionsCheckpointQuerySchema = z3.object({
8181
+ tenant_id: z3.string().min(1).describe("Tenant whose imported-session watermark to read.")
8081
8182
  }).strict().openapi("ImportSessionsCheckpointQuery");
8082
- var ImportSessionsCheckpointResponseSchema = z2.object({
8083
- data: z2.object({
8084
- created_at: z2.string().nullable()
8183
+ var ImportSessionsCheckpointResponseSchema = z3.object({
8184
+ data: z3.object({
8185
+ created_at: z3.string().nullable()
8085
8186
  })
8086
8187
  }).strict().openapi("ImportSessionsCheckpointResponse");
8087
8188
 
8088
8189
  // src/schemas/errors.ts
8089
- import { z as z3 } from "@hono/zod-openapi";
8090
- var RequestErrorResponseSchema = z3.object({
8091
- error: z3.object({
8092
- message: z3.string().describe("Human-readable explanation of the failure."),
8093
- type: z3.string().optional().describe("Optional error category (e.g. validation vs conflict)."),
8094
- code: z3.string().nullable().optional().describe("Optional machine-readable error code; null when not applicable."),
8095
- param: z3.string().nullable().optional().describe("Optional request field that caused the error; null when not field-specific.")
8190
+ import { z as z4 } from "@hono/zod-openapi";
8191
+ var RequestErrorResponseSchema = z4.object({
8192
+ error: z4.object({
8193
+ message: z4.string().describe("Human-readable explanation of the failure."),
8194
+ type: z4.string().optional().describe("Optional error category (e.g. validation vs conflict)."),
8195
+ code: z4.string().nullable().optional().describe("Optional machine-readable error code; null when not applicable."),
8196
+ param: z4.string().nullable().optional().describe("Optional request field that caused the error; null when not field-specific.")
8096
8197
  })
8097
8198
  }).openapi("RequestErrorResponse");
8098
8199
 
@@ -8197,7 +8298,7 @@ var getImportSessionsCheckpointRoute = createRoute({
8197
8298
  import { extractErrorLogFields } from "@truefoundry/trueforge-core/core";
8198
8299
  import { HTTPException } from "hono/http-exception";
8199
8300
  import { fetch as undiciFetch2 } from "undici";
8200
- import { z as z6 } from "zod";
8301
+ import { z as z7 } from "zod";
8201
8302
 
8202
8303
  // src/http/tls.ts
8203
8304
  import { readFileSync } from "fs";
@@ -8313,20 +8414,20 @@ function createInternalTlsDispatcher(options) {
8313
8414
  }
8314
8415
 
8315
8416
  // src/truefoundry/mapSfyAgentSkills.ts
8316
- import { z as z4 } from "zod";
8317
- var SfyRegistryManifestSchema = z4.object({
8417
+ import { z as z5 } from "zod";
8418
+ var SfyRegistryManifestSchema = z5.object({
8318
8419
  // Display label only — not TF ResourceName / DNS-label rules.
8319
- name: z4.string().min(1),
8320
- version: z4.number().int().positive(),
8420
+ name: z5.string().min(1),
8421
+ version: z5.number().int().positive(),
8321
8422
  // SFY field is `ml_repo`; TrueForge wire is `repository_name`.
8322
- ml_repo: z4.string().min(1),
8323
- source: z4.object({
8324
- description: z4.string().min(1).optional()
8423
+ ml_repo: z5.string().min(1),
8424
+ source: z5.object({
8425
+ description: z5.string().min(1).optional()
8325
8426
  }).optional()
8326
8427
  });
8327
- var SfyRegistrySkillSchema = z4.object({
8328
- latest_version: z4.object({
8329
- fqn: z4.string().min(1),
8428
+ var SfyRegistrySkillSchema = z5.object({
8429
+ latest_version: z5.object({
8430
+ fqn: z5.string().min(1),
8330
8431
  manifest: SfyRegistryManifestSchema
8331
8432
  })
8332
8433
  }).transform(({ latest_version }) => ({
@@ -8337,20 +8438,20 @@ var SfyRegistrySkillSchema = z4.object({
8337
8438
  repository_name: latest_version.manifest.ml_repo,
8338
8439
  version: latest_version.manifest.version
8339
8440
  }));
8340
- var SfyRegistrySkillVersionSchema = z4.object({
8341
- agent_skill_id: z4.string().min(1),
8342
- fqn: z4.string().min(1),
8441
+ var SfyRegistrySkillVersionSchema = z5.object({
8442
+ agent_skill_id: z5.string().min(1),
8443
+ fqn: z5.string().min(1),
8343
8444
  manifest: SfyRegistryManifestSchema
8344
8445
  });
8345
- var ResolvedAgentSkillVersionSchema = z4.object({
8346
- fqn: z4.string().min(1),
8347
- name: z4.string().min(1),
8348
- description: z4.string().min(1),
8349
- skill_md_content: z4.string().nullable().optional(),
8350
- presigned_url: z4.string().min(1).optional()
8446
+ var ResolvedAgentSkillVersionSchema = z5.object({
8447
+ fqn: z5.string().min(1),
8448
+ name: z5.string().min(1),
8449
+ description: z5.string().min(1),
8450
+ skill_md_content: z5.string().nullable().optional(),
8451
+ presigned_url: z5.string().min(1).optional()
8351
8452
  });
8352
- var ResolveAgentSkillVersionsResponseSchema = z4.object({
8353
- skills: z4.array(ResolvedAgentSkillVersionSchema)
8453
+ var ResolveAgentSkillVersionsResponseSchema = z5.object({
8454
+ skills: z5.array(ResolvedAgentSkillVersionSchema)
8354
8455
  });
8355
8456
  function mapSfyRegistrySkills(rows) {
8356
8457
  return rows.map((row) => SfyRegistrySkillSchema.parse(row));
@@ -8374,48 +8475,48 @@ function mapResolvedAgentSkillVersions(payload) {
8374
8475
  }
8375
8476
 
8376
8477
  // src/truefoundry/mapSfyMcpServers.ts
8377
- import { z as z5 } from "zod";
8478
+ import { z as z6 } from "zod";
8378
8479
  var MCP_PROXY_BASE_URL_TEMPLATE = "{{mcpProxyBaseURL}}";
8379
- var IsoInstantSchema = z5.union([z5.string().min(1), z5.date()]).transform((value, ctx) => {
8480
+ var IsoInstantSchema = z6.union([z6.string().min(1), z6.date()]).transform((value, ctx) => {
8380
8481
  if (value instanceof Date) {
8381
8482
  if (!Number.isFinite(value.getTime())) {
8382
8483
  ctx.addIssue({ code: "custom", message: "Invalid Date" });
8383
- return z5.NEVER;
8484
+ return z6.NEVER;
8384
8485
  }
8385
8486
  return value.toISOString();
8386
8487
  }
8387
8488
  const ms = Date.parse(value);
8388
8489
  if (!Number.isFinite(ms)) {
8389
8490
  ctx.addIssue({ code: "custom", message: "Invalid ISO timestamp" });
8390
- return z5.NEVER;
8491
+ return z6.NEVER;
8391
8492
  }
8392
8493
  return new Date(ms).toISOString();
8393
8494
  });
8394
- var SfyMcpServerRowSchema = z5.object({
8395
- id: z5.string().min(1),
8396
- name: z5.string().min(1),
8397
- proxyUrl: z5.string().min(1),
8495
+ var SfyMcpServerRowSchema = z6.object({
8496
+ id: z6.string().min(1),
8497
+ name: z6.string().min(1),
8498
+ proxyUrl: z6.string().min(1),
8398
8499
  createdAt: IsoInstantSchema,
8399
8500
  updatedAt: IsoInstantSchema,
8400
- manifest: z5.object({
8401
- description: z5.string().min(1).optional(),
8402
- auth_data: z5.object({
8403
- type: z5.string().min(1).optional()
8501
+ manifest: z6.object({
8502
+ description: z6.string().min(1).optional(),
8503
+ auth_data: z6.object({
8504
+ type: z6.string().min(1).optional()
8404
8505
  }).optional()
8405
8506
  }).optional()
8406
8507
  });
8407
- var SfyMcpAuthStatusAuthenticatedSchema = z5.object({ status: z5.literal("authenticated") });
8408
- var SfyMcpAuthStatusNotRequiredSchema = z5.object({ status: z5.literal("authentication_not_required") });
8409
- var SfyMcpAuthStatusRequiredSchema = z5.object({ status: z5.literal("authentication_required") });
8508
+ var SfyMcpAuthStatusAuthenticatedSchema = z6.object({ status: z6.literal("authenticated") });
8509
+ var SfyMcpAuthStatusNotRequiredSchema = z6.object({ status: z6.literal("authentication_not_required") });
8510
+ var SfyMcpAuthStatusRequiredSchema = z6.object({ status: z6.literal("authentication_required") });
8410
8511
  var SfyMcpAuthorizeRequiredSchema = SfyMcpAuthStatusRequiredSchema.extend({
8411
- authorization_endpoint: z5.url()
8512
+ authorization_endpoint: z6.url()
8412
8513
  });
8413
- var SfyMcpAuthStatusSchema = z5.discriminatedUnion("status", [
8514
+ var SfyMcpAuthStatusSchema = z6.discriminatedUnion("status", [
8414
8515
  SfyMcpAuthStatusAuthenticatedSchema,
8415
8516
  SfyMcpAuthStatusRequiredSchema,
8416
8517
  SfyMcpAuthStatusNotRequiredSchema
8417
8518
  ]);
8418
- var SfyMcpAuthorizeResultSchema = z5.discriminatedUnion("status", [
8519
+ var SfyMcpAuthorizeResultSchema = z6.discriminatedUnion("status", [
8419
8520
  SfyMcpAuthStatusAuthenticatedSchema,
8420
8521
  SfyMcpAuthorizeRequiredSchema,
8421
8522
  SfyMcpAuthStatusNotRequiredSchema
@@ -8486,45 +8587,46 @@ var AGENT_PERMISSIONS_PATH = "v1/authorize/permissions";
8486
8587
  var VEND_TOKEN_PATH = "internal/vend-token";
8487
8588
  var AGENT_SKILLS_PAGE_SIZE = 100;
8488
8589
  var AGENT_SKILL_RESOLVE_CHUNK_SIZE = 50;
8489
- var SessionSubjectSchema = z6.object({
8490
- subjectId: z6.string().min(1),
8491
- subjectType: z6.string().min(1),
8492
- subjectDisplayName: z6.string().nullable().optional(),
8493
- subjectSlug: z6.string().nullable().optional()
8590
+ var SessionSubjectSchema = z7.object({
8591
+ subjectId: z7.string().min(1),
8592
+ subjectType: z7.string().min(1),
8593
+ subjectDisplayName: z7.string().nullable().optional(),
8594
+ subjectSlug: z7.string().nullable().optional()
8494
8595
  });
8495
- var GetSessionUserSchema = z6.object({
8496
- tenantName: z6.string().min(1),
8497
- roles: z6.array(z6.string()),
8596
+ var GetSessionUserSchema = z7.object({
8597
+ tenantName: z7.string().min(1),
8598
+ roles: z7.array(z7.string()),
8498
8599
  subject: SessionSubjectSchema
8499
8600
  });
8500
- var GetSessionWireSchema = z6.object({
8601
+ var GetSessionWireSchema = z7.object({
8501
8602
  user: GetSessionUserSchema.nullable()
8502
8603
  });
8503
- var ListResponseSchema = z6.union([
8504
- z6.array(z6.unknown()),
8505
- z6.object({
8506
- data: z6.array(z6.unknown()).catch([]),
8507
- pagination: z6.object({ total: z6.number().optional() }).optional()
8604
+ var ListResponseSchema = z7.union([
8605
+ z7.array(z7.unknown()),
8606
+ z7.object({
8607
+ data: z7.array(z7.unknown()).catch([]),
8608
+ pagination: z7.object({ total: z7.number().optional() }).optional()
8508
8609
  })
8509
8610
  ]);
8510
- var ServiceFoundryErrorSchema = z6.object({
8511
- message: z6.union([z6.string(), z6.array(z6.string())]).optional()
8611
+ var ServiceFoundryErrorSchema = z7.object({
8612
+ message: z7.union([z7.string(), z7.array(z7.string())]).optional()
8512
8613
  });
8513
- var PutRemoteAgentResponseSchema = z6.object({
8514
- agentId: z6.string().min(1)
8614
+ var PutRemoteAgentResponseSchema = z7.object({
8615
+ agentId: z7.string().min(1)
8515
8616
  });
8516
- var AgentPermissionSchema = z6.enum(["READ_AGENT", "USE_AGENT", "MANAGE_AGENT", "DELETE_AGENT"]);
8517
- var AgentPermissionsSchema = z6.record(
8518
- z6.string(),
8519
- z6.array(z6.string()).transform(
8617
+ var AgentPermissionSchema = z7.enum(["READ_AGENT", "USE_AGENT", "MANAGE_AGENT", "DELETE_AGENT"]);
8618
+ var AgentPermissionsSchema = z7.record(
8619
+ z7.string(),
8620
+ z7.array(z7.string()).transform(
8520
8621
  (permissions) => permissions.flatMap((permission) => {
8521
8622
  const parsed = AgentPermissionSchema.safeParse(permission);
8522
8623
  return parsed.success ? [parsed.data] : [];
8523
8624
  })
8524
8625
  )
8525
8626
  );
8526
- var VendTokenResponseSchema = z6.object({
8527
- token: z6.string().min(1)
8627
+ var VendTokenResponseSchema = z7.object({
8628
+ subjectToken: z7.string().min(1),
8629
+ actorToken: z7.string().min(1)
8528
8630
  });
8529
8631
  var TFY_ASSUME_USER_HEADER = "x-tfy-assume-user";
8530
8632
  var TFY_SYSTEM_ASSUME_SUBJECT = "truefoundry";
@@ -8629,6 +8731,7 @@ var TrueFoundryServiceFoundryServerClient = class {
8629
8731
  }
8630
8732
  /** PUT `/internal/tfg/agents` — create/reuse remote agent + sync model/MCP grants. */
8631
8733
  async putRemoteAgent(input) {
8734
+ const hasCollaborators = input.collaborators && input.collaborators.length > 0;
8632
8735
  const payload = await this.#requestJson({
8633
8736
  url: this.#url(TFG_AGENTS_PATH),
8634
8737
  accessToken: input.accessToken,
@@ -8638,7 +8741,8 @@ var TrueFoundryServiceFoundryServerClient = class {
8638
8741
  name: input.name,
8639
8742
  description: input.description,
8640
8743
  model: input.model,
8641
- mcp_servers: input.mcp_servers
8744
+ mcp_servers: input.mcp_servers,
8745
+ ...hasCollaborators ? { collaborators: input.collaborators } : {}
8642
8746
  }
8643
8747
  });
8644
8748
  const parsed = PutRemoteAgentResponseSchema.safeParse(payload);
@@ -8867,7 +8971,8 @@ var TrueFoundryServiceFoundryServerClient = class {
8867
8971
  return parsed.data;
8868
8972
  }
8869
8973
  /**
8870
- * Exchange a TrueFoundry API key for an agent-scoped token.
8974
+ * Exchange a TrueFoundry API key for dual agent-scoped tokens.
8975
+ * Wire `actorToken` is the agent identity (`asAgent`); wire `subjectToken` is the user with agent in `act` (`asUser`).
8871
8976
  * Authenticated with the server API key, not the user bearer.
8872
8977
  */
8873
8978
  async vendToken(input) {
@@ -8893,7 +8998,7 @@ var TrueFoundryServiceFoundryServerClient = class {
8893
8998
  cause: parsed.error
8894
8999
  });
8895
9000
  }
8896
- return parsed.data.token;
9001
+ return parsed.data;
8897
9002
  }
8898
9003
  #parseListResponse(payload) {
8899
9004
  const parsed = ListResponseSchema.safeParse(payload);
@@ -9021,9 +9126,13 @@ function createAgentImportRouter(deps) {
9021
9126
  const created = await agentStore.createAgent({
9022
9127
  tenant_id: agent.tenant_id,
9023
9128
  name: agent.name,
9129
+ description: agent.description ?? agent.name,
9024
9130
  manifest: agent.manifest,
9025
9131
  external_id: null,
9026
- created_by_subject: agent.created_by_subject
9132
+ created_by_subject: agent.created_by_subject,
9133
+ custom: {
9134
+ ...agent.collaborators ? { collaborators: agent.collaborators } : {}
9135
+ }
9027
9136
  });
9028
9137
  results.push({
9029
9138
  name: created.name,
@@ -9084,6 +9193,7 @@ function createAgentImportRouter(deps) {
9084
9193
 
9085
9194
  // src/apis/agents.ts
9086
9195
  import { OpenAPIHono as OpenAPIHono2 } from "@hono/zod-openapi";
9196
+ import { InvalidPageTokenError } from "@truefoundry/trueforge-core/agent-session";
9087
9197
 
9088
9198
  // src/auth/identity.ts
9089
9199
  init_config();
@@ -9120,11 +9230,15 @@ function asTrueFoundryRequestContext(context) {
9120
9230
  }
9121
9231
  return context;
9122
9232
  }
9233
+ function accessTokensFromCaller(context) {
9234
+ const resolve3 = callerAccessToken(context);
9235
+ return { asAgent: resolve3, asUser: resolve3 };
9236
+ }
9123
9237
  function agentAccessToken(input) {
9124
9238
  const { client, requestContext: context } = input;
9125
9239
  const agentId = requireTrueFoundryAgentExternalId(input.agent);
9126
9240
  let pending;
9127
- return () => {
9241
+ const vended = () => {
9128
9242
  if (pending === void 0) {
9129
9243
  input.logger.info("Exchanging user context for agent access token", {
9130
9244
  subject: context.subject.id,
@@ -9137,6 +9251,10 @@ function agentAccessToken(input) {
9137
9251
  }
9138
9252
  return pending;
9139
9253
  };
9254
+ return {
9255
+ asAgent: async () => (await vended()).actorToken,
9256
+ asUser: async () => (await vended()).subjectToken
9257
+ };
9140
9258
  }
9141
9259
  function callerAccessToken(context) {
9142
9260
  if (context.user_credential === null) {
@@ -9149,7 +9267,7 @@ function callerAccessToken(context) {
9149
9267
  }
9150
9268
  function accessTokenForRequest(input) {
9151
9269
  if (input.agent === void 0) {
9152
- return callerAccessToken(input.requestContext);
9270
+ return accessTokensFromCaller(input.requestContext);
9153
9271
  }
9154
9272
  const agentId = requireTrueFoundryAgentExternalId(input.agent);
9155
9273
  const cache = input.requestContext[accessTokenCache];
@@ -9157,14 +9275,14 @@ function accessTokenForRequest(input) {
9157
9275
  if (existing !== void 0) {
9158
9276
  return existing;
9159
9277
  }
9160
- const resolveAgentAccessToken = agentAccessToken({
9278
+ const tokens = agentAccessToken({
9161
9279
  client: input.client,
9162
9280
  requestContext: input.requestContext,
9163
9281
  agent: input.agent,
9164
9282
  logger: input.logger
9165
9283
  });
9166
- cache.set(agentId, resolveAgentAccessToken);
9167
- return resolveAgentAccessToken;
9284
+ cache.set(agentId, tokens);
9285
+ return tokens;
9168
9286
  }
9169
9287
 
9170
9288
  // src/auth/identity.ts
@@ -9230,67 +9348,44 @@ init_agentStore();
9230
9348
 
9231
9349
  // src/routes/agentRoutes.ts
9232
9350
  import { createRoute as createRoute2, z as z8 } from "@hono/zod-openapi";
9233
-
9234
- // src/schemas/agent.ts
9235
9351
  init_common();
9236
- import { z as z7 } from "@hono/zod-openapi";
9237
- import { AgentSpecSchema as AgentSpecSchema5, CreatedBySubjectSchema as CreatedBySubjectSchema3 } from "@truefoundry/trueforge-core/agent-session";
9238
- var RESERVED_AGENT_NAMES2 = /* @__PURE__ */ new Set(["tfg", "trueforge"]);
9239
- var CreateAgentRequestSchema = z7.object({
9240
- name: NameSchema.refine((name) => !RESERVED_AGENT_NAMES2.has(name), {
9241
- message: "Agent name is reserved, cannot be used"
9242
- }),
9243
- manifest: AgentSpecSchema5
9244
- }).strict().openapi("CreateAgentRequest");
9245
- var UpdateAgentRequestSchema = z7.object({
9246
- manifest: AgentSpecSchema5
9247
- }).strict().openapi("UpdateAgentRequest");
9248
- var AgentSchema = z7.object({
9249
- id: z7.string().min(1).describe("Immutable server-generated agent identifier."),
9250
- name: NameSchema,
9251
- manifest: AgentSpecSchema5,
9252
- created_by_subject: CreatedBySubjectSchema3
9253
- }).strict().openapi("Agent");
9254
- var GetAgentResponseSchema = z7.object({ data: AgentSchema }).openapi("GetAgentResponse");
9255
- var ListAgentsResponseSchema = z7.object({ data: z7.array(AgentSchema) }).openapi("ListAgentsResponse");
9256
- var DeleteAgentResponseSchema = z7.object({}).openapi("DeleteAgentResponse");
9257
- var AgentCodeSnippetSampleCodeSchema = z7.object({
9258
- stream: z7.string().describe("SDK sample that streams turn events."),
9259
- non_stream: z7.string().describe("SDK sample that creates a turn without streaming.")
9260
- }).strict().openapi("AgentCodeSnippetSampleCode");
9261
- var AgentCodeSnippetSchema = z7.object({
9262
- label_name: z7.string().min(1),
9263
- language: z7.string().min(1),
9264
- icon: z7.url(),
9265
- sample_code: AgentCodeSnippetSampleCodeSchema
9266
- }).strict().openapi("AgentCodeSnippet");
9267
- var AgentCodeSnippetsSchema = z7.object({
9268
- base_url: z7.url().describe("Public base URL for the TrueForge SDK `baseUrl`."),
9269
- snippets: z7.array(AgentCodeSnippetSchema)
9270
- }).strict().openapi("AgentCodeSnippets");
9271
- var GetAgentCodeSnippetsResponseSchema = z7.object({ data: AgentCodeSnippetsSchema }).openapi("GetAgentCodeSnippetsResponse");
9272
- var GetAgentCodeSnippetsRequestQuerySchema = z7.object({
9273
- base_url: z7.url().optional().describe(
9274
- "Public SDK base URL from the browser. When omitted, derived from the request origin and PUBLIC_BASE_URL."
9275
- )
9276
- }).strict().openapi("GetAgentCodeSnippetsRequestQuery");
9352
+
9353
+ // src/routes/fernExtensions.ts
9354
+ var TOKEN_PAGINATION = {
9355
+ cursor: "$request.page_token",
9356
+ next_cursor: "$response.pagination.next_page_token",
9357
+ results: "$response.data"
9358
+ };
9277
9359
 
9278
9360
  // src/routes/agentRoutes.ts
9279
9361
  var AgentIdParamsSchema = z8.object({
9280
9362
  agent_id: z8.string().min(1).max(64).describe("Immutable agent identifier.")
9281
9363
  });
9364
+ var ListAgentsQuerySchema = z8.object({
9365
+ limit: z8.coerce.number().int().min(1).max(AGENTS_PAGE_LIMIT).optional().default(AGENTS_PAGE_DEFAULT).describe(`Page size. Defaults to ${String(AGENTS_PAGE_DEFAULT)}, max ${String(AGENTS_PAGE_LIMIT)}.`),
9366
+ page_token: z8.string().optional().describe("Opaque token from a previous response `next_page_token`."),
9367
+ agent_name: z8.string().trim().min(1).optional().describe("Case-insensitive substring match on agent name.")
9368
+ }).openapi("ListAgentsQuery");
9282
9369
  var listAgentsRoute = createRoute2({
9283
9370
  method: "get",
9284
9371
  path: "/",
9285
9372
  tags: ["Agents" /* AGENTS */],
9286
9373
  summary: "List agents",
9287
- description: "All configured agents for the tenant.",
9374
+ description: "List configured agents for the tenant, ordered by name. Optional `agent_name` filters by substring.",
9288
9375
  "x-fern-sdk-group-name": ["agents"],
9289
9376
  "x-fern-sdk-method-name": "list",
9377
+ "x-fern-pagination": TOKEN_PAGINATION,
9378
+ request: {
9379
+ query: ListAgentsQuerySchema
9380
+ },
9290
9381
  responses: {
9291
9382
  200: {
9292
9383
  content: { "application/json": { schema: ListAgentsResponseSchema } },
9293
- description: "All configured agents."
9384
+ description: "Paginated matching agents."
9385
+ },
9386
+ 400: {
9387
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
9388
+ description: "Invalid query parameters or page token."
9294
9389
  },
9295
9390
  401: {
9296
9391
  content: { "application/json": { schema: RequestErrorResponseSchema } },
@@ -9408,7 +9503,7 @@ var putAgentRoute = createRoute2({
9408
9503
  path: "/{agent_id}",
9409
9504
  tags: ["Agents" /* AGENTS */],
9410
9505
  summary: "Update an agent",
9411
- description: "Replaces the manifest for an existing agent keyed by immutable `agent_id`.",
9506
+ description: "Update an existing agent by immutable id.",
9412
9507
  "x-fern-sdk-group-name": ["agents"],
9413
9508
  "x-fern-sdk-method-name": "update",
9414
9509
  request: {
@@ -9614,6 +9709,44 @@ async function checkSnapshotStatus({
9614
9709
  }
9615
9710
 
9616
9711
  // src/runtime/sessionResources.ts
9712
+ var X_TFY_METADATA = "x-tfy-metadata";
9713
+ var TFG_METADATA_PREFIX = "tfg";
9714
+ function buildGatewayMetadata(input) {
9715
+ const metadata = {
9716
+ [`${TFG_METADATA_PREFIX}.session_id`]: input.session.session_id,
9717
+ [`${TFG_METADATA_PREFIX}.turn_id`]: input.turnId
9718
+ };
9719
+ const { agent } = input.session;
9720
+ if (agent.type === "reference") {
9721
+ metadata[`${TFG_METADATA_PREFIX}.agent_id`] = agent.id;
9722
+ if (agent.name !== null) {
9723
+ metadata[`${TFG_METADATA_PREFIX}.agent_name`] = agent.name;
9724
+ }
9725
+ }
9726
+ return metadata;
9727
+ }
9728
+ function gatewayMetadataHeaders(metadata) {
9729
+ if (Object.keys(metadata).length === 0) {
9730
+ return {};
9731
+ }
9732
+ return { [X_TFY_METADATA]: JSON.stringify(metadata) };
9733
+ }
9734
+ function withGatewayMetadataHeaders(input) {
9735
+ const { headers, metadataHeaders } = input;
9736
+ if (Object.keys(metadataHeaders).length === 0) {
9737
+ return headers;
9738
+ }
9739
+ if (typeof headers !== "function") {
9740
+ return { ...headers, ...metadataHeaders };
9741
+ }
9742
+ return async () => {
9743
+ const result = await headers();
9744
+ if ("authRequired" in result) {
9745
+ return result;
9746
+ }
9747
+ return { headers: { ...result.headers, ...metadataHeaders } };
9748
+ };
9749
+ }
9617
9750
  function parseModelFqn(name) {
9618
9751
  const slash = name.indexOf("/");
9619
9752
  if (slash <= 0 || slash === name.length - 1) {
@@ -9794,11 +9927,19 @@ async function agentIfAccessible(input) {
9794
9927
  async function listAccessibleAgents(input) {
9795
9928
  const access = await input.authorizer.listAgentAccess({ context: input.context, action: input.action });
9796
9929
  if (access.kind === "all") {
9797
- return input.store.listAgents({ tenant_id: input.context.tenant_id });
9930
+ return input.store.listAgents({
9931
+ tenant_id: input.context.tenant_id,
9932
+ agent_name: input.agent_name,
9933
+ limit: input.limit,
9934
+ page_token: input.page_token
9935
+ });
9798
9936
  }
9799
9937
  return input.store.listAgents({
9800
9938
  tenant_id: input.context.tenant_id,
9801
- external_ids: access.agent_external_ids
9939
+ external_ids: access.agent_external_ids,
9940
+ agent_name: input.agent_name,
9941
+ limit: input.limit,
9942
+ page_token: input.page_token
9802
9943
  });
9803
9944
  }
9804
9945
  async function resolveManagedAgentIds(input) {
@@ -9807,11 +9948,14 @@ async function resolveManagedAgentIds(input) {
9807
9948
  if (access.kind === "all") {
9808
9949
  return [];
9809
9950
  }
9810
- const agents = await store.listAgents({
9951
+ const { data } = await store.listAgents({
9811
9952
  tenant_id: context.tenant_id,
9812
- external_ids: access.agent_external_ids
9953
+ external_ids: access.agent_external_ids,
9954
+ agent_name: void 0,
9955
+ limit: void 0,
9956
+ page_token: void 0
9813
9957
  });
9814
- return agents.map((agent) => agent.id);
9958
+ return data.map((agent) => agent.id);
9815
9959
  }
9816
9960
  async function canReadAgentBoundResource(input) {
9817
9961
  const { store, context, authorizer, created_by_subject_id, agent_id } = input;
@@ -9919,6 +10063,7 @@ function toWireAgent(record) {
9919
10063
  return {
9920
10064
  id: record.id,
9921
10065
  name: record.name,
10066
+ description: record.description,
9922
10067
  manifest: record.manifest,
9923
10068
  created_by_subject: record.created_by_subject
9924
10069
  };
@@ -9943,14 +10088,25 @@ async function validateManifest({
9943
10088
  }
9944
10089
  function createAgentsRouter(deps) {
9945
10090
  const listHandler = async (c) => {
10091
+ const { limit, page_token: pageToken, agent_name: agentName } = c.req.valid("query");
9946
10092
  const requestContext = deps.resolveRequestContext(c);
9947
- const records = await listAccessibleAgents({
9948
- store: deps.resolveAgentStore(c),
9949
- context: requestContext,
9950
- authorizer: deps.authorizer,
9951
- action: "read"
9952
- });
9953
- return c.json({ data: records.map(toWireAgent) }, 200);
10093
+ try {
10094
+ const { data, pagination } = await listAccessibleAgents({
10095
+ store: deps.resolveAgentStore(c),
10096
+ context: requestContext,
10097
+ authorizer: deps.authorizer,
10098
+ action: "read",
10099
+ agent_name: agentName,
10100
+ limit,
10101
+ page_token: pageToken
10102
+ });
10103
+ return c.json({ data: data.map(toWireAgent), pagination }, 200);
10104
+ } catch (error) {
10105
+ if (error instanceof InvalidPageTokenError) {
10106
+ return c.json({ error: { message: error.message } }, 400);
10107
+ }
10108
+ throw error;
10109
+ }
9954
10110
  };
9955
10111
  const createHandler = async (c) => {
9956
10112
  const body = c.req.valid("json");
@@ -9967,6 +10123,7 @@ function createAgentsRouter(deps) {
9967
10123
  const record = await deps.resolveAgentStore(c).createAgent({
9968
10124
  tenant_id: requestContext.tenant_id,
9969
10125
  name: body.name,
10126
+ description: body.description,
9970
10127
  manifest,
9971
10128
  external_id: null,
9972
10129
  created_by_subject: createdBySubjectFromRequestContext(requestContext)
@@ -10062,6 +10219,7 @@ function createAgentsRouter(deps) {
10062
10219
  const record = await deps.resolveAgentStore(c).updateAgent({
10063
10220
  tenant_id: requestContext.tenant_id,
10064
10221
  id: agentId,
10222
+ ...body.description === void 0 ? {} : { description: body.description },
10065
10223
  manifest
10066
10224
  });
10067
10225
  if (record === void 0) {
@@ -10758,7 +10916,8 @@ import { z as z16 } from "@hono/zod-openapi";
10758
10916
  // src/schemas/mcpServer.ts
10759
10917
  init_common();
10760
10918
  import { z as z15 } from "@hono/zod-openapi";
10761
- var McpServerTypeSchema = z15.enum(["remote", "truefoundry"]).openapi("MCPServerType");
10919
+ var MCP_SERVER_TYPES = ["remote", "truefoundry"];
10920
+ var McpServerTypeSchema = z15.enum(MCP_SERVER_TYPES).openapi("MCPServerType");
10762
10921
  var McpServerHeaderAuthSchema = z15.object({
10763
10922
  type: z15.literal("header").describe("Authenticate with static HTTP headers."),
10764
10923
  headers: z15.record(z15.string().min(1), z15.string().min(1)).refine((headers) => Object.keys(headers).length > 0, {
@@ -10772,14 +10931,21 @@ var McpServerDcrAuthSchema = z15.object({
10772
10931
  }).strict().openapi("MCPServerDcrAuth");
10773
10932
  var McpServerManifestAuthSchema = z15.discriminatedUnion("type", [McpServerHeaderAuthSchema, McpServerDcrAuthSchema]).describe("Optional auth settings. Omit when the server needs no credentials.").openapi("MCPServerManifestAuth");
10774
10933
  var McpServerDescriptionSchema = z15.string().trim().min(1).describe("Concise summary of what this MCP server provides.");
10775
- var McpServerManifestObjectSchema = z15.object({
10776
- type: McpServerTypeSchema,
10934
+ var RemoteMcpServerManifestSchema = z15.object({
10935
+ type: z15.literal(McpServerTypeSchema.enum.remote),
10777
10936
  name: NameSchema,
10778
- url: z15.url().describe("MCP endpoint URL. For `truefoundry`, the resolved AI Gateway proxy URL."),
10937
+ url: z15.url().describe("MCP endpoint URL."),
10779
10938
  description: McpServerDescriptionSchema,
10780
10939
  auth: McpServerManifestAuthSchema.optional()
10781
- }).strict();
10782
- var McpServerManifestSchema = McpServerManifestObjectSchema.openapi("MCPServerManifest");
10940
+ }).strict().openapi("RemoteMCPServerManifest");
10941
+ var TrueFoundryMcpServerManifestSchema = z15.object({
10942
+ type: z15.literal(McpServerTypeSchema.enum.truefoundry),
10943
+ name: NameSchema,
10944
+ url: z15.url().describe("Resolved AI Gateway proxy URL for this TrueFoundry-managed MCP server."),
10945
+ description: McpServerDescriptionSchema,
10946
+ auth: McpServerManifestAuthSchema.optional()
10947
+ }).strict().openapi("TrueFoundryMCPServerManifest");
10948
+ var McpServerManifestSchema = z15.discriminatedUnion("type", [RemoteMcpServerManifestSchema, TrueFoundryMcpServerManifestSchema]).openapi("MCPServerManifest");
10783
10949
  var McpAuthStatusSchema = z15.object({
10784
10950
  status: z15.enum(["authenticated", "auth_required", "not_required"]).describe("Current auth state for this MCP server."),
10785
10951
  authorization_url: z15.url().optional().describe("When auth is required, this contains the URL to redirect the user to for authorization.")
@@ -12422,7 +12588,7 @@ function createPermissionsRouter(deps) {
12422
12588
  // src/apis/schedules.ts
12423
12589
  import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
12424
12590
  import {
12425
- InvalidPageTokenError
12591
+ InvalidPageTokenError as InvalidPageTokenError2
12426
12592
  } from "@truefoundry/trueforge-core/agent-session";
12427
12593
 
12428
12594
  // src/controller/scheduleDispatch.ts
@@ -12636,15 +12802,6 @@ init_scheduleStore();
12636
12802
  init_common();
12637
12803
  import { createRoute as createRoute10, z as z25 } from "@hono/zod-openapi";
12638
12804
  init_schedule();
12639
-
12640
- // src/routes/fernExtensions.ts
12641
- var TOKEN_PAGINATION = {
12642
- cursor: "$request.page_token",
12643
- next_cursor: "$response.pagination.next_page_token",
12644
- results: "$response.data"
12645
- };
12646
-
12647
- // src/routes/scheduleRoutes.ts
12648
12805
  var ScheduleIdParamsSchema = z25.object({
12649
12806
  schedule_id: z25.string().min(1).max(64).describe("Immutable schedule identifier.")
12650
12807
  });
@@ -12954,7 +13111,7 @@ import { z as z26 } from "@hono/zod-openapi";
12954
13111
  import {
12955
13112
  EventType,
12956
13113
  SessionEventItemSchema,
12957
- TokenPaginationSchema as TokenPaginationSchema2,
13114
+ TokenPaginationSchema as TokenPaginationSchema3,
12958
13115
  TurnCreatedEventSchema,
12959
13116
  TurnDoneEventSchema
12960
13117
  } from "@truefoundry/trueforge-core/agent-session";
@@ -12995,13 +13152,13 @@ var ListSessionEventsRequestQuerySchema = z26.object({
12995
13152
  }).openapi("ListSessionEventsRequestQuery");
12996
13153
  var ListSessionEventsResponseSchema = z26.object({
12997
13154
  data: z26.array(SessionEventItemSchema),
12998
- pagination: TokenPaginationSchema2
13155
+ pagination: TokenPaginationSchema3
12999
13156
  }).openapi("ListSessionEventsResponse");
13000
13157
 
13001
13158
  // src/schemas/turn.ts
13002
13159
  init_common();
13003
13160
  import { z as z27 } from "@hono/zod-openapi";
13004
- import { SessionEventSchema, TokenPaginationSchema as TokenPaginationSchema3, TurnSchema } from "@truefoundry/trueforge-core/agent-session";
13161
+ import { SessionEventSchema, TokenPaginationSchema as TokenPaginationSchema4, TurnSchema } from "@truefoundry/trueforge-core/agent-session";
13005
13162
  import { CreateTurnRequestSchema, TurnSchema as TurnSchema2 } from "@truefoundry/trueforge-core/agent-session";
13006
13163
  var SubscribeTurnQuerySchema = z27.object({
13007
13164
  // Query strings need coerce; map null/'' to undefined first so Number(null)→0
@@ -13024,7 +13181,7 @@ var GetTurnResponseSchema = z27.object({
13024
13181
  }).openapi("GetTurnResponse");
13025
13182
  var ListTurnsResponseSchema = z27.object({
13026
13183
  data: z27.array(TurnSchema),
13027
- pagination: TokenPaginationSchema3
13184
+ pagination: TokenPaginationSchema4
13028
13185
  }).openapi("ListTurnsResponse");
13029
13186
  var ListTurnEventsRequestQuerySchema = z27.object({
13030
13187
  limit: z27.coerce.number().int().min(1).max(EVENTS_PAGE_LIMIT).optional().default(EVENTS_PAGE_LIMIT).describe(`Page size. Defaults to ${String(EVENTS_PAGE_LIMIT)}, max ${String(EVENTS_PAGE_LIMIT)}.`),
@@ -13033,7 +13190,7 @@ var ListTurnEventsRequestQuerySchema = z27.object({
13033
13190
  }).openapi("ListTurnEventsRequestQuery");
13034
13191
  var ListTurnEventsResponseSchema = z27.object({
13035
13192
  data: z27.array(SessionEventSchema),
13036
- pagination: TokenPaginationSchema3
13193
+ pagination: TokenPaginationSchema4
13037
13194
  }).openapi("ListTurnEventsResponse");
13038
13195
  var DownloadSandboxFileRequestQuerySchema = z27.object({
13039
13196
  path: z27.string().min(1).describe(
@@ -13053,7 +13210,7 @@ import {
13053
13210
  SessionSchema,
13054
13211
  SessionSourceScheduleSchema,
13055
13212
  SessionSourceTypeSchema,
13056
- TokenPaginationSchema as TokenPaginationSchema4
13213
+ TokenPaginationSchema as TokenPaginationSchema5
13057
13214
  } from "@truefoundry/trueforge-core/agent-session";
13058
13215
 
13059
13216
  // src/schemas/deepObjectQuery.ts
@@ -13196,7 +13353,7 @@ var GetSessionResponseSchema = z29.object({
13196
13353
  }).openapi("GetSessionResponse");
13197
13354
  var ListSessionsResponseSchema = z29.object({
13198
13355
  data: z29.array(SessionSchema),
13199
- pagination: TokenPaginationSchema4
13356
+ pagination: TokenPaginationSchema5
13200
13357
  }).openapi("ListSessionsResponse");
13201
13358
 
13202
13359
  // src/routes/sessionRoutes.ts
@@ -14018,10 +14175,13 @@ function createTurnResolver(deps) {
14018
14175
  modelProviderStore,
14019
14176
  logger,
14020
14177
  signal,
14021
- tenant_id,
14022
14178
  userRef,
14023
- sessionId
14179
+ session,
14180
+ turnId
14024
14181
  } = deps;
14182
+ const tenant_id = session.tenant_id;
14183
+ const sessionId = session.session_id;
14184
+ const metadataHeaders = isTrueFoundryModeEnabled() ? gatewayMetadataHeaders(buildGatewayMetadata({ session, turnId })) : {};
14025
14185
  return new TurnResourceResolver({
14026
14186
  llm: async (name) => {
14027
14187
  const resolved = await getModelDetails({
@@ -14031,7 +14191,10 @@ function createTurnResolver(deps) {
14031
14191
  });
14032
14192
  return {
14033
14193
  modelClient: new VercelAILLM({
14034
- providerConfig: resolved.providerConfig,
14194
+ providerConfig: {
14195
+ ...resolved.providerConfig,
14196
+ headers: { ...resolved.providerConfig.headers, ...metadataHeaders }
14197
+ },
14035
14198
  logger,
14036
14199
  signal
14037
14200
  }),
@@ -14051,7 +14214,13 @@ function createTurnResolver(deps) {
14051
14214
  message: `Unknown MCP server "${name}" \u2014 not configured`
14052
14215
  });
14053
14216
  }
14054
- return connection;
14217
+ return {
14218
+ url: connection.url,
14219
+ headers: withGatewayMetadataHeaders({
14220
+ headers: connection.headers,
14221
+ metadataHeaders
14222
+ })
14223
+ };
14055
14224
  },
14056
14225
  mcpRequestTimeoutMs: config_default.MCP_REQUEST_TIMEOUT_MS,
14057
14226
  mcpConnectTimeoutMs: config_default.MCP_CONNECT_TIMEOUT_MS,
@@ -14164,6 +14333,7 @@ async function drainTurnEvents(input) {
14164
14333
  async function beginTurnExecution(params) {
14165
14334
  const { session, input, previous_turn_id: previousTurnId, userRef, deps } = params;
14166
14335
  const sessionId = session.session_id;
14336
+ const turnId = mintPeeredTurnId(config_default.EXECUTOR_ID);
14167
14337
  const abortController = new AbortController();
14168
14338
  const tenant_id = session.tenant_id;
14169
14339
  const resolver = createTurnResolver({
@@ -14174,13 +14344,13 @@ async function beginTurnExecution(params) {
14174
14344
  modelProviderStore: deps.modelProviderStore,
14175
14345
  logger: deps.logger,
14176
14346
  signal: abortController.signal,
14177
- tenant_id,
14178
14347
  userRef,
14179
- sessionId
14348
+ session,
14349
+ turnId
14180
14350
  });
14181
14351
  const title = session.record.last_turn_id ? void 0 : deriveSessionTitle(input);
14182
14352
  const turn = await session.createTurn({
14183
- turn_id: mintPeeredTurnId(config_default.EXECUTOR_ID),
14353
+ turn_id: turnId,
14184
14354
  input,
14185
14355
  previous_turn_id: previousTurnId,
14186
14356
  signal: abortController.signal,
@@ -14721,7 +14891,7 @@ function createSchedulesRouter(deps) {
14721
14891
  });
14722
14892
  return c.json({ data: data.map(toWireSchedule), pagination }, 200);
14723
14893
  } catch (error) {
14724
- if (error instanceof InvalidPageTokenError) {
14894
+ if (error instanceof InvalidPageTokenError2) {
14725
14895
  return c.json({ error: { message: error.message } }, 400);
14726
14896
  }
14727
14897
  throw error;
@@ -14756,7 +14926,7 @@ function createSchedulesRouter(deps) {
14756
14926
  });
14757
14927
  return c.json({ data: data.map(toWireScheduleRun), pagination }, 200);
14758
14928
  } catch (error) {
14759
- if (error instanceof InvalidPageTokenError) {
14929
+ if (error instanceof InvalidPageTokenError2) {
14760
14930
  return c.json({ error: { message: error.message } }, 400);
14761
14931
  }
14762
14932
  throw error;
@@ -17594,13 +17764,16 @@ function asError(value) {
17594
17764
  }
17595
17765
  function toPutRemoteAgentPayload({
17596
17766
  name,
17597
- manifest
17767
+ description,
17768
+ manifest,
17769
+ collaborators
17598
17770
  }) {
17599
17771
  return {
17600
17772
  name,
17601
- description: name,
17773
+ description: (description || name).slice(0, AGENT_DESCRIPTION_MAX_LENGTH),
17602
17774
  model: manifest.model.name,
17603
- mcp_servers: (manifest.mcp_servers ?? []).map((server) => server.name)
17775
+ mcp_servers: (manifest.mcp_servers ?? []).map((server) => server.name),
17776
+ ...collaborators ? { collaborators } : {}
17604
17777
  };
17605
17778
  }
17606
17779
  var TrueFoundryAgentStore = class {
@@ -17642,9 +17815,15 @@ var TrueFoundryAgentStore = class {
17642
17815
  const created = await this.#inner.createAgent({ ...input, external_id: null }, transaction);
17643
17816
  let externalId;
17644
17817
  try {
17818
+ const collaborators = input.custom?.["collaborators"];
17645
17819
  ({ externalId } = await this.#client.putRemoteAgent({
17646
17820
  accessToken: await this.#resolveAccessToken(),
17647
- ...toPutRemoteAgentPayload({ name: input.name, manifest: input.manifest })
17821
+ ...toPutRemoteAgentPayload({
17822
+ name: input.name,
17823
+ description: input.description,
17824
+ manifest: input.manifest,
17825
+ ...collaborators ? { collaborators } : {}
17826
+ })
17648
17827
  }));
17649
17828
  const updated = await this.#inner.updateAgent(
17650
17829
  { tenant_id: input.tenant_id, id: created.id, external_id: externalId },
@@ -17678,8 +17857,7 @@ var TrueFoundryAgentStore = class {
17678
17857
  }
17679
17858
  }
17680
17859
  async updateAgent(input, transaction) {
17681
- const nextManifest = input.manifest;
17682
- if (nextManifest === void 0) {
17860
+ if (input.manifest === void 0 && input.description === void 0) {
17683
17861
  return this.#inner.updateAgent(input, transaction);
17684
17862
  }
17685
17863
  return this.#withUpdateLock(input, transaction, async (txn) => {
@@ -17687,16 +17865,23 @@ var TrueFoundryAgentStore = class {
17687
17865
  if (previous === void 0) {
17688
17866
  return void 0;
17689
17867
  }
17868
+ const nextManifest = input.manifest ?? previous.manifest;
17869
+ const nextDescription = input.description ?? previous.description;
17690
17870
  const { externalId } = await this.#client.putRemoteAgent({
17691
17871
  accessToken: await this.#resolveAccessToken(),
17692
- ...toPutRemoteAgentPayload({ name: previous.name, manifest: nextManifest })
17872
+ ...toPutRemoteAgentPayload({
17873
+ name: previous.name,
17874
+ description: nextDescription,
17875
+ manifest: nextManifest
17876
+ })
17693
17877
  });
17694
17878
  try {
17695
17879
  return await this.#inner.updateAgent(
17696
17880
  {
17697
17881
  tenant_id: input.tenant_id,
17698
17882
  id: input.id,
17699
- manifest: nextManifest,
17883
+ ...input.manifest === void 0 ? {} : { manifest: nextManifest },
17884
+ ...input.description === void 0 ? {} : { description: nextDescription },
17700
17885
  ...externalId === previous.external_id ? {} : { external_id: externalId }
17701
17886
  },
17702
17887
  txn
@@ -17707,6 +17892,7 @@ var TrueFoundryAgentStore = class {
17707
17892
  accessToken: await this.#resolveAccessToken(),
17708
17893
  ...toPutRemoteAgentPayload({
17709
17894
  name: previous.name,
17895
+ description: previous.description,
17710
17896
  manifest: previous.manifest
17711
17897
  })
17712
17898
  });
@@ -17936,18 +18122,21 @@ function resolveAuthorizeRedirectURL(input) {
17936
18122
  }
17937
18123
  var TrueFoundryMcpServerStore = class {
17938
18124
  #client;
17939
- #resolveAccessToken;
18125
+ #asAgent;
18126
+ #asUser;
17940
18127
  #subject;
17941
18128
  #perServerHeaders;
17942
18129
  #gatewayUrl;
17943
18130
  constructor(input) {
17944
18131
  this.#client = input.client;
17945
- this.#resolveAccessToken = accessTokenForRequest({
18132
+ const tokens = accessTokenForRequest({
17946
18133
  client: input.client,
17947
18134
  requestContext: asTrueFoundryRequestContext(input.requestContext),
17948
18135
  agent: input.agent,
17949
18136
  logger: input.logger
17950
18137
  });
18138
+ this.#asAgent = tokens.asAgent;
18139
+ this.#asUser = tokens.asUser;
17951
18140
  this.#subject = input.requestContext.subject;
17952
18141
  this.#perServerHeaders = input.perServerHeaders ?? {};
17953
18142
  }
@@ -17956,7 +18145,7 @@ var TrueFoundryMcpServerStore = class {
17956
18145
  const { record, userRef } = input;
17957
18146
  const headers = async () => ({
17958
18147
  ...withoutAuthorization(this.#perServerHeaders[record.name]),
17959
- Authorization: `Bearer ${await this.#resolveAccessToken()}`
18148
+ Authorization: `Bearer ${await this.#asUser()}`
17960
18149
  });
17961
18150
  return async () => {
17962
18151
  const status = await this.authorize({
@@ -17985,7 +18174,7 @@ var TrueFoundryMcpServerStore = class {
17985
18174
  if (input.names?.length === 0) {
17986
18175
  return [];
17987
18176
  }
17988
- const accessToken = await this.#resolveAccessToken();
18177
+ const accessToken = await this.#asAgent();
17989
18178
  const [rows, gatewayUrl] = await Promise.all([
17990
18179
  this.#client.listMcpServers({
17991
18180
  accessToken,
@@ -17997,7 +18186,7 @@ var TrueFoundryMcpServerStore = class {
17997
18186
  }
17998
18187
  async getServer(input, transaction) {
17999
18188
  void transaction;
18000
- const accessToken = await this.#resolveAccessToken();
18189
+ const accessToken = await this.#asAgent();
18001
18190
  const [row, gatewayUrl] = await Promise.all([
18002
18191
  this.#client.getMcpServerByName({ accessToken, name: input.name }),
18003
18192
  this.#resolveGatewayUrl()
@@ -18051,7 +18240,7 @@ var TrueFoundryMcpServerStore = class {
18051
18240
  out.set(
18052
18241
  record.name,
18053
18242
  await this.#client.getMcpAuthStatus({
18054
- accessToken: await this.#resolveAccessToken(),
18243
+ accessToken: await this.#asUser(),
18055
18244
  mcpServerId: record.id,
18056
18245
  subjectId: this.#subject.id,
18057
18246
  subjectType: this.#subject.type
@@ -18066,7 +18255,7 @@ var TrueFoundryMcpServerStore = class {
18066
18255
  throw new McpServerNotFoundError(input.name);
18067
18256
  }
18068
18257
  return this.#client.getMcpAuthorize({
18069
- accessToken: await this.#resolveAccessToken(),
18258
+ accessToken: await this.#asUser(),
18070
18259
  mcpServerId: record.id,
18071
18260
  redirectURL: resolveAuthorizeRedirectURL({
18072
18261
  ...input.returnTo !== void 0 ? { returnTo: input.returnTo } : {}
@@ -18080,7 +18269,7 @@ var TrueFoundryMcpServerStore = class {
18080
18269
  throw new McpServerNotFoundError(input.name);
18081
18270
  }
18082
18271
  await this.#client.deleteMcpAuth({
18083
- accessToken: await this.#resolveAccessToken(),
18272
+ accessToken: await this.#asUser(),
18084
18273
  mcpServerId: record.id,
18085
18274
  subjectId: this.#subject.id,
18086
18275
  subjectType: this.#subject.type,
@@ -18089,7 +18278,7 @@ var TrueFoundryMcpServerStore = class {
18089
18278
  }
18090
18279
  async #resolveGatewayUrl() {
18091
18280
  if (this.#gatewayUrl === void 0) {
18092
- const installations = await this.#client.listGatewayInstallations(await this.#resolveAccessToken());
18281
+ const installations = await this.#client.listGatewayInstallations(await this.#asAgent());
18093
18282
  this.#gatewayUrl = resolveDefaultGatewayUrl(installations);
18094
18283
  }
18095
18284
  return this.#gatewayUrl;
@@ -18110,15 +18299,18 @@ function toRecord2(input) {
18110
18299
  init_modelProviderStore();
18111
18300
  var TrueFoundryModelProviderStore = class {
18112
18301
  #client;
18113
- #resolveAccessToken;
18302
+ #asAgent;
18303
+ #asUser;
18114
18304
  constructor(input) {
18115
18305
  this.#client = input.client;
18116
- this.#resolveAccessToken = accessTokenForRequest({
18306
+ const tokens = accessTokenForRequest({
18117
18307
  client: input.client,
18118
18308
  requestContext: asTrueFoundryRequestContext(input.requestContext),
18119
18309
  agent: input.agent,
18120
18310
  logger: input.logger
18121
18311
  });
18312
+ this.#asAgent = tokens.asAgent;
18313
+ this.#asUser = tokens.asUser;
18122
18314
  }
18123
18315
  async listProviders(input, transaction) {
18124
18316
  void transaction;
@@ -18151,19 +18343,19 @@ var TrueFoundryModelProviderStore = class {
18151
18343
  return flattenProviderModels(await this.listProviders(input, transaction));
18152
18344
  }
18153
18345
  async #records(input) {
18154
- const accessToken = await this.#resolveAccessToken();
18346
+ const [agentToken, userToken] = await Promise.all([this.#asAgent(), this.#asUser()]);
18155
18347
  const [integrations, installations] = await Promise.all([
18156
18348
  this.#client.listProviderIntegrations({
18157
- accessToken,
18349
+ accessToken: agentToken,
18158
18350
  ...input.filter !== void 0 ? { filter: input.filter } : {}
18159
18351
  }),
18160
- this.#client.listGatewayInstallations(accessToken)
18352
+ this.#client.listGatewayInstallations(agentToken)
18161
18353
  ]);
18162
18354
  const gatewayUrl = resolveDefaultGatewayUrl(installations);
18163
18355
  return toRecords({
18164
18356
  tenant_id: input.tenant_id,
18165
18357
  gatewayUrl,
18166
- accessToken,
18358
+ accessToken: userToken,
18167
18359
  models: mapEnabledModels({ integrations })
18168
18360
  });
18169
18361
  }