@truefoundry/trueforge 0.2.0-rc.4 → 0.2.0-rc.6

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 (218) hide show
  1. package/dist/_frontend/assets/{AgentCodeSnippets-U6KQWVBJ-mo8URLKV.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-CDXRRUZQ-CnbfBoc3.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-S2WX6ZEA-BjzWPaWE.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-UI3L7XY2-CG8nWJdo.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-OIGAC2HU-xm76mpmk.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-J5BRKMJZ-xjQQzILb.js → DockLayout-JZ4DKDOR-jsSVZPx1.js} +1 -1
  23. package/dist/_frontend/assets/{DrawerLayout-65YHGHIF-CehQ0ZjJ.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-VP6WCMGT-DuhYOy95.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-A4BPYIFZ-B4p1JpXq.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-SSLGM35F-Cqt-1Q8u.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-MFDOGAVJ-pSgzH70r.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-WQPUQ5TE-x17-_tYg.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-HE7E4UL5-D_jC6D5-.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-2BDTG544-FxcOqFr-.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-6aeTVQm8.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-VXKNS7FH-Dm2ZAGlE.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-BSK94pjD.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-hYZ9lU-u.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-CJdvCy_0.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-BHnJtaJv.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-BTNbHYXw.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-BBGLYdJn.css → index-B01pXqvC.css} +1 -1
  79. package/dist/_frontend/assets/index-B01pXqvC.css.br +0 -0
  80. package/dist/_frontend/assets/{index-BBGLYdJn.css.gz → index-B01pXqvC.css.gz} +0 -0
  81. package/dist/_frontend/assets/index-BIRSKAK8.js +933 -0
  82. package/dist/_frontend/assets/index-BIRSKAK8.js.br +0 -0
  83. package/dist/_frontend/assets/index-BIRSKAK8.js.gz +0 -0
  84. package/dist/_frontend/assets/{index-B1sBHguz.js → index-BxyaDaQf.js} +1 -1
  85. package/dist/_frontend/assets/index-BxyaDaQf.js.br +0 -0
  86. package/dist/_frontend/assets/index-BxyaDaQf.js.gz +0 -0
  87. package/dist/_frontend/assets/{index-BU6gYO7K.js → index-OPxVm2Vd.js} +3 -3
  88. package/dist/_frontend/assets/index-OPxVm2Vd.js.br +0 -0
  89. package/dist/_frontend/assets/index-OPxVm2Vd.js.gz +0 -0
  90. package/dist/_frontend/assets/{javascript-BKY4Sujy.js → javascript-BooEWA5C.js} +1 -1
  91. package/dist/_frontend/assets/{jsonMode-B_jTSLwe.js → jsonMode-Bc4b557E.js} +1 -1
  92. package/dist/_frontend/assets/jsonMode-Bc4b557E.js.br +0 -0
  93. package/dist/_frontend/assets/jsonMode-Bc4b557E.js.gz +0 -0
  94. package/dist/_frontend/assets/{liquid-OVC8bSZr.js → liquid-Dpr5_yD4.js} +1 -1
  95. package/dist/_frontend/assets/liquid-Dpr5_yD4.js.br +0 -0
  96. package/dist/_frontend/assets/liquid-Dpr5_yD4.js.gz +0 -0
  97. package/dist/_frontend/assets/{lspLanguageFeatures-BpQc31SX.js → lspLanguageFeatures-BR2DRsTt.js} +1 -1
  98. package/dist/_frontend/assets/lspLanguageFeatures-BR2DRsTt.js.br +0 -0
  99. package/dist/_frontend/assets/lspLanguageFeatures-BR2DRsTt.js.gz +0 -0
  100. package/dist/_frontend/assets/{mdx-Rt-sDg8a.js → mdx-HA7ugVt3.js} +1 -1
  101. package/dist/_frontend/assets/mdx-HA7ugVt3.js.br +0 -0
  102. package/dist/_frontend/assets/mdx-HA7ugVt3.js.gz +0 -0
  103. package/dist/_frontend/assets/{python-CLLuhWlP.js → python-C2JnSJsq.js} +1 -1
  104. package/dist/_frontend/assets/python-C2JnSJsq.js.br +0 -0
  105. package/dist/_frontend/assets/python-C2JnSJsq.js.gz +0 -0
  106. package/dist/_frontend/assets/{razor-CTEZKBpz.js → razor-DxJxbSt9.js} +1 -1
  107. package/dist/_frontend/assets/razor-DxJxbSt9.js.br +0 -0
  108. package/dist/_frontend/assets/razor-DxJxbSt9.js.gz +0 -0
  109. package/dist/_frontend/assets/{tsMode-BsjOp9ss.js → tsMode-DSQIB4wq.js} +1 -1
  110. package/dist/_frontend/assets/tsMode-DSQIB4wq.js.br +0 -0
  111. package/dist/_frontend/assets/tsMode-DSQIB4wq.js.gz +0 -0
  112. package/dist/_frontend/assets/{typescript-CpIJvyBH.js → typescript-CYdXdQVS.js} +1 -1
  113. package/dist/_frontend/assets/typescript-CYdXdQVS.js.br +0 -0
  114. package/dist/_frontend/assets/typescript-CYdXdQVS.js.gz +0 -0
  115. package/dist/_frontend/assets/{workers-C_uhAUan.js → workers-C1M-tlfr.js} +1 -1
  116. package/dist/_frontend/assets/workers-C1M-tlfr.js.br +0 -0
  117. package/dist/_frontend/assets/workers-C1M-tlfr.js.gz +0 -0
  118. package/dist/_frontend/assets/{xml-BxHi2HCJ.js → xml-uosDAHfe.js} +1 -1
  119. package/dist/_frontend/assets/xml-uosDAHfe.js.br +0 -0
  120. package/dist/_frontend/assets/xml-uosDAHfe.js.gz +0 -0
  121. package/dist/_frontend/assets/{yaml-DyyH_CDu.js → yaml-CFmHi-W6.js} +1 -1
  122. package/dist/_frontend/assets/yaml-CFmHi-W6.js.br +0 -0
  123. package/dist/_frontend/assets/yaml-CFmHi-W6.js.gz +0 -0
  124. package/dist/_frontend/index.html +2 -2
  125. package/dist/controller-main.js.map +1 -1
  126. package/dist/main.js +478 -290
  127. package/dist/main.js.map +1 -1
  128. package/dist/postgres/migrations/20260909_000001_agent_description.js +16 -0
  129. package/dist/postgres/migrations/20260909_000001_agent_description.js.map +1 -0
  130. package/dist/sqlite/migrations/20260911_000001_agent_description.js +18 -0
  131. package/dist/sqlite/migrations/20260911_000001_agent_description.js.map +1 -0
  132. package/package.json +3 -3
  133. package/dist/_frontend/assets/AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js.br +0 -0
  134. package/dist/_frontend/assets/AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js.gz +0 -0
  135. package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js +0 -1
  136. package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js.br +0 -0
  137. package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js.gz +0 -0
  138. package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js +0 -1
  139. package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js.br +0 -0
  140. package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js.gz +0 -0
  141. package/dist/_frontend/assets/AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js.br +0 -0
  142. package/dist/_frontend/assets/AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js.gz +0 -0
  143. package/dist/_frontend/assets/AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js.br +0 -0
  144. package/dist/_frontend/assets/AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js.gz +0 -0
  145. package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js.br +0 -0
  146. package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js.gz +0 -0
  147. package/dist/_frontend/assets/ConnectorSettings-OIGAC2HU-xm76mpmk.js.br +0 -0
  148. package/dist/_frontend/assets/ConnectorSettings-OIGAC2HU-xm76mpmk.js.gz +0 -0
  149. package/dist/_frontend/assets/DrawerLayout-65YHGHIF-CehQ0ZjJ.js.br +0 -0
  150. package/dist/_frontend/assets/DrawerLayout-65YHGHIF-CehQ0ZjJ.js.gz +0 -0
  151. package/dist/_frontend/assets/ModelSettings-VP6WCMGT-DuhYOy95.js.br +0 -0
  152. package/dist/_frontend/assets/ModelSettings-VP6WCMGT-DuhYOy95.js.gz +0 -0
  153. package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js +0 -1
  154. package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js.br +0 -0
  155. package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js.gz +0 -0
  156. package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js +0 -1
  157. package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js.br +0 -0
  158. package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js.gz +0 -0
  159. package/dist/_frontend/assets/SettingsBuilder-A4BPYIFZ-B4p1JpXq.js.br +0 -0
  160. package/dist/_frontend/assets/SettingsBuilder-A4BPYIFZ-B4p1JpXq.js.gz +0 -0
  161. package/dist/_frontend/assets/ShellRouteSync-SSLGM35F-Cqt-1Q8u.js.br +0 -0
  162. package/dist/_frontend/assets/ShellRouteSync-SSLGM35F-Cqt-1Q8u.js.gz +0 -0
  163. package/dist/_frontend/assets/SidebarLayout-MFDOGAVJ-pSgzH70r.js.br +0 -0
  164. package/dist/_frontend/assets/SidebarLayout-MFDOGAVJ-pSgzH70r.js.gz +0 -0
  165. package/dist/_frontend/assets/SkillSettings-WQPUQ5TE-x17-_tYg.js.br +0 -0
  166. package/dist/_frontend/assets/SkillSettings-WQPUQ5TE-x17-_tYg.js.gz +0 -0
  167. package/dist/_frontend/assets/TrueForgeUIWithRouter-5CDICMCE-DcMl1KUh.js +0 -1
  168. package/dist/_frontend/assets/WidgetLayout-HE7E4UL5-D_jC6D5-.js.br +0 -0
  169. package/dist/_frontend/assets/WidgetLayout-HE7E4UL5-D_jC6D5-.js.gz +0 -0
  170. package/dist/_frontend/assets/chunk-2BDTG544-FxcOqFr-.js.br +0 -0
  171. package/dist/_frontend/assets/chunk-2BDTG544-FxcOqFr-.js.gz +0 -0
  172. package/dist/_frontend/assets/chunk-62JRHF6Z-6aeTVQm8.js.br +0 -0
  173. package/dist/_frontend/assets/chunk-62JRHF6Z-6aeTVQm8.js.gz +0 -0
  174. package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js +0 -1
  175. package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js.br +0 -0
  176. package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js.gz +0 -0
  177. package/dist/_frontend/assets/chunk-VXKNS7FH-Dm2ZAGlE.js.br +0 -0
  178. package/dist/_frontend/assets/chunk-VXKNS7FH-Dm2ZAGlE.js.gz +0 -0
  179. package/dist/_frontend/assets/cssMode-BSK94pjD.js.br +0 -0
  180. package/dist/_frontend/assets/cssMode-BSK94pjD.js.gz +0 -0
  181. package/dist/_frontend/assets/freemarker2-hYZ9lU-u.js.br +0 -0
  182. package/dist/_frontend/assets/freemarker2-hYZ9lU-u.js.gz +0 -0
  183. package/dist/_frontend/assets/handlebars-CJdvCy_0.js.br +0 -0
  184. package/dist/_frontend/assets/handlebars-CJdvCy_0.js.gz +0 -0
  185. package/dist/_frontend/assets/html-BHnJtaJv.js.br +0 -0
  186. package/dist/_frontend/assets/html-BHnJtaJv.js.gz +0 -0
  187. package/dist/_frontend/assets/htmlMode-BTNbHYXw.js.br +0 -0
  188. package/dist/_frontend/assets/htmlMode-BTNbHYXw.js.gz +0 -0
  189. package/dist/_frontend/assets/index-B1sBHguz.js.br +0 -0
  190. package/dist/_frontend/assets/index-B1sBHguz.js.gz +0 -0
  191. package/dist/_frontend/assets/index-BBGLYdJn.css.br +0 -0
  192. package/dist/_frontend/assets/index-BU6gYO7K.js.br +0 -0
  193. package/dist/_frontend/assets/index-BU6gYO7K.js.gz +0 -0
  194. package/dist/_frontend/assets/index-DZOZ1xN3.js +0 -933
  195. package/dist/_frontend/assets/index-DZOZ1xN3.js.br +0 -0
  196. package/dist/_frontend/assets/index-DZOZ1xN3.js.gz +0 -0
  197. package/dist/_frontend/assets/jsonMode-B_jTSLwe.js.br +0 -0
  198. package/dist/_frontend/assets/jsonMode-B_jTSLwe.js.gz +0 -0
  199. package/dist/_frontend/assets/liquid-OVC8bSZr.js.br +0 -0
  200. package/dist/_frontend/assets/liquid-OVC8bSZr.js.gz +0 -0
  201. package/dist/_frontend/assets/lspLanguageFeatures-BpQc31SX.js.br +0 -0
  202. package/dist/_frontend/assets/lspLanguageFeatures-BpQc31SX.js.gz +0 -0
  203. package/dist/_frontend/assets/mdx-Rt-sDg8a.js.br +0 -0
  204. package/dist/_frontend/assets/mdx-Rt-sDg8a.js.gz +0 -0
  205. package/dist/_frontend/assets/python-CLLuhWlP.js.br +0 -0
  206. package/dist/_frontend/assets/python-CLLuhWlP.js.gz +0 -0
  207. package/dist/_frontend/assets/razor-CTEZKBpz.js.br +0 -0
  208. package/dist/_frontend/assets/razor-CTEZKBpz.js.gz +0 -0
  209. package/dist/_frontend/assets/tsMode-BsjOp9ss.js.br +0 -0
  210. package/dist/_frontend/assets/tsMode-BsjOp9ss.js.gz +0 -0
  211. package/dist/_frontend/assets/typescript-CpIJvyBH.js.br +0 -0
  212. package/dist/_frontend/assets/typescript-CpIJvyBH.js.gz +0 -0
  213. package/dist/_frontend/assets/workers-C_uhAUan.js.br +0 -0
  214. package/dist/_frontend/assets/workers-C_uhAUan.js.gz +0 -0
  215. package/dist/_frontend/assets/xml-BxHi2HCJ.js.br +0 -0
  216. package/dist/_frontend/assets/xml-BxHi2HCJ.js.gz +0 -0
  217. package/dist/_frontend/assets/yaml-DyyH_CDu.js.br +0 -0
  218. package/dist/_frontend/assets/yaml-DyyH_CDu.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,160 @@ 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 ImportAgentItemSchema = z3.object({
8104
+ name: NameSchema.refine((name) => !RESERVED_AGENT_NAMES2.has(name), {
8105
+ message: "Agent name is reserved, cannot be used"
8106
+ }),
8107
+ description: AgentDescriptionSchema.optional(),
8108
+ manifest: AgentSpecSchema5,
8109
+ tenant_id: z3.string().min(1).describe("Tenant to create the agent under."),
8110
+ created_by_subject: CreatedBySubjectSchema3.describe("Original creator to persist on the agent.")
8012
8111
  }).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.")
8112
+ var ImportAgentsRequestSchema = z3.object({
8113
+ agents: z3.array(ImportAgentItemSchema).describe("Agents to create; each carries tenant_id and created_by_subject.")
8015
8114
  }).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()
8115
+ var ImportAgentItemResultSchema = z3.object({
8116
+ name: z3.string().min(1),
8117
+ tenant_id: z3.string().min(1),
8118
+ status: z3.enum(["created", "exists", "failed"]),
8119
+ agent_id: z3.string().min(1).optional(),
8120
+ error: z3.string().optional()
8022
8121
  }).strict().openapi("ImportAgentItemResult");
8023
- var ImportAgentsResultSchema = z2.object({
8024
- results: z2.array(ImportAgentItemResultSchema)
8122
+ var ImportAgentsResultSchema = z3.object({
8123
+ results: z3.array(ImportAgentItemResultSchema)
8025
8124
  }).strict().openapi("ImportAgentsResult");
8026
- var ImportAgentsResponseSchema = z2.object({
8125
+ var ImportAgentsResponseSchema = z3.object({
8027
8126
  data: ImportAgentsResultSchema
8028
8127
  }).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)
8128
+ var ImportSessionSnapshotSchema = z3.object({
8129
+ session_id: z3.string().min(1),
8130
+ tenant_id: z3.string().min(1),
8131
+ created_by_subject: CreatedBySubjectSchema3,
8132
+ agent_name: z3.string().min(1).nullable().optional(),
8133
+ agent_id: z3.string().min(1).nullable().optional(),
8134
+ agent_spec: z3.record(z3.string(), z3.unknown()).nullable().optional(),
8135
+ title: z3.string().nullable(),
8136
+ last_turn_id: z3.string().nullable(),
8137
+ custom: z3.record(z3.string(), z3.unknown()).nullable(),
8138
+ last_activity_timestamp_ms: z3.number(),
8139
+ created_at: z3.string().min(1),
8140
+ updated_at: z3.string().min(1)
8042
8141
  }).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()
8142
+ var ImportSessionThreadSchema = z3.object({
8143
+ thread_id: z3.string().min(1),
8144
+ context: z3.array(z3.unknown()),
8145
+ current_context_usage: z3.unknown(),
8146
+ parent: z3.unknown().nullable(),
8147
+ completion: z3.unknown().nullable(),
8148
+ agent_info: z3.unknown().nullable(),
8149
+ capability_state: z3.record(z3.string(), z3.unknown()).nullable()
8051
8150
  }).loose().openapi("ImportSessionThread");
8052
- var ImportSessionEventSchema = z2.object({
8053
- id: z2.string().min(1),
8054
- created_at: z2.string().min(1)
8151
+ var ImportSessionEventSchema = z3.object({
8152
+ id: z3.string().min(1),
8153
+ created_at: z3.string().min(1)
8055
8154
  }).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)
8155
+ var ImportSessionTurnSchema = z3.object({
8156
+ turn_id: z3.string().min(1),
8157
+ first_turn_id: z3.string().min(1),
8158
+ previous_turn_id: z3.string().nullable(),
8159
+ ancestor_ids: z3.array(z3.string()),
8160
+ input: z3.array(z3.unknown()),
8161
+ state: z3.unknown(),
8162
+ checkpoint: z3.unknown(),
8163
+ custom: z3.record(z3.string(), z3.unknown()).nullable(),
8164
+ created_at: z3.string().min(1),
8165
+ updated_at: z3.string().min(1),
8166
+ threads: z3.array(ImportSessionThreadSchema),
8167
+ events: z3.array(ImportSessionEventSchema)
8069
8168
  }).loose().openapi("ImportSessionTurn");
8070
- var ImportSessionRequestSchema = z2.object({
8169
+ var ImportSessionRequestSchema = z3.object({
8071
8170
  session: ImportSessionSnapshotSchema,
8072
- turns: z2.array(ImportSessionTurnSchema).min(1)
8171
+ turns: z3.array(ImportSessionTurnSchema).min(1)
8073
8172
  }).openapi("ImportSessionRequest");
8074
- var ImportSessionResultSchema = z2.object({
8075
- imported: z2.boolean(),
8076
- session_id: z2.string()
8173
+ var ImportSessionResultSchema = z3.object({
8174
+ imported: z3.boolean(),
8175
+ session_id: z3.string()
8077
8176
  }).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.")
8177
+ var ImportSessionResponseSchema = z3.object({ data: ImportSessionResultSchema }).openapi("ImportSessionResponse");
8178
+ var ImportSessionsCheckpointQuerySchema = z3.object({
8179
+ tenant_id: z3.string().min(1).describe("Tenant whose imported-session watermark to read.")
8081
8180
  }).strict().openapi("ImportSessionsCheckpointQuery");
8082
- var ImportSessionsCheckpointResponseSchema = z2.object({
8083
- data: z2.object({
8084
- created_at: z2.string().nullable()
8181
+ var ImportSessionsCheckpointResponseSchema = z3.object({
8182
+ data: z3.object({
8183
+ created_at: z3.string().nullable()
8085
8184
  })
8086
8185
  }).strict().openapi("ImportSessionsCheckpointResponse");
8087
8186
 
8088
8187
  // 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.")
8188
+ import { z as z4 } from "@hono/zod-openapi";
8189
+ var RequestErrorResponseSchema = z4.object({
8190
+ error: z4.object({
8191
+ message: z4.string().describe("Human-readable explanation of the failure."),
8192
+ type: z4.string().optional().describe("Optional error category (e.g. validation vs conflict)."),
8193
+ code: z4.string().nullable().optional().describe("Optional machine-readable error code; null when not applicable."),
8194
+ param: z4.string().nullable().optional().describe("Optional request field that caused the error; null when not field-specific.")
8096
8195
  })
8097
8196
  }).openapi("RequestErrorResponse");
8098
8197
 
@@ -8197,7 +8296,7 @@ var getImportSessionsCheckpointRoute = createRoute({
8197
8296
  import { extractErrorLogFields } from "@truefoundry/trueforge-core/core";
8198
8297
  import { HTTPException } from "hono/http-exception";
8199
8298
  import { fetch as undiciFetch2 } from "undici";
8200
- import { z as z6 } from "zod";
8299
+ import { z as z7 } from "zod";
8201
8300
 
8202
8301
  // src/http/tls.ts
8203
8302
  import { readFileSync } from "fs";
@@ -8313,20 +8412,20 @@ function createInternalTlsDispatcher(options) {
8313
8412
  }
8314
8413
 
8315
8414
  // src/truefoundry/mapSfyAgentSkills.ts
8316
- import { z as z4 } from "zod";
8317
- var SfyRegistryManifestSchema = z4.object({
8415
+ import { z as z5 } from "zod";
8416
+ var SfyRegistryManifestSchema = z5.object({
8318
8417
  // Display label only — not TF ResourceName / DNS-label rules.
8319
- name: z4.string().min(1),
8320
- version: z4.number().int().positive(),
8418
+ name: z5.string().min(1),
8419
+ version: z5.number().int().positive(),
8321
8420
  // 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()
8421
+ ml_repo: z5.string().min(1),
8422
+ source: z5.object({
8423
+ description: z5.string().min(1).optional()
8325
8424
  }).optional()
8326
8425
  });
8327
- var SfyRegistrySkillSchema = z4.object({
8328
- latest_version: z4.object({
8329
- fqn: z4.string().min(1),
8426
+ var SfyRegistrySkillSchema = z5.object({
8427
+ latest_version: z5.object({
8428
+ fqn: z5.string().min(1),
8330
8429
  manifest: SfyRegistryManifestSchema
8331
8430
  })
8332
8431
  }).transform(({ latest_version }) => ({
@@ -8337,20 +8436,20 @@ var SfyRegistrySkillSchema = z4.object({
8337
8436
  repository_name: latest_version.manifest.ml_repo,
8338
8437
  version: latest_version.manifest.version
8339
8438
  }));
8340
- var SfyRegistrySkillVersionSchema = z4.object({
8341
- agent_skill_id: z4.string().min(1),
8342
- fqn: z4.string().min(1),
8439
+ var SfyRegistrySkillVersionSchema = z5.object({
8440
+ agent_skill_id: z5.string().min(1),
8441
+ fqn: z5.string().min(1),
8343
8442
  manifest: SfyRegistryManifestSchema
8344
8443
  });
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()
8444
+ var ResolvedAgentSkillVersionSchema = z5.object({
8445
+ fqn: z5.string().min(1),
8446
+ name: z5.string().min(1),
8447
+ description: z5.string().min(1),
8448
+ skill_md_content: z5.string().nullable().optional(),
8449
+ presigned_url: z5.string().min(1).optional()
8351
8450
  });
8352
- var ResolveAgentSkillVersionsResponseSchema = z4.object({
8353
- skills: z4.array(ResolvedAgentSkillVersionSchema)
8451
+ var ResolveAgentSkillVersionsResponseSchema = z5.object({
8452
+ skills: z5.array(ResolvedAgentSkillVersionSchema)
8354
8453
  });
8355
8454
  function mapSfyRegistrySkills(rows) {
8356
8455
  return rows.map((row) => SfyRegistrySkillSchema.parse(row));
@@ -8374,48 +8473,48 @@ function mapResolvedAgentSkillVersions(payload) {
8374
8473
  }
8375
8474
 
8376
8475
  // src/truefoundry/mapSfyMcpServers.ts
8377
- import { z as z5 } from "zod";
8476
+ import { z as z6 } from "zod";
8378
8477
  var MCP_PROXY_BASE_URL_TEMPLATE = "{{mcpProxyBaseURL}}";
8379
- var IsoInstantSchema = z5.union([z5.string().min(1), z5.date()]).transform((value, ctx) => {
8478
+ var IsoInstantSchema = z6.union([z6.string().min(1), z6.date()]).transform((value, ctx) => {
8380
8479
  if (value instanceof Date) {
8381
8480
  if (!Number.isFinite(value.getTime())) {
8382
8481
  ctx.addIssue({ code: "custom", message: "Invalid Date" });
8383
- return z5.NEVER;
8482
+ return z6.NEVER;
8384
8483
  }
8385
8484
  return value.toISOString();
8386
8485
  }
8387
8486
  const ms = Date.parse(value);
8388
8487
  if (!Number.isFinite(ms)) {
8389
8488
  ctx.addIssue({ code: "custom", message: "Invalid ISO timestamp" });
8390
- return z5.NEVER;
8489
+ return z6.NEVER;
8391
8490
  }
8392
8491
  return new Date(ms).toISOString();
8393
8492
  });
8394
- var SfyMcpServerRowSchema = z5.object({
8395
- id: z5.string().min(1),
8396
- name: z5.string().min(1),
8397
- proxyUrl: z5.string().min(1),
8493
+ var SfyMcpServerRowSchema = z6.object({
8494
+ id: z6.string().min(1),
8495
+ name: z6.string().min(1),
8496
+ proxyUrl: z6.string().min(1),
8398
8497
  createdAt: IsoInstantSchema,
8399
8498
  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()
8499
+ manifest: z6.object({
8500
+ description: z6.string().min(1).optional(),
8501
+ auth_data: z6.object({
8502
+ type: z6.string().min(1).optional()
8404
8503
  }).optional()
8405
8504
  }).optional()
8406
8505
  });
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") });
8506
+ var SfyMcpAuthStatusAuthenticatedSchema = z6.object({ status: z6.literal("authenticated") });
8507
+ var SfyMcpAuthStatusNotRequiredSchema = z6.object({ status: z6.literal("authentication_not_required") });
8508
+ var SfyMcpAuthStatusRequiredSchema = z6.object({ status: z6.literal("authentication_required") });
8410
8509
  var SfyMcpAuthorizeRequiredSchema = SfyMcpAuthStatusRequiredSchema.extend({
8411
- authorization_endpoint: z5.url()
8510
+ authorization_endpoint: z6.url()
8412
8511
  });
8413
- var SfyMcpAuthStatusSchema = z5.discriminatedUnion("status", [
8512
+ var SfyMcpAuthStatusSchema = z6.discriminatedUnion("status", [
8414
8513
  SfyMcpAuthStatusAuthenticatedSchema,
8415
8514
  SfyMcpAuthStatusRequiredSchema,
8416
8515
  SfyMcpAuthStatusNotRequiredSchema
8417
8516
  ]);
8418
- var SfyMcpAuthorizeResultSchema = z5.discriminatedUnion("status", [
8517
+ var SfyMcpAuthorizeResultSchema = z6.discriminatedUnion("status", [
8419
8518
  SfyMcpAuthStatusAuthenticatedSchema,
8420
8519
  SfyMcpAuthorizeRequiredSchema,
8421
8520
  SfyMcpAuthStatusNotRequiredSchema
@@ -8486,45 +8585,46 @@ var AGENT_PERMISSIONS_PATH = "v1/authorize/permissions";
8486
8585
  var VEND_TOKEN_PATH = "internal/vend-token";
8487
8586
  var AGENT_SKILLS_PAGE_SIZE = 100;
8488
8587
  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()
8588
+ var SessionSubjectSchema = z7.object({
8589
+ subjectId: z7.string().min(1),
8590
+ subjectType: z7.string().min(1),
8591
+ subjectDisplayName: z7.string().nullable().optional(),
8592
+ subjectSlug: z7.string().nullable().optional()
8494
8593
  });
8495
- var GetSessionUserSchema = z6.object({
8496
- tenantName: z6.string().min(1),
8497
- roles: z6.array(z6.string()),
8594
+ var GetSessionUserSchema = z7.object({
8595
+ tenantName: z7.string().min(1),
8596
+ roles: z7.array(z7.string()),
8498
8597
  subject: SessionSubjectSchema
8499
8598
  });
8500
- var GetSessionWireSchema = z6.object({
8599
+ var GetSessionWireSchema = z7.object({
8501
8600
  user: GetSessionUserSchema.nullable()
8502
8601
  });
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()
8602
+ var ListResponseSchema = z7.union([
8603
+ z7.array(z7.unknown()),
8604
+ z7.object({
8605
+ data: z7.array(z7.unknown()).catch([]),
8606
+ pagination: z7.object({ total: z7.number().optional() }).optional()
8508
8607
  })
8509
8608
  ]);
8510
- var ServiceFoundryErrorSchema = z6.object({
8511
- message: z6.union([z6.string(), z6.array(z6.string())]).optional()
8609
+ var ServiceFoundryErrorSchema = z7.object({
8610
+ message: z7.union([z7.string(), z7.array(z7.string())]).optional()
8512
8611
  });
8513
- var PutRemoteAgentResponseSchema = z6.object({
8514
- agentId: z6.string().min(1)
8612
+ var PutRemoteAgentResponseSchema = z7.object({
8613
+ agentId: z7.string().min(1)
8515
8614
  });
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(
8615
+ var AgentPermissionSchema = z7.enum(["READ_AGENT", "USE_AGENT", "MANAGE_AGENT", "DELETE_AGENT"]);
8616
+ var AgentPermissionsSchema = z7.record(
8617
+ z7.string(),
8618
+ z7.array(z7.string()).transform(
8520
8619
  (permissions) => permissions.flatMap((permission) => {
8521
8620
  const parsed = AgentPermissionSchema.safeParse(permission);
8522
8621
  return parsed.success ? [parsed.data] : [];
8523
8622
  })
8524
8623
  )
8525
8624
  );
8526
- var VendTokenResponseSchema = z6.object({
8527
- token: z6.string().min(1)
8625
+ var VendTokenResponseSchema = z7.object({
8626
+ subjectToken: z7.string().min(1),
8627
+ actorToken: z7.string().min(1)
8528
8628
  });
8529
8629
  var TFY_ASSUME_USER_HEADER = "x-tfy-assume-user";
8530
8630
  var TFY_SYSTEM_ASSUME_SUBJECT = "truefoundry";
@@ -8867,7 +8967,8 @@ var TrueFoundryServiceFoundryServerClient = class {
8867
8967
  return parsed.data;
8868
8968
  }
8869
8969
  /**
8870
- * Exchange a TrueFoundry API key for an agent-scoped token.
8970
+ * Exchange a TrueFoundry API key for dual agent-scoped tokens.
8971
+ * Wire `actorToken` is the agent identity (`asAgent`); wire `subjectToken` is the user with agent in `act` (`asUser`).
8871
8972
  * Authenticated with the server API key, not the user bearer.
8872
8973
  */
8873
8974
  async vendToken(input) {
@@ -8893,7 +8994,7 @@ var TrueFoundryServiceFoundryServerClient = class {
8893
8994
  cause: parsed.error
8894
8995
  });
8895
8996
  }
8896
- return parsed.data.token;
8997
+ return parsed.data;
8897
8998
  }
8898
8999
  #parseListResponse(payload) {
8899
9000
  const parsed = ListResponseSchema.safeParse(payload);
@@ -9021,6 +9122,7 @@ function createAgentImportRouter(deps) {
9021
9122
  const created = await agentStore.createAgent({
9022
9123
  tenant_id: agent.tenant_id,
9023
9124
  name: agent.name,
9125
+ description: agent.description ?? agent.name,
9024
9126
  manifest: agent.manifest,
9025
9127
  external_id: null,
9026
9128
  created_by_subject: agent.created_by_subject
@@ -9084,6 +9186,7 @@ function createAgentImportRouter(deps) {
9084
9186
 
9085
9187
  // src/apis/agents.ts
9086
9188
  import { OpenAPIHono as OpenAPIHono2 } from "@hono/zod-openapi";
9189
+ import { InvalidPageTokenError } from "@truefoundry/trueforge-core/agent-session";
9087
9190
 
9088
9191
  // src/auth/identity.ts
9089
9192
  init_config();
@@ -9120,11 +9223,15 @@ function asTrueFoundryRequestContext(context) {
9120
9223
  }
9121
9224
  return context;
9122
9225
  }
9226
+ function accessTokensFromCaller(context) {
9227
+ const resolve3 = callerAccessToken(context);
9228
+ return { asAgent: resolve3, asUser: resolve3 };
9229
+ }
9123
9230
  function agentAccessToken(input) {
9124
9231
  const { client, requestContext: context } = input;
9125
9232
  const agentId = requireTrueFoundryAgentExternalId(input.agent);
9126
9233
  let pending;
9127
- return () => {
9234
+ const vended = () => {
9128
9235
  if (pending === void 0) {
9129
9236
  input.logger.info("Exchanging user context for agent access token", {
9130
9237
  subject: context.subject.id,
@@ -9137,6 +9244,10 @@ function agentAccessToken(input) {
9137
9244
  }
9138
9245
  return pending;
9139
9246
  };
9247
+ return {
9248
+ asAgent: async () => (await vended()).actorToken,
9249
+ asUser: async () => (await vended()).subjectToken
9250
+ };
9140
9251
  }
9141
9252
  function callerAccessToken(context) {
9142
9253
  if (context.user_credential === null) {
@@ -9149,7 +9260,7 @@ function callerAccessToken(context) {
9149
9260
  }
9150
9261
  function accessTokenForRequest(input) {
9151
9262
  if (input.agent === void 0) {
9152
- return callerAccessToken(input.requestContext);
9263
+ return accessTokensFromCaller(input.requestContext);
9153
9264
  }
9154
9265
  const agentId = requireTrueFoundryAgentExternalId(input.agent);
9155
9266
  const cache = input.requestContext[accessTokenCache];
@@ -9157,14 +9268,14 @@ function accessTokenForRequest(input) {
9157
9268
  if (existing !== void 0) {
9158
9269
  return existing;
9159
9270
  }
9160
- const resolveAgentAccessToken = agentAccessToken({
9271
+ const tokens = agentAccessToken({
9161
9272
  client: input.client,
9162
9273
  requestContext: input.requestContext,
9163
9274
  agent: input.agent,
9164
9275
  logger: input.logger
9165
9276
  });
9166
- cache.set(agentId, resolveAgentAccessToken);
9167
- return resolveAgentAccessToken;
9277
+ cache.set(agentId, tokens);
9278
+ return tokens;
9168
9279
  }
9169
9280
 
9170
9281
  // src/auth/identity.ts
@@ -9230,67 +9341,44 @@ init_agentStore();
9230
9341
 
9231
9342
  // src/routes/agentRoutes.ts
9232
9343
  import { createRoute as createRoute2, z as z8 } from "@hono/zod-openapi";
9233
-
9234
- // src/schemas/agent.ts
9235
9344
  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");
9345
+
9346
+ // src/routes/fernExtensions.ts
9347
+ var TOKEN_PAGINATION = {
9348
+ cursor: "$request.page_token",
9349
+ next_cursor: "$response.pagination.next_page_token",
9350
+ results: "$response.data"
9351
+ };
9277
9352
 
9278
9353
  // src/routes/agentRoutes.ts
9279
9354
  var AgentIdParamsSchema = z8.object({
9280
9355
  agent_id: z8.string().min(1).max(64).describe("Immutable agent identifier.")
9281
9356
  });
9357
+ var ListAgentsQuerySchema = z8.object({
9358
+ 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)}.`),
9359
+ page_token: z8.string().optional().describe("Opaque token from a previous response `next_page_token`."),
9360
+ agent_name: z8.string().trim().min(1).optional().describe("Case-insensitive substring match on agent name.")
9361
+ }).openapi("ListAgentsQuery");
9282
9362
  var listAgentsRoute = createRoute2({
9283
9363
  method: "get",
9284
9364
  path: "/",
9285
9365
  tags: ["Agents" /* AGENTS */],
9286
9366
  summary: "List agents",
9287
- description: "All configured agents for the tenant.",
9367
+ description: "List configured agents for the tenant, ordered by name. Optional `agent_name` filters by substring.",
9288
9368
  "x-fern-sdk-group-name": ["agents"],
9289
9369
  "x-fern-sdk-method-name": "list",
9370
+ "x-fern-pagination": TOKEN_PAGINATION,
9371
+ request: {
9372
+ query: ListAgentsQuerySchema
9373
+ },
9290
9374
  responses: {
9291
9375
  200: {
9292
9376
  content: { "application/json": { schema: ListAgentsResponseSchema } },
9293
- description: "All configured agents."
9377
+ description: "Paginated matching agents."
9378
+ },
9379
+ 400: {
9380
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
9381
+ description: "Invalid query parameters or page token."
9294
9382
  },
9295
9383
  401: {
9296
9384
  content: { "application/json": { schema: RequestErrorResponseSchema } },
@@ -9408,7 +9496,7 @@ var putAgentRoute = createRoute2({
9408
9496
  path: "/{agent_id}",
9409
9497
  tags: ["Agents" /* AGENTS */],
9410
9498
  summary: "Update an agent",
9411
- description: "Replaces the manifest for an existing agent keyed by immutable `agent_id`.",
9499
+ description: "Update an existing agent by immutable id.",
9412
9500
  "x-fern-sdk-group-name": ["agents"],
9413
9501
  "x-fern-sdk-method-name": "update",
9414
9502
  request: {
@@ -9614,6 +9702,44 @@ async function checkSnapshotStatus({
9614
9702
  }
9615
9703
 
9616
9704
  // src/runtime/sessionResources.ts
9705
+ var X_TFY_METADATA = "x-tfy-metadata";
9706
+ var TFG_METADATA_PREFIX = "tfg";
9707
+ function buildGatewayMetadata(input) {
9708
+ const metadata = {
9709
+ [`${TFG_METADATA_PREFIX}.session_id`]: input.session.session_id,
9710
+ [`${TFG_METADATA_PREFIX}.turn_id`]: input.turnId
9711
+ };
9712
+ const { agent } = input.session;
9713
+ if (agent.type === "reference") {
9714
+ metadata[`${TFG_METADATA_PREFIX}.agent_id`] = agent.id;
9715
+ if (agent.name !== null) {
9716
+ metadata[`${TFG_METADATA_PREFIX}.agent_name`] = agent.name;
9717
+ }
9718
+ }
9719
+ return metadata;
9720
+ }
9721
+ function gatewayMetadataHeaders(metadata) {
9722
+ if (Object.keys(metadata).length === 0) {
9723
+ return {};
9724
+ }
9725
+ return { [X_TFY_METADATA]: JSON.stringify(metadata) };
9726
+ }
9727
+ function withGatewayMetadataHeaders(input) {
9728
+ const { headers, metadataHeaders } = input;
9729
+ if (Object.keys(metadataHeaders).length === 0) {
9730
+ return headers;
9731
+ }
9732
+ if (typeof headers !== "function") {
9733
+ return { ...headers, ...metadataHeaders };
9734
+ }
9735
+ return async () => {
9736
+ const result = await headers();
9737
+ if ("authRequired" in result) {
9738
+ return result;
9739
+ }
9740
+ return { headers: { ...result.headers, ...metadataHeaders } };
9741
+ };
9742
+ }
9617
9743
  function parseModelFqn(name) {
9618
9744
  const slash = name.indexOf("/");
9619
9745
  if (slash <= 0 || slash === name.length - 1) {
@@ -9794,11 +9920,19 @@ async function agentIfAccessible(input) {
9794
9920
  async function listAccessibleAgents(input) {
9795
9921
  const access = await input.authorizer.listAgentAccess({ context: input.context, action: input.action });
9796
9922
  if (access.kind === "all") {
9797
- return input.store.listAgents({ tenant_id: input.context.tenant_id });
9923
+ return input.store.listAgents({
9924
+ tenant_id: input.context.tenant_id,
9925
+ agent_name: input.agent_name,
9926
+ limit: input.limit,
9927
+ page_token: input.page_token
9928
+ });
9798
9929
  }
9799
9930
  return input.store.listAgents({
9800
9931
  tenant_id: input.context.tenant_id,
9801
- external_ids: access.agent_external_ids
9932
+ external_ids: access.agent_external_ids,
9933
+ agent_name: input.agent_name,
9934
+ limit: input.limit,
9935
+ page_token: input.page_token
9802
9936
  });
9803
9937
  }
9804
9938
  async function resolveManagedAgentIds(input) {
@@ -9807,11 +9941,14 @@ async function resolveManagedAgentIds(input) {
9807
9941
  if (access.kind === "all") {
9808
9942
  return [];
9809
9943
  }
9810
- const agents = await store.listAgents({
9944
+ const { data } = await store.listAgents({
9811
9945
  tenant_id: context.tenant_id,
9812
- external_ids: access.agent_external_ids
9946
+ external_ids: access.agent_external_ids,
9947
+ agent_name: void 0,
9948
+ limit: void 0,
9949
+ page_token: void 0
9813
9950
  });
9814
- return agents.map((agent) => agent.id);
9951
+ return data.map((agent) => agent.id);
9815
9952
  }
9816
9953
  async function canReadAgentBoundResource(input) {
9817
9954
  const { store, context, authorizer, created_by_subject_id, agent_id } = input;
@@ -9825,12 +9962,15 @@ async function canReadAgentBoundResource(input) {
9825
9962
  return managedAgentIds.includes(agent_id);
9826
9963
  }
9827
9964
 
9965
+ // src/apis/agentCodeSnippets.ts
9966
+ init_config();
9967
+
9828
9968
  // src/apis/codesnippet-templates/typescript.ts
9829
9969
  var typescriptStreamTemplate = `// npm install @truefoundry/trueforge-sdk
9830
9970
  import { TrueForge, TrueForgeApi, isEventDelta, mergeEventDelta } from "@truefoundry/trueforge-sdk";
9831
9971
 
9832
9972
  const client = new TrueForge({
9833
- baseUrl: {{baseUrl}},
9973
+ baseUrl: {{baseUrl}},{{tokenLine}}
9834
9974
  });
9835
9975
 
9836
9976
  const { data: session } = await client.sessions.create({
@@ -9857,7 +9997,7 @@ var typescriptNonStreamTemplate = `// npm install @truefoundry/trueforge-sdk
9857
9997
  import { TrueForge } from "@truefoundry/trueforge-sdk";
9858
9998
 
9859
9999
  const client = new TrueForge({
9860
- baseUrl: {{baseUrl}},
10000
+ baseUrl: {{baseUrl}},{{tokenLine}}
9861
10001
  });
9862
10002
 
9863
10003
  const { data: session } = await client.sessions.create({
@@ -9877,10 +10017,12 @@ console.log(latest.state);
9877
10017
 
9878
10018
  // src/apis/agentCodeSnippets.ts
9879
10019
  var TYPESCRIPT_ICON = "https://assets.production.truefoundry.com/typescript.svg";
10020
+ var TOKEN_LINE = '\n token: "USER_API_KEY",';
9880
10021
  function renderSnippetTemplate(template, vars) {
9881
10022
  const literals = {
9882
10023
  agentName: JSON.stringify(vars.agentName),
9883
- baseUrl: JSON.stringify(vars.baseUrl)
10024
+ baseUrl: JSON.stringify(vars.baseUrl),
10025
+ tokenLine: vars.includeToken ? TOKEN_LINE : ""
9884
10026
  };
9885
10027
  return template.replaceAll(/\{\{(\w+)\}\}/g, (match, key) => {
9886
10028
  const value = literals[key];
@@ -9891,6 +10033,8 @@ function renderSnippetTemplate(template, vars) {
9891
10033
  });
9892
10034
  }
9893
10035
  function buildAgentCodeSnippets(input) {
10036
+ const includeToken = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
10037
+ const vars = { ...input, includeToken };
9894
10038
  return {
9895
10039
  base_url: input.baseUrl,
9896
10040
  snippets: [
@@ -9899,8 +10043,8 @@ function buildAgentCodeSnippets(input) {
9899
10043
  language: "typescript",
9900
10044
  icon: TYPESCRIPT_ICON,
9901
10045
  sample_code: {
9902
- stream: renderSnippetTemplate(typescriptStreamTemplate, input),
9903
- non_stream: renderSnippetTemplate(typescriptNonStreamTemplate, input)
10046
+ stream: renderSnippetTemplate(typescriptStreamTemplate, vars),
10047
+ non_stream: renderSnippetTemplate(typescriptNonStreamTemplate, vars)
9904
10048
  }
9905
10049
  }
9906
10050
  ]
@@ -9912,6 +10056,7 @@ function toWireAgent(record) {
9912
10056
  return {
9913
10057
  id: record.id,
9914
10058
  name: record.name,
10059
+ description: record.description,
9915
10060
  manifest: record.manifest,
9916
10061
  created_by_subject: record.created_by_subject
9917
10062
  };
@@ -9936,14 +10081,25 @@ async function validateManifest({
9936
10081
  }
9937
10082
  function createAgentsRouter(deps) {
9938
10083
  const listHandler = async (c) => {
10084
+ const { limit, page_token: pageToken, agent_name: agentName } = c.req.valid("query");
9939
10085
  const requestContext = deps.resolveRequestContext(c);
9940
- const records = await listAccessibleAgents({
9941
- store: deps.resolveAgentStore(c),
9942
- context: requestContext,
9943
- authorizer: deps.authorizer,
9944
- action: "read"
9945
- });
9946
- return c.json({ data: records.map(toWireAgent) }, 200);
10086
+ try {
10087
+ const { data, pagination } = await listAccessibleAgents({
10088
+ store: deps.resolveAgentStore(c),
10089
+ context: requestContext,
10090
+ authorizer: deps.authorizer,
10091
+ action: "read",
10092
+ agent_name: agentName,
10093
+ limit,
10094
+ page_token: pageToken
10095
+ });
10096
+ return c.json({ data: data.map(toWireAgent), pagination }, 200);
10097
+ } catch (error) {
10098
+ if (error instanceof InvalidPageTokenError) {
10099
+ return c.json({ error: { message: error.message } }, 400);
10100
+ }
10101
+ throw error;
10102
+ }
9947
10103
  };
9948
10104
  const createHandler = async (c) => {
9949
10105
  const body = c.req.valid("json");
@@ -9960,6 +10116,7 @@ function createAgentsRouter(deps) {
9960
10116
  const record = await deps.resolveAgentStore(c).createAgent({
9961
10117
  tenant_id: requestContext.tenant_id,
9962
10118
  name: body.name,
10119
+ description: body.description,
9963
10120
  manifest,
9964
10121
  external_id: null,
9965
10122
  created_by_subject: createdBySubjectFromRequestContext(requestContext)
@@ -10055,6 +10212,7 @@ function createAgentsRouter(deps) {
10055
10212
  const record = await deps.resolveAgentStore(c).updateAgent({
10056
10213
  tenant_id: requestContext.tenant_id,
10057
10214
  id: agentId,
10215
+ ...body.description === void 0 ? {} : { description: body.description },
10058
10216
  manifest
10059
10217
  });
10060
10218
  if (record === void 0) {
@@ -10751,7 +10909,8 @@ import { z as z16 } from "@hono/zod-openapi";
10751
10909
  // src/schemas/mcpServer.ts
10752
10910
  init_common();
10753
10911
  import { z as z15 } from "@hono/zod-openapi";
10754
- var McpServerTypeSchema = z15.enum(["remote", "truefoundry"]).openapi("MCPServerType");
10912
+ var MCP_SERVER_TYPES = ["remote", "truefoundry"];
10913
+ var McpServerTypeSchema = z15.enum(MCP_SERVER_TYPES).openapi("MCPServerType");
10755
10914
  var McpServerHeaderAuthSchema = z15.object({
10756
10915
  type: z15.literal("header").describe("Authenticate with static HTTP headers."),
10757
10916
  headers: z15.record(z15.string().min(1), z15.string().min(1)).refine((headers) => Object.keys(headers).length > 0, {
@@ -10765,14 +10924,21 @@ var McpServerDcrAuthSchema = z15.object({
10765
10924
  }).strict().openapi("MCPServerDcrAuth");
10766
10925
  var McpServerManifestAuthSchema = z15.discriminatedUnion("type", [McpServerHeaderAuthSchema, McpServerDcrAuthSchema]).describe("Optional auth settings. Omit when the server needs no credentials.").openapi("MCPServerManifestAuth");
10767
10926
  var McpServerDescriptionSchema = z15.string().trim().min(1).describe("Concise summary of what this MCP server provides.");
10768
- var McpServerManifestObjectSchema = z15.object({
10769
- type: McpServerTypeSchema,
10927
+ var RemoteMcpServerManifestSchema = z15.object({
10928
+ type: z15.literal(McpServerTypeSchema.enum.remote),
10770
10929
  name: NameSchema,
10771
- url: z15.url().describe("MCP endpoint URL. For `truefoundry`, the resolved AI Gateway proxy URL."),
10930
+ url: z15.url().describe("MCP endpoint URL."),
10772
10931
  description: McpServerDescriptionSchema,
10773
10932
  auth: McpServerManifestAuthSchema.optional()
10774
- }).strict();
10775
- var McpServerManifestSchema = McpServerManifestObjectSchema.openapi("MCPServerManifest");
10933
+ }).strict().openapi("RemoteMCPServerManifest");
10934
+ var TrueFoundryMcpServerManifestSchema = z15.object({
10935
+ type: z15.literal(McpServerTypeSchema.enum.truefoundry),
10936
+ name: NameSchema,
10937
+ url: z15.url().describe("Resolved AI Gateway proxy URL for this TrueFoundry-managed MCP server."),
10938
+ description: McpServerDescriptionSchema,
10939
+ auth: McpServerManifestAuthSchema.optional()
10940
+ }).strict().openapi("TrueFoundryMCPServerManifest");
10941
+ var McpServerManifestSchema = z15.discriminatedUnion("type", [RemoteMcpServerManifestSchema, TrueFoundryMcpServerManifestSchema]).openapi("MCPServerManifest");
10776
10942
  var McpAuthStatusSchema = z15.object({
10777
10943
  status: z15.enum(["authenticated", "auth_required", "not_required"]).describe("Current auth state for this MCP server."),
10778
10944
  authorization_url: z15.url().optional().describe("When auth is required, this contains the URL to redirect the user to for authorization.")
@@ -12415,7 +12581,7 @@ function createPermissionsRouter(deps) {
12415
12581
  // src/apis/schedules.ts
12416
12582
  import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
12417
12583
  import {
12418
- InvalidPageTokenError
12584
+ InvalidPageTokenError as InvalidPageTokenError2
12419
12585
  } from "@truefoundry/trueforge-core/agent-session";
12420
12586
 
12421
12587
  // src/controller/scheduleDispatch.ts
@@ -12629,15 +12795,6 @@ init_scheduleStore();
12629
12795
  init_common();
12630
12796
  import { createRoute as createRoute10, z as z25 } from "@hono/zod-openapi";
12631
12797
  init_schedule();
12632
-
12633
- // src/routes/fernExtensions.ts
12634
- var TOKEN_PAGINATION = {
12635
- cursor: "$request.page_token",
12636
- next_cursor: "$response.pagination.next_page_token",
12637
- results: "$response.data"
12638
- };
12639
-
12640
- // src/routes/scheduleRoutes.ts
12641
12798
  var ScheduleIdParamsSchema = z25.object({
12642
12799
  schedule_id: z25.string().min(1).max(64).describe("Immutable schedule identifier.")
12643
12800
  });
@@ -12947,7 +13104,7 @@ import { z as z26 } from "@hono/zod-openapi";
12947
13104
  import {
12948
13105
  EventType,
12949
13106
  SessionEventItemSchema,
12950
- TokenPaginationSchema as TokenPaginationSchema2,
13107
+ TokenPaginationSchema as TokenPaginationSchema3,
12951
13108
  TurnCreatedEventSchema,
12952
13109
  TurnDoneEventSchema
12953
13110
  } from "@truefoundry/trueforge-core/agent-session";
@@ -12988,13 +13145,13 @@ var ListSessionEventsRequestQuerySchema = z26.object({
12988
13145
  }).openapi("ListSessionEventsRequestQuery");
12989
13146
  var ListSessionEventsResponseSchema = z26.object({
12990
13147
  data: z26.array(SessionEventItemSchema),
12991
- pagination: TokenPaginationSchema2
13148
+ pagination: TokenPaginationSchema3
12992
13149
  }).openapi("ListSessionEventsResponse");
12993
13150
 
12994
13151
  // src/schemas/turn.ts
12995
13152
  init_common();
12996
13153
  import { z as z27 } from "@hono/zod-openapi";
12997
- import { SessionEventSchema, TokenPaginationSchema as TokenPaginationSchema3, TurnSchema } from "@truefoundry/trueforge-core/agent-session";
13154
+ import { SessionEventSchema, TokenPaginationSchema as TokenPaginationSchema4, TurnSchema } from "@truefoundry/trueforge-core/agent-session";
12998
13155
  import { CreateTurnRequestSchema, TurnSchema as TurnSchema2 } from "@truefoundry/trueforge-core/agent-session";
12999
13156
  var SubscribeTurnQuerySchema = z27.object({
13000
13157
  // Query strings need coerce; map null/'' to undefined first so Number(null)→0
@@ -13017,7 +13174,7 @@ var GetTurnResponseSchema = z27.object({
13017
13174
  }).openapi("GetTurnResponse");
13018
13175
  var ListTurnsResponseSchema = z27.object({
13019
13176
  data: z27.array(TurnSchema),
13020
- pagination: TokenPaginationSchema3
13177
+ pagination: TokenPaginationSchema4
13021
13178
  }).openapi("ListTurnsResponse");
13022
13179
  var ListTurnEventsRequestQuerySchema = z27.object({
13023
13180
  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)}.`),
@@ -13026,7 +13183,7 @@ var ListTurnEventsRequestQuerySchema = z27.object({
13026
13183
  }).openapi("ListTurnEventsRequestQuery");
13027
13184
  var ListTurnEventsResponseSchema = z27.object({
13028
13185
  data: z27.array(SessionEventSchema),
13029
- pagination: TokenPaginationSchema3
13186
+ pagination: TokenPaginationSchema4
13030
13187
  }).openapi("ListTurnEventsResponse");
13031
13188
  var DownloadSandboxFileRequestQuerySchema = z27.object({
13032
13189
  path: z27.string().min(1).describe(
@@ -13046,7 +13203,7 @@ import {
13046
13203
  SessionSchema,
13047
13204
  SessionSourceScheduleSchema,
13048
13205
  SessionSourceTypeSchema,
13049
- TokenPaginationSchema as TokenPaginationSchema4
13206
+ TokenPaginationSchema as TokenPaginationSchema5
13050
13207
  } from "@truefoundry/trueforge-core/agent-session";
13051
13208
 
13052
13209
  // src/schemas/deepObjectQuery.ts
@@ -13189,7 +13346,7 @@ var GetSessionResponseSchema = z29.object({
13189
13346
  }).openapi("GetSessionResponse");
13190
13347
  var ListSessionsResponseSchema = z29.object({
13191
13348
  data: z29.array(SessionSchema),
13192
- pagination: TokenPaginationSchema4
13349
+ pagination: TokenPaginationSchema5
13193
13350
  }).openapi("ListSessionsResponse");
13194
13351
 
13195
13352
  // src/routes/sessionRoutes.ts
@@ -14011,10 +14168,13 @@ function createTurnResolver(deps) {
14011
14168
  modelProviderStore,
14012
14169
  logger,
14013
14170
  signal,
14014
- tenant_id,
14015
14171
  userRef,
14016
- sessionId
14172
+ session,
14173
+ turnId
14017
14174
  } = deps;
14175
+ const tenant_id = session.tenant_id;
14176
+ const sessionId = session.session_id;
14177
+ const metadataHeaders = isTrueFoundryModeEnabled() ? gatewayMetadataHeaders(buildGatewayMetadata({ session, turnId })) : {};
14018
14178
  return new TurnResourceResolver({
14019
14179
  llm: async (name) => {
14020
14180
  const resolved = await getModelDetails({
@@ -14024,7 +14184,10 @@ function createTurnResolver(deps) {
14024
14184
  });
14025
14185
  return {
14026
14186
  modelClient: new VercelAILLM({
14027
- providerConfig: resolved.providerConfig,
14187
+ providerConfig: {
14188
+ ...resolved.providerConfig,
14189
+ headers: { ...resolved.providerConfig.headers, ...metadataHeaders }
14190
+ },
14028
14191
  logger,
14029
14192
  signal
14030
14193
  }),
@@ -14044,7 +14207,13 @@ function createTurnResolver(deps) {
14044
14207
  message: `Unknown MCP server "${name}" \u2014 not configured`
14045
14208
  });
14046
14209
  }
14047
- return connection;
14210
+ return {
14211
+ url: connection.url,
14212
+ headers: withGatewayMetadataHeaders({
14213
+ headers: connection.headers,
14214
+ metadataHeaders
14215
+ })
14216
+ };
14048
14217
  },
14049
14218
  mcpRequestTimeoutMs: config_default.MCP_REQUEST_TIMEOUT_MS,
14050
14219
  mcpConnectTimeoutMs: config_default.MCP_CONNECT_TIMEOUT_MS,
@@ -14157,6 +14326,7 @@ async function drainTurnEvents(input) {
14157
14326
  async function beginTurnExecution(params) {
14158
14327
  const { session, input, previous_turn_id: previousTurnId, userRef, deps } = params;
14159
14328
  const sessionId = session.session_id;
14329
+ const turnId = mintPeeredTurnId(config_default.EXECUTOR_ID);
14160
14330
  const abortController = new AbortController();
14161
14331
  const tenant_id = session.tenant_id;
14162
14332
  const resolver = createTurnResolver({
@@ -14167,13 +14337,13 @@ async function beginTurnExecution(params) {
14167
14337
  modelProviderStore: deps.modelProviderStore,
14168
14338
  logger: deps.logger,
14169
14339
  signal: abortController.signal,
14170
- tenant_id,
14171
14340
  userRef,
14172
- sessionId
14341
+ session,
14342
+ turnId
14173
14343
  });
14174
14344
  const title = session.record.last_turn_id ? void 0 : deriveSessionTitle(input);
14175
14345
  const turn = await session.createTurn({
14176
- turn_id: mintPeeredTurnId(config_default.EXECUTOR_ID),
14346
+ turn_id: turnId,
14177
14347
  input,
14178
14348
  previous_turn_id: previousTurnId,
14179
14349
  signal: abortController.signal,
@@ -14714,7 +14884,7 @@ function createSchedulesRouter(deps) {
14714
14884
  });
14715
14885
  return c.json({ data: data.map(toWireSchedule), pagination }, 200);
14716
14886
  } catch (error) {
14717
- if (error instanceof InvalidPageTokenError) {
14887
+ if (error instanceof InvalidPageTokenError2) {
14718
14888
  return c.json({ error: { message: error.message } }, 400);
14719
14889
  }
14720
14890
  throw error;
@@ -14749,7 +14919,7 @@ function createSchedulesRouter(deps) {
14749
14919
  });
14750
14920
  return c.json({ data: data.map(toWireScheduleRun), pagination }, 200);
14751
14921
  } catch (error) {
14752
- if (error instanceof InvalidPageTokenError) {
14922
+ if (error instanceof InvalidPageTokenError2) {
14753
14923
  return c.json({ error: { message: error.message } }, 400);
14754
14924
  }
14755
14925
  throw error;
@@ -17587,11 +17757,12 @@ function asError(value) {
17587
17757
  }
17588
17758
  function toPutRemoteAgentPayload({
17589
17759
  name,
17760
+ description,
17590
17761
  manifest
17591
17762
  }) {
17592
17763
  return {
17593
17764
  name,
17594
- description: name,
17765
+ description: (description || name).slice(0, AGENT_DESCRIPTION_MAX_LENGTH),
17595
17766
  model: manifest.model.name,
17596
17767
  mcp_servers: (manifest.mcp_servers ?? []).map((server) => server.name)
17597
17768
  };
@@ -17637,7 +17808,11 @@ var TrueFoundryAgentStore = class {
17637
17808
  try {
17638
17809
  ({ externalId } = await this.#client.putRemoteAgent({
17639
17810
  accessToken: await this.#resolveAccessToken(),
17640
- ...toPutRemoteAgentPayload({ name: input.name, manifest: input.manifest })
17811
+ ...toPutRemoteAgentPayload({
17812
+ name: input.name,
17813
+ description: input.description,
17814
+ manifest: input.manifest
17815
+ })
17641
17816
  }));
17642
17817
  const updated = await this.#inner.updateAgent(
17643
17818
  { tenant_id: input.tenant_id, id: created.id, external_id: externalId },
@@ -17671,8 +17846,7 @@ var TrueFoundryAgentStore = class {
17671
17846
  }
17672
17847
  }
17673
17848
  async updateAgent(input, transaction) {
17674
- const nextManifest = input.manifest;
17675
- if (nextManifest === void 0) {
17849
+ if (input.manifest === void 0 && input.description === void 0) {
17676
17850
  return this.#inner.updateAgent(input, transaction);
17677
17851
  }
17678
17852
  return this.#withUpdateLock(input, transaction, async (txn) => {
@@ -17680,16 +17854,23 @@ var TrueFoundryAgentStore = class {
17680
17854
  if (previous === void 0) {
17681
17855
  return void 0;
17682
17856
  }
17857
+ const nextManifest = input.manifest ?? previous.manifest;
17858
+ const nextDescription = input.description ?? previous.description;
17683
17859
  const { externalId } = await this.#client.putRemoteAgent({
17684
17860
  accessToken: await this.#resolveAccessToken(),
17685
- ...toPutRemoteAgentPayload({ name: previous.name, manifest: nextManifest })
17861
+ ...toPutRemoteAgentPayload({
17862
+ name: previous.name,
17863
+ description: nextDescription,
17864
+ manifest: nextManifest
17865
+ })
17686
17866
  });
17687
17867
  try {
17688
17868
  return await this.#inner.updateAgent(
17689
17869
  {
17690
17870
  tenant_id: input.tenant_id,
17691
17871
  id: input.id,
17692
- manifest: nextManifest,
17872
+ ...input.manifest === void 0 ? {} : { manifest: nextManifest },
17873
+ ...input.description === void 0 ? {} : { description: nextDescription },
17693
17874
  ...externalId === previous.external_id ? {} : { external_id: externalId }
17694
17875
  },
17695
17876
  txn
@@ -17700,6 +17881,7 @@ var TrueFoundryAgentStore = class {
17700
17881
  accessToken: await this.#resolveAccessToken(),
17701
17882
  ...toPutRemoteAgentPayload({
17702
17883
  name: previous.name,
17884
+ description: previous.description,
17703
17885
  manifest: previous.manifest
17704
17886
  })
17705
17887
  });
@@ -17929,18 +18111,21 @@ function resolveAuthorizeRedirectURL(input) {
17929
18111
  }
17930
18112
  var TrueFoundryMcpServerStore = class {
17931
18113
  #client;
17932
- #resolveAccessToken;
18114
+ #asAgent;
18115
+ #asUser;
17933
18116
  #subject;
17934
18117
  #perServerHeaders;
17935
18118
  #gatewayUrl;
17936
18119
  constructor(input) {
17937
18120
  this.#client = input.client;
17938
- this.#resolveAccessToken = accessTokenForRequest({
18121
+ const tokens = accessTokenForRequest({
17939
18122
  client: input.client,
17940
18123
  requestContext: asTrueFoundryRequestContext(input.requestContext),
17941
18124
  agent: input.agent,
17942
18125
  logger: input.logger
17943
18126
  });
18127
+ this.#asAgent = tokens.asAgent;
18128
+ this.#asUser = tokens.asUser;
17944
18129
  this.#subject = input.requestContext.subject;
17945
18130
  this.#perServerHeaders = input.perServerHeaders ?? {};
17946
18131
  }
@@ -17949,7 +18134,7 @@ var TrueFoundryMcpServerStore = class {
17949
18134
  const { record, userRef } = input;
17950
18135
  const headers = async () => ({
17951
18136
  ...withoutAuthorization(this.#perServerHeaders[record.name]),
17952
- Authorization: `Bearer ${await this.#resolveAccessToken()}`
18137
+ Authorization: `Bearer ${await this.#asUser()}`
17953
18138
  });
17954
18139
  return async () => {
17955
18140
  const status = await this.authorize({
@@ -17978,7 +18163,7 @@ var TrueFoundryMcpServerStore = class {
17978
18163
  if (input.names?.length === 0) {
17979
18164
  return [];
17980
18165
  }
17981
- const accessToken = await this.#resolveAccessToken();
18166
+ const accessToken = await this.#asAgent();
17982
18167
  const [rows, gatewayUrl] = await Promise.all([
17983
18168
  this.#client.listMcpServers({
17984
18169
  accessToken,
@@ -17990,7 +18175,7 @@ var TrueFoundryMcpServerStore = class {
17990
18175
  }
17991
18176
  async getServer(input, transaction) {
17992
18177
  void transaction;
17993
- const accessToken = await this.#resolveAccessToken();
18178
+ const accessToken = await this.#asAgent();
17994
18179
  const [row, gatewayUrl] = await Promise.all([
17995
18180
  this.#client.getMcpServerByName({ accessToken, name: input.name }),
17996
18181
  this.#resolveGatewayUrl()
@@ -18044,7 +18229,7 @@ var TrueFoundryMcpServerStore = class {
18044
18229
  out.set(
18045
18230
  record.name,
18046
18231
  await this.#client.getMcpAuthStatus({
18047
- accessToken: await this.#resolveAccessToken(),
18232
+ accessToken: await this.#asUser(),
18048
18233
  mcpServerId: record.id,
18049
18234
  subjectId: this.#subject.id,
18050
18235
  subjectType: this.#subject.type
@@ -18059,7 +18244,7 @@ var TrueFoundryMcpServerStore = class {
18059
18244
  throw new McpServerNotFoundError(input.name);
18060
18245
  }
18061
18246
  return this.#client.getMcpAuthorize({
18062
- accessToken: await this.#resolveAccessToken(),
18247
+ accessToken: await this.#asUser(),
18063
18248
  mcpServerId: record.id,
18064
18249
  redirectURL: resolveAuthorizeRedirectURL({
18065
18250
  ...input.returnTo !== void 0 ? { returnTo: input.returnTo } : {}
@@ -18073,7 +18258,7 @@ var TrueFoundryMcpServerStore = class {
18073
18258
  throw new McpServerNotFoundError(input.name);
18074
18259
  }
18075
18260
  await this.#client.deleteMcpAuth({
18076
- accessToken: await this.#resolveAccessToken(),
18261
+ accessToken: await this.#asUser(),
18077
18262
  mcpServerId: record.id,
18078
18263
  subjectId: this.#subject.id,
18079
18264
  subjectType: this.#subject.type,
@@ -18082,7 +18267,7 @@ var TrueFoundryMcpServerStore = class {
18082
18267
  }
18083
18268
  async #resolveGatewayUrl() {
18084
18269
  if (this.#gatewayUrl === void 0) {
18085
- const installations = await this.#client.listGatewayInstallations(await this.#resolveAccessToken());
18270
+ const installations = await this.#client.listGatewayInstallations(await this.#asAgent());
18086
18271
  this.#gatewayUrl = resolveDefaultGatewayUrl(installations);
18087
18272
  }
18088
18273
  return this.#gatewayUrl;
@@ -18103,15 +18288,18 @@ function toRecord2(input) {
18103
18288
  init_modelProviderStore();
18104
18289
  var TrueFoundryModelProviderStore = class {
18105
18290
  #client;
18106
- #resolveAccessToken;
18291
+ #asAgent;
18292
+ #asUser;
18107
18293
  constructor(input) {
18108
18294
  this.#client = input.client;
18109
- this.#resolveAccessToken = accessTokenForRequest({
18295
+ const tokens = accessTokenForRequest({
18110
18296
  client: input.client,
18111
18297
  requestContext: asTrueFoundryRequestContext(input.requestContext),
18112
18298
  agent: input.agent,
18113
18299
  logger: input.logger
18114
18300
  });
18301
+ this.#asAgent = tokens.asAgent;
18302
+ this.#asUser = tokens.asUser;
18115
18303
  }
18116
18304
  async listProviders(input, transaction) {
18117
18305
  void transaction;
@@ -18144,19 +18332,19 @@ var TrueFoundryModelProviderStore = class {
18144
18332
  return flattenProviderModels(await this.listProviders(input, transaction));
18145
18333
  }
18146
18334
  async #records(input) {
18147
- const accessToken = await this.#resolveAccessToken();
18335
+ const [agentToken, userToken] = await Promise.all([this.#asAgent(), this.#asUser()]);
18148
18336
  const [integrations, installations] = await Promise.all([
18149
18337
  this.#client.listProviderIntegrations({
18150
- accessToken,
18338
+ accessToken: agentToken,
18151
18339
  ...input.filter !== void 0 ? { filter: input.filter } : {}
18152
18340
  }),
18153
- this.#client.listGatewayInstallations(accessToken)
18341
+ this.#client.listGatewayInstallations(agentToken)
18154
18342
  ]);
18155
18343
  const gatewayUrl = resolveDefaultGatewayUrl(installations);
18156
18344
  return toRecords({
18157
18345
  tenant_id: input.tenant_id,
18158
18346
  gatewayUrl,
18159
- accessToken,
18347
+ accessToken: userToken,
18160
18348
  models: mapEnabledModels({ integrations })
18161
18349
  });
18162
18350
  }