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

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 (214) hide show
  1. package/dist/_frontend/assets/{AgentCodeSnippets-N546FNNS-DlWVvctF.js → AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js} +1 -1
  2. package/dist/_frontend/assets/AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js.br +0 -0
  3. package/dist/_frontend/assets/AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js.gz +0 -0
  4. package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js +1 -0
  5. package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js.br +0 -0
  6. package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js.gz +0 -0
  7. package/dist/_frontend/assets/{AgentOverview-VF74XC7I-DuR4GDFb.js → AgentOverview-NPC4P2EY-Z0AslRUd.js} +1 -1
  8. package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js.br +0 -0
  9. package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js.gz +0 -0
  10. package/dist/_frontend/assets/{AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js → AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js} +1 -1
  11. package/dist/_frontend/assets/AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js.br +0 -0
  12. package/dist/_frontend/assets/AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js.gz +0 -0
  13. package/dist/_frontend/assets/{AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js → AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js} +1 -1
  14. package/dist/_frontend/assets/AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js.br +0 -0
  15. package/dist/_frontend/assets/AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js.gz +0 -0
  16. package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js +1 -0
  17. package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js.br +0 -0
  18. package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js.gz +0 -0
  19. package/dist/_frontend/assets/{ConnectorSettings-R5VEP7BO-Cvdqimeu.js → ConnectorSettings-QTAI4TQX-PySj_xEm.js} +1 -1
  20. package/dist/_frontend/assets/ConnectorSettings-QTAI4TQX-PySj_xEm.js.br +0 -0
  21. package/dist/_frontend/assets/ConnectorSettings-QTAI4TQX-PySj_xEm.js.gz +0 -0
  22. package/dist/_frontend/assets/{DockLayout-F44RWGEY-DVcqWNpi.js → DockLayout-TATYU5SV-DAuT7yes.js} +1 -1
  23. package/dist/_frontend/assets/{DrawerLayout-SQ323AVM-CrsDJpVR.js → DrawerLayout-DXHNV33K-BP-6TUEf.js} +2 -2
  24. package/dist/_frontend/assets/DrawerLayout-DXHNV33K-BP-6TUEf.js.br +0 -0
  25. package/dist/_frontend/assets/DrawerLayout-DXHNV33K-BP-6TUEf.js.gz +0 -0
  26. package/dist/_frontend/assets/{ModelSettings-6QLS63HM-B0omK7y_.js → ModelSettings-UWTBHQRG-L5KYrHBM.js} +1 -1
  27. package/dist/_frontend/assets/ModelSettings-UWTBHQRG-L5KYrHBM.js.br +0 -0
  28. package/dist/_frontend/assets/ModelSettings-UWTBHQRG-L5KYrHBM.js.gz +0 -0
  29. package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js +1 -0
  30. package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js.br +0 -0
  31. package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js.gz +0 -0
  32. package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js +1 -0
  33. package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js.br +0 -0
  34. package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js.gz +0 -0
  35. package/dist/_frontend/assets/{SettingsBuilder-GISAH2WU-2fVa9yeg.js → SettingsBuilder-3OA4UCIM-AN2PJd1q.js} +2 -2
  36. package/dist/_frontend/assets/SettingsBuilder-3OA4UCIM-AN2PJd1q.js.br +0 -0
  37. package/dist/_frontend/assets/SettingsBuilder-3OA4UCIM-AN2PJd1q.js.gz +0 -0
  38. package/dist/_frontend/assets/{ShellRouteSync-EN33DUQ7-C280D67g.js → ShellRouteSync-J74MV23Q-CDk4uzrR.js} +1 -1
  39. package/dist/_frontend/assets/ShellRouteSync-J74MV23Q-CDk4uzrR.js.br +0 -0
  40. package/dist/_frontend/assets/ShellRouteSync-J74MV23Q-CDk4uzrR.js.gz +0 -0
  41. package/dist/_frontend/assets/{SidebarLayout-35K4AKTC-0-Mjo6gf.js → SidebarLayout-EQXQPYIU-zWCTPIcp.js} +2 -2
  42. package/dist/_frontend/assets/SidebarLayout-EQXQPYIU-zWCTPIcp.js.br +0 -0
  43. package/dist/_frontend/assets/SidebarLayout-EQXQPYIU-zWCTPIcp.js.gz +0 -0
  44. package/dist/_frontend/assets/{SkillSettings-JSX2BTII-BriJH4Oj.js → SkillSettings-KQ6GQ7JW-oZVHsKV_.js} +1 -1
  45. package/dist/_frontend/assets/SkillSettings-KQ6GQ7JW-oZVHsKV_.js.br +0 -0
  46. package/dist/_frontend/assets/SkillSettings-KQ6GQ7JW-oZVHsKV_.js.gz +0 -0
  47. package/dist/_frontend/assets/TrueForgeUIWithRouter-R3UXQZRY-wD0P6NXT.js +1 -0
  48. package/dist/_frontend/assets/{WidgetLayout-RKBSN2FZ-u6iVYu3w.js → WidgetLayout-YWZTYFZL-BgYVWW8O.js} +1 -1
  49. package/dist/_frontend/assets/WidgetLayout-YWZTYFZL-BgYVWW8O.js.br +0 -0
  50. package/dist/_frontend/assets/WidgetLayout-YWZTYFZL-BgYVWW8O.js.gz +0 -0
  51. package/dist/_frontend/assets/{chunk-73FQVITT-mgvTPDmd.js → chunk-4MCIDE2C-ClJFqC75.js} +1 -1
  52. package/dist/_frontend/assets/chunk-4MCIDE2C-ClJFqC75.js.br +0 -0
  53. package/dist/_frontend/assets/chunk-4MCIDE2C-ClJFqC75.js.gz +0 -0
  54. package/dist/_frontend/assets/{chunk-62JRHF6Z-DYrEQoq5.js → chunk-62JRHF6Z-CXLsU_my.js} +1 -1
  55. package/dist/_frontend/assets/chunk-62JRHF6Z-CXLsU_my.js.br +0 -0
  56. package/dist/_frontend/assets/chunk-62JRHF6Z-CXLsU_my.js.gz +0 -0
  57. package/dist/_frontend/assets/{chunk-LUG7E6BL-QKvrInc2.js → chunk-7NYDADYN-_y_WJnHd.js} +1 -1
  58. package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js.br +0 -0
  59. package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js.gz +0 -0
  60. package/dist/_frontend/assets/{chunk-GIPFF6FZ-DPTdcXQj.js → chunk-ZZB3JIBQ-EN4V28Ji.js} +2 -2
  61. package/dist/_frontend/assets/chunk-ZZB3JIBQ-EN4V28Ji.js.br +0 -0
  62. package/dist/_frontend/assets/chunk-ZZB3JIBQ-EN4V28Ji.js.gz +0 -0
  63. package/dist/_frontend/assets/{cssMode-BNfxrwWp.js → cssMode-Dk1ChNt4.js} +1 -1
  64. package/dist/_frontend/assets/cssMode-Dk1ChNt4.js.br +0 -0
  65. package/dist/_frontend/assets/cssMode-Dk1ChNt4.js.gz +0 -0
  66. package/dist/_frontend/assets/{freemarker2-ClbLzW-k.js → freemarker2-D_Yi-Euz.js} +1 -1
  67. package/dist/_frontend/assets/freemarker2-D_Yi-Euz.js.br +0 -0
  68. package/dist/_frontend/assets/freemarker2-D_Yi-Euz.js.gz +0 -0
  69. package/dist/_frontend/assets/{handlebars-5nE6yTDt.js → handlebars-Cm_UQxos.js} +1 -1
  70. package/dist/_frontend/assets/handlebars-Cm_UQxos.js.br +0 -0
  71. package/dist/_frontend/assets/handlebars-Cm_UQxos.js.gz +0 -0
  72. package/dist/_frontend/assets/{html-BZRf7Zhg.js → html-BIx_CMMA.js} +1 -1
  73. package/dist/_frontend/assets/html-BIx_CMMA.js.br +0 -0
  74. package/dist/_frontend/assets/html-BIx_CMMA.js.gz +0 -0
  75. package/dist/_frontend/assets/{htmlMode-C6O73C_r.js → htmlMode-D7eeA6bm.js} +1 -1
  76. package/dist/_frontend/assets/htmlMode-D7eeA6bm.js.br +0 -0
  77. package/dist/_frontend/assets/htmlMode-D7eeA6bm.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-DBjak9Sg.js → index-BJUe77Ib.js} +3 -3
  82. package/dist/_frontend/assets/index-BJUe77Ib.js.br +0 -0
  83. package/dist/_frontend/assets/index-BJUe77Ib.js.gz +0 -0
  84. package/dist/_frontend/assets/index-Y_4XXAao.js +933 -0
  85. package/dist/_frontend/assets/index-Y_4XXAao.js.br +0 -0
  86. package/dist/_frontend/assets/index-Y_4XXAao.js.gz +0 -0
  87. package/dist/_frontend/assets/{index-D0Yf366e.js → index-uWXj7DW5.js} +1 -1
  88. package/dist/_frontend/assets/index-uWXj7DW5.js.br +0 -0
  89. package/dist/_frontend/assets/index-uWXj7DW5.js.gz +0 -0
  90. package/dist/_frontend/assets/{javascript-CrSAQdU4.js → javascript-CHojKZO8.js} +1 -1
  91. package/dist/_frontend/assets/{jsonMode-Dal25yu2.js → jsonMode-BTk9mIUo.js} +1 -1
  92. package/dist/_frontend/assets/jsonMode-BTk9mIUo.js.br +0 -0
  93. package/dist/_frontend/assets/jsonMode-BTk9mIUo.js.gz +0 -0
  94. package/dist/_frontend/assets/{liquid-Ci7gjLGv.js → liquid-M5ngFTv5.js} +1 -1
  95. package/dist/_frontend/assets/liquid-M5ngFTv5.js.br +0 -0
  96. package/dist/_frontend/assets/liquid-M5ngFTv5.js.gz +0 -0
  97. package/dist/_frontend/assets/{lspLanguageFeatures-rM-QiA57.js → lspLanguageFeatures-jPhJA8WX.js} +1 -1
  98. package/dist/_frontend/assets/lspLanguageFeatures-jPhJA8WX.js.br +0 -0
  99. package/dist/_frontend/assets/lspLanguageFeatures-jPhJA8WX.js.gz +0 -0
  100. package/dist/_frontend/assets/{mdx-J3rSuJw4.js → mdx-DmyHsr0E.js} +1 -1
  101. package/dist/_frontend/assets/mdx-DmyHsr0E.js.br +0 -0
  102. package/dist/_frontend/assets/mdx-DmyHsr0E.js.gz +0 -0
  103. package/dist/_frontend/assets/{python-BSpXGEco.js → python-BRFA9b-I.js} +1 -1
  104. package/dist/_frontend/assets/python-BRFA9b-I.js.br +0 -0
  105. package/dist/_frontend/assets/python-BRFA9b-I.js.gz +0 -0
  106. package/dist/_frontend/assets/{razor-DLV1uhEc.js → razor-CYsS4Kjw.js} +1 -1
  107. package/dist/_frontend/assets/razor-CYsS4Kjw.js.br +0 -0
  108. package/dist/_frontend/assets/razor-CYsS4Kjw.js.gz +0 -0
  109. package/dist/_frontend/assets/{tsMode-CQqRu3mP.js → tsMode-COQtB6OT.js} +1 -1
  110. package/dist/_frontend/assets/tsMode-COQtB6OT.js.br +0 -0
  111. package/dist/_frontend/assets/tsMode-COQtB6OT.js.gz +0 -0
  112. package/dist/_frontend/assets/{typescript-BExfm66c.js → typescript-B3uUksf0.js} +1 -1
  113. package/dist/_frontend/assets/typescript-B3uUksf0.js.br +0 -0
  114. package/dist/_frontend/assets/typescript-B3uUksf0.js.gz +0 -0
  115. package/dist/_frontend/assets/{workers-Cn25A5Lb.js → workers-CgLq606Q.js} +1 -1
  116. package/dist/_frontend/assets/workers-CgLq606Q.js.br +0 -0
  117. package/dist/_frontend/assets/workers-CgLq606Q.js.gz +0 -0
  118. package/dist/_frontend/assets/{xml-D2IDD-hb.js → xml-YO228FLn.js} +1 -1
  119. package/dist/_frontend/assets/xml-YO228FLn.js.br +0 -0
  120. package/dist/_frontend/assets/xml-YO228FLn.js.gz +0 -0
  121. package/dist/_frontend/assets/{yaml-CY4c2A0Y.js → yaml-CirMKB9x.js} +1 -1
  122. package/dist/_frontend/assets/yaml-CirMKB9x.js.br +0 -0
  123. package/dist/_frontend/assets/yaml-CirMKB9x.js.gz +0 -0
  124. package/dist/_frontend/index.html +2 -2
  125. package/dist/controller-main.js +101 -108
  126. package/dist/controller-main.js.map +1 -1
  127. package/dist/main.js +471 -282
  128. package/dist/main.js.map +1 -1
  129. package/package.json +2 -2
  130. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.br +0 -0
  131. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.gz +0 -0
  132. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js +0 -1
  133. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.br +0 -0
  134. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.gz +0 -0
  135. package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.br +0 -0
  136. package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.gz +0 -0
  137. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.br +0 -0
  138. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.gz +0 -0
  139. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.br +0 -0
  140. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.gz +0 -0
  141. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js +0 -1
  142. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.br +0 -0
  143. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.gz +0 -0
  144. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.br +0 -0
  145. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.gz +0 -0
  146. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.br +0 -0
  147. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.gz +0 -0
  148. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.br +0 -0
  149. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.gz +0 -0
  150. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js +0 -1
  151. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.br +0 -0
  152. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.gz +0 -0
  153. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js +0 -1
  154. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.br +0 -0
  155. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.gz +0 -0
  156. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.br +0 -0
  157. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.gz +0 -0
  158. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.br +0 -0
  159. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.gz +0 -0
  160. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.br +0 -0
  161. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.gz +0 -0
  162. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.br +0 -0
  163. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.gz +0 -0
  164. package/dist/_frontend/assets/TrueForgeUIWithRouter-6VCR7ES3-CtIaYnA8.js +0 -1
  165. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.br +0 -0
  166. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.gz +0 -0
  167. package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.br +0 -0
  168. package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.gz +0 -0
  169. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.br +0 -0
  170. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.gz +0 -0
  171. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.br +0 -0
  172. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.gz +0 -0
  173. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.br +0 -0
  174. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.gz +0 -0
  175. package/dist/_frontend/assets/cssMode-BNfxrwWp.js.br +0 -0
  176. package/dist/_frontend/assets/cssMode-BNfxrwWp.js.gz +0 -0
  177. package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.br +0 -0
  178. package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.gz +0 -0
  179. package/dist/_frontend/assets/handlebars-5nE6yTDt.js.br +0 -0
  180. package/dist/_frontend/assets/handlebars-5nE6yTDt.js.gz +0 -0
  181. package/dist/_frontend/assets/html-BZRf7Zhg.js.br +0 -0
  182. package/dist/_frontend/assets/html-BZRf7Zhg.js.gz +0 -0
  183. package/dist/_frontend/assets/htmlMode-C6O73C_r.js.br +0 -0
  184. package/dist/_frontend/assets/htmlMode-C6O73C_r.js.gz +0 -0
  185. package/dist/_frontend/assets/index-BBGLYdJn.css.br +0 -0
  186. package/dist/_frontend/assets/index-D0Yf366e.js.br +0 -0
  187. package/dist/_frontend/assets/index-D0Yf366e.js.gz +0 -0
  188. package/dist/_frontend/assets/index-DBjak9Sg.js.br +0 -0
  189. package/dist/_frontend/assets/index-DBjak9Sg.js.gz +0 -0
  190. package/dist/_frontend/assets/index-XpZpj5Rl.js +0 -933
  191. package/dist/_frontend/assets/index-XpZpj5Rl.js.br +0 -0
  192. package/dist/_frontend/assets/index-XpZpj5Rl.js.gz +0 -0
  193. package/dist/_frontend/assets/jsonMode-Dal25yu2.js.br +0 -0
  194. package/dist/_frontend/assets/jsonMode-Dal25yu2.js.gz +0 -0
  195. package/dist/_frontend/assets/liquid-Ci7gjLGv.js.br +0 -0
  196. package/dist/_frontend/assets/liquid-Ci7gjLGv.js.gz +0 -0
  197. package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.br +0 -0
  198. package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.gz +0 -0
  199. package/dist/_frontend/assets/mdx-J3rSuJw4.js.br +0 -0
  200. package/dist/_frontend/assets/mdx-J3rSuJw4.js.gz +0 -0
  201. package/dist/_frontend/assets/python-BSpXGEco.js.br +0 -0
  202. package/dist/_frontend/assets/python-BSpXGEco.js.gz +0 -0
  203. package/dist/_frontend/assets/razor-DLV1uhEc.js.br +0 -0
  204. package/dist/_frontend/assets/razor-DLV1uhEc.js.gz +0 -0
  205. package/dist/_frontend/assets/tsMode-CQqRu3mP.js.br +0 -0
  206. package/dist/_frontend/assets/tsMode-CQqRu3mP.js.gz +0 -0
  207. package/dist/_frontend/assets/typescript-BExfm66c.js.br +0 -0
  208. package/dist/_frontend/assets/typescript-BExfm66c.js.gz +0 -0
  209. package/dist/_frontend/assets/workers-Cn25A5Lb.js.br +0 -0
  210. package/dist/_frontend/assets/workers-Cn25A5Lb.js.gz +0 -0
  211. package/dist/_frontend/assets/xml-D2IDD-hb.js.br +0 -0
  212. package/dist/_frontend/assets/xml-D2IDD-hb.js.gz +0 -0
  213. package/dist/_frontend/assets/yaml-CY4c2A0Y.js.br +0 -0
  214. package/dist/_frontend/assets/yaml-CY4c2A0Y.js.gz +0 -0
package/dist/main.js CHANGED
@@ -11,6 +11,7 @@ var __export = (target, all) => {
11
11
  // src/config.ts
12
12
  var config_exports = {};
13
13
  __export(config_exports, {
14
+ STANDALONE_TRUEFORGE_API_KEY: () => STANDALONE_TRUEFORGE_API_KEY,
14
15
  TrueForgeAuthMode: () => TrueForgeAuthMode,
15
16
  default: () => config_default,
16
17
  getPublicBaseUrl: () => getPublicBaseUrl,
@@ -281,7 +282,7 @@ function getPublicUiBasePath(config = configuration) {
281
282
  const path7 = new URL(publicBaseUrl).pathname;
282
283
  return path7 === "/" ? "/" : `${path7}/`;
283
284
  }
284
- var DEFAULT_PORT, DEFAULT_HOST, DEFAULT_MAX_REQUEST_BODY_BYTES, PACKAGE_ROOT, LOCAL_EXECUTOR_ID, ENV_PATHS_APP_NAME, DEFAULT_POSTGRES_USER, DEFAULT_POSTGRES_PASSWORD, DEFAULT_POSTGRES_DB, DEFAULT_POSTGRES_HOST, DEFAULT_POSTGRES_PORT, DEFAULT_REDIS_URL, DEFAULT_OIDC_USER_REFERENCE_CLAIM, DEFAULT_OIDC_USER_DISPLAY_NAME_CLAIM, DEFAULT_OIDC_USER_ROLE_CLAIM, DEFAULT_OIDC_ADMIN_ROLE_VALUE, DEFAULT_OIDC_SCOPES, serverExecutionTimeoutSeconds, standalone, appDataDirSuffix, appDataDir, port, host, shared, configuration, TrueForgeAuthMode, config_default;
285
+ var DEFAULT_PORT, DEFAULT_HOST, DEFAULT_MAX_REQUEST_BODY_BYTES, PACKAGE_ROOT, LOCAL_EXECUTOR_ID, ENV_PATHS_APP_NAME, DEFAULT_POSTGRES_USER, DEFAULT_POSTGRES_PASSWORD, DEFAULT_POSTGRES_DB, DEFAULT_POSTGRES_HOST, DEFAULT_POSTGRES_PORT, DEFAULT_REDIS_URL, STANDALONE_TRUEFORGE_API_KEY, DEFAULT_OIDC_USER_REFERENCE_CLAIM, DEFAULT_OIDC_USER_DISPLAY_NAME_CLAIM, DEFAULT_OIDC_USER_ROLE_CLAIM, DEFAULT_OIDC_ADMIN_ROLE_VALUE, DEFAULT_OIDC_SCOPES, serverExecutionTimeoutSeconds, standalone, appDataDirSuffix, appDataDir, port, host, shared, configuration, TrueForgeAuthMode, config_default;
285
286
  var init_config = __esm({
286
287
  "src/config.ts"() {
287
288
  "use strict";
@@ -297,6 +298,7 @@ var init_config = __esm({
297
298
  DEFAULT_POSTGRES_HOST = "localhost";
298
299
  DEFAULT_POSTGRES_PORT = 5432;
299
300
  DEFAULT_REDIS_URL = "redis://localhost:6379";
301
+ STANDALONE_TRUEFORGE_API_KEY = "trueforge-standalone";
300
302
  DEFAULT_OIDC_USER_REFERENCE_CLAIM = "sub";
301
303
  DEFAULT_OIDC_USER_DISPLAY_NAME_CLAIM = "name";
302
304
  DEFAULT_OIDC_USER_ROLE_CLAIM = "groups";
@@ -392,6 +394,7 @@ var init_config = __esm({
392
394
  }),
393
395
  PUBLIC_BASE_URL: parsePublicBaseUrl(getEnv("PUBLIC_BASE_URL", { defaultValue: "" })),
394
396
  SERVER_URL: getEnv("SERVER_URL", { defaultValue: `http://localhost:${String(port)}` }) ?? `http://localhost:${String(port)}`,
397
+ TRUEFORGE_API_KEY: standalone ? getEnv("TRUEFORGE_API_KEY", { defaultValue: STANDALONE_TRUEFORGE_API_KEY }) ?? STANDALONE_TRUEFORGE_API_KEY : getEnv("TRUEFORGE_API_KEY", { required: true }) ?? "",
395
398
  TRUEFORGE_MTLS_ENABLED: parseBoolean({
396
399
  envKey: "TRUEFORGE_MTLS_ENABLED",
397
400
  raw: getEnv("TRUEFORGE_MTLS_ENABLED"),
@@ -499,6 +502,9 @@ var init_config = __esm({
499
502
  }
500
503
  }
501
504
  }
505
+ if (!configuration.STANDALONE && configuration.TRUEFORGE_API_KEY.trim() === "") {
506
+ throw new Error("TRUEFORGE_API_KEY must not be empty when STANDALONE=false.");
507
+ }
502
508
  config_default = configuration;
503
509
  }
504
510
  });
@@ -3860,7 +3866,7 @@ var init_mcpServerStore = __esm({
3860
3866
  // src/schemas/schedule.ts
3861
3867
  import { z as z24 } from "@hono/zod-openapi";
3862
3868
  import { CreatedBySubjectSchema as CreatedBySubjectSchema4, TokenPaginationSchema } from "@truefoundry/trueforge-core/agent-session";
3863
- 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;
3869
+ 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;
3864
3870
  var init_schedule = __esm({
3865
3871
  "src/schemas/schedule.ts"() {
3866
3872
  "use strict";
@@ -3941,6 +3947,9 @@ var init_schedule = __esm({
3941
3947
  schedule_id: z24.string().min(1).max(64).describe("Immutable schedule identifier.")
3942
3948
  }).strict().describe("Trigger an immediate run for the given schedule. The task is taken from the schedule manifest.").openapi("CreateScheduleRunRequest");
3943
3949
  CreateScheduleRunResponseSchema = z24.object({ data: ScheduleRunSchema }).openapi("CreateScheduleRunResponse");
3950
+ ExecuteScheduleRunRequestSchema = z24.object({
3951
+ schedule_run_id: z24.string().min(1).max(64).describe("Immutable schedule run identifier.")
3952
+ }).strict().openapi("ExecuteScheduleRunRequest");
3944
3953
  }
3945
3954
  });
3946
3955
 
@@ -6981,6 +6990,11 @@ var init_SqliteScheduleStore = __esm({
6981
6990
  const row = await db.selectFrom("schedule_run").select(runColumns).where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).executeTakeFirst();
6982
6991
  return row === void 0 ? void 0 : toRunRecord(row);
6983
6992
  }
6993
+ async getRunById(input, transaction) {
6994
+ const db = transaction ?? this.#db;
6995
+ const row = await db.selectFrom("schedule_run").select(runColumns).where("id", "=", input.id).executeTakeFirst();
6996
+ return row === void 0 ? void 0 : toRunRecord(row);
6997
+ }
6984
6998
  async getScheduledRunFor(input, transaction) {
6985
6999
  const db = transaction ?? this.#db;
6986
7000
  const row = await db.selectFrom("schedule_run").select(runColumns).where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).where("status", "=", "scheduled").executeTakeFirst();
@@ -7872,6 +7886,11 @@ var init_PostgresScheduleStore = __esm({
7872
7886
  const row = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).executeTakeFirst();
7873
7887
  return row === void 0 ? void 0 : toRunRecord2(row);
7874
7888
  }
7889
+ async getRunById(input, transaction) {
7890
+ const db = transaction ?? this.#db;
7891
+ const row = await db.selectFrom("schedule_run").selectAll().where("id", "=", input.id).executeTakeFirst();
7892
+ return row === void 0 ? void 0 : toRunRecord2(row);
7893
+ }
7875
7894
  async getScheduledRunFor(input, transaction) {
7876
7895
  const db = transaction ?? this.#db;
7877
7896
  const row = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).where("status", "=", "scheduled").executeTakeFirst();
@@ -7967,7 +7986,7 @@ import { swaggerUI } from "@hono/swagger-ui";
7967
7986
  import { OpenAPIHono as OpenAPIHono18, z as z35 } from "@hono/zod-openapi";
7968
7987
  import { extractErrorLogFields as extractErrorLogFields8 } from "@truefoundry/trueforge-core/core";
7969
7988
  import { bodyLimit } from "hono/body-limit";
7970
- import { HTTPException as HTTPException8 } from "hono/http-exception";
7989
+ import { HTTPException as HTTPException10 } from "hono/http-exception";
7971
7990
 
7972
7991
  // src/apis/agentImport.ts
7973
7992
  init_agentStore();
@@ -9068,6 +9087,87 @@ import { OpenAPIHono as OpenAPIHono2 } from "@hono/zod-openapi";
9068
9087
 
9069
9088
  // src/auth/identity.ts
9070
9089
  init_config();
9090
+
9091
+ // src/truefoundry/accessToken.ts
9092
+ import { HTTPException as HTTPException4 } from "hono/http-exception";
9093
+
9094
+ // src/truefoundry/errors.ts
9095
+ import { HTTPException as HTTPException3 } from "hono/http-exception";
9096
+ var AGENT_EXTERNAL_ID_REQUIRED = "Agent is missing a TrueFoundry external id";
9097
+ var TRUEFOUNDRY_MANAGED_STATUS = 424;
9098
+ var TRUEFOUNDRY_MANAGED_MESSAGE = "This resource is managed by TrueFoundry";
9099
+ function requireTrueFoundryAgentExternalId(agent) {
9100
+ if (agent.external_id === null) {
9101
+ throw new HTTPException3(500, { message: AGENT_EXTERNAL_ID_REQUIRED });
9102
+ }
9103
+ return agent.external_id;
9104
+ }
9105
+ function trueFoundryManaged() {
9106
+ throw new HTTPException3(TRUEFOUNDRY_MANAGED_STATUS, { message: TRUEFOUNDRY_MANAGED_MESSAGE });
9107
+ }
9108
+
9109
+ // src/truefoundry/accessToken.ts
9110
+ var accessTokenCache = /* @__PURE__ */ Symbol("truefoundryAccessTokenCache");
9111
+ function createTrueFoundryRequestContext(base) {
9112
+ return { ...base, [accessTokenCache]: /* @__PURE__ */ new Map() };
9113
+ }
9114
+ function isTrueFoundryRequestContext(context) {
9115
+ return accessTokenCache in context;
9116
+ }
9117
+ function asTrueFoundryRequestContext(context) {
9118
+ if (!isTrueFoundryRequestContext(context)) {
9119
+ throw new Error("TrueFoundry request context required for access token resolution");
9120
+ }
9121
+ return context;
9122
+ }
9123
+ function agentAccessToken(input) {
9124
+ const { client, requestContext: context } = input;
9125
+ const agentId = requireTrueFoundryAgentExternalId(input.agent);
9126
+ let pending;
9127
+ return () => {
9128
+ if (pending === void 0) {
9129
+ input.logger.info("Exchanging user context for agent access token", {
9130
+ subject: context.subject.id,
9131
+ agentId
9132
+ });
9133
+ pending = client.vendToken({ subject: context.subject, agentId, tenantName: context.tenant_id }).catch((error) => {
9134
+ pending = void 0;
9135
+ throw error;
9136
+ });
9137
+ }
9138
+ return pending;
9139
+ };
9140
+ }
9141
+ function callerAccessToken(context) {
9142
+ if (context.user_credential === null) {
9143
+ throw new HTTPException4(401, {
9144
+ message: "Authentication token required to list or call TrueFoundry models, MCP servers, skills, and agents"
9145
+ });
9146
+ }
9147
+ const token = context.user_credential;
9148
+ return () => Promise.resolve(token);
9149
+ }
9150
+ function accessTokenForRequest(input) {
9151
+ if (input.agent === void 0) {
9152
+ return callerAccessToken(input.requestContext);
9153
+ }
9154
+ const agentId = requireTrueFoundryAgentExternalId(input.agent);
9155
+ const cache = input.requestContext[accessTokenCache];
9156
+ const existing = cache.get(agentId);
9157
+ if (existing !== void 0) {
9158
+ return existing;
9159
+ }
9160
+ const resolveAgentAccessToken = agentAccessToken({
9161
+ client: input.client,
9162
+ requestContext: input.requestContext,
9163
+ agent: input.agent,
9164
+ logger: input.logger
9165
+ });
9166
+ cache.set(agentId, resolveAgentAccessToken);
9167
+ return resolveAgentAccessToken;
9168
+ }
9169
+
9170
+ // src/auth/identity.ts
9071
9171
  var STANDALONE_ADMIN_ROLE = "admin";
9072
9172
  var STANDALONE_REQUEST_CONTEXT = {
9073
9173
  tenant_id: "default",
@@ -9100,6 +9200,22 @@ function hasAdminRole(requestContext) {
9100
9200
  return requestContext.roles.includes(STANDALONE_ADMIN_ROLE);
9101
9201
  }
9102
9202
  }
9203
+ function requestSubjectFromCreatedBySubject(subject) {
9204
+ return {
9205
+ id: subject.subject_id,
9206
+ type: subject.subject_type,
9207
+ display_name: subject.subject_display_name
9208
+ };
9209
+ }
9210
+ function requestContextFromCreatedBySubject(params) {
9211
+ const base = {
9212
+ tenant_id: params.tenant_id,
9213
+ subject: requestSubjectFromCreatedBySubject(params.created_by_subject),
9214
+ roles: [],
9215
+ user_credential: null
9216
+ };
9217
+ return isTrueFoundryModeEnabled(config_default) ? createTrueFoundryRequestContext(base) : base;
9218
+ }
9103
9219
  function createdBySubjectFromRequestContext(ctx) {
9104
9220
  return {
9105
9221
  subject_id: ctx.subject.id,
@@ -9329,7 +9445,7 @@ import {
9329
9445
  Sandbox,
9330
9446
  SkillMounter
9331
9447
  } from "@truefoundry/trueforge-core/core";
9332
- import { HTTPException as HTTPException3 } from "hono/http-exception";
9448
+ import { HTTPException as HTTPException5 } from "hono/http-exception";
9333
9449
  import { join as join5 } from "path";
9334
9450
 
9335
9451
  // src/sandbox/providerUtils.ts
@@ -9515,7 +9631,7 @@ async function getModelDetails({
9515
9631
  }) {
9516
9632
  const parsed = parseModelFqn(name);
9517
9633
  if (parsed === void 0) {
9518
- throw new HTTPException3(422, {
9634
+ throw new HTTPException5(422, {
9519
9635
  message: `Model name must be a fully qualified "provider/model": ${name}`
9520
9636
  });
9521
9637
  }
@@ -9525,13 +9641,13 @@ async function getModelDetails({
9525
9641
  model_name: parsed.modelName
9526
9642
  });
9527
9643
  if (provider === void 0) {
9528
- throw new HTTPException3(422, {
9644
+ throw new HTTPException5(422, {
9529
9645
  message: `Unknown model "${name}" \u2014 provider not configured`
9530
9646
  });
9531
9647
  }
9532
9648
  const model = provider.manifest.models.find((entry) => entry.name === parsed.modelName);
9533
9649
  if (model === void 0) {
9534
- throw new HTTPException3(422, {
9650
+ throw new HTTPException5(422, {
9535
9651
  message: `Unknown model "${name}" \u2014 not configured on provider`
9536
9652
  });
9537
9653
  }
@@ -9626,7 +9742,7 @@ async function validateAgentSpec({
9626
9742
  if (reasoningEffort !== void 0) {
9627
9743
  const efforts = resolved.reasoningEfforts;
9628
9744
  if (!efforts?.some((effort) => effort === reasoningEffort)) {
9629
- throw new HTTPException3(422, {
9745
+ throw new HTTPException5(422, {
9630
9746
  message: efforts ? `Reasoning effort "${reasoningEffort}" is not supported by model "${spec.model.name}"` : `Model "${spec.model.name}" does not support configurable reasoning effort`
9631
9747
  });
9632
9748
  }
@@ -9642,7 +9758,7 @@ async function validateAgentSpec({
9642
9758
  );
9643
9759
  const unknown = requestedMcpServers.find((server) => !configuredNames.has(server.name));
9644
9760
  if (unknown !== void 0) {
9645
- throw new HTTPException3(422, {
9761
+ throw new HTTPException5(422, {
9646
9762
  message: `Unknown MCP server "${unknown.name}" \u2014 not configured`
9647
9763
  });
9648
9764
  }
@@ -9656,7 +9772,7 @@ async function validateAgentSpec({
9656
9772
  if (wantsSandbox || hasSkills) {
9657
9773
  const record = await sandboxProviderStore.getSandboxProvider(tenant_id);
9658
9774
  if (record === void 0 && !isLocalSandboxFallbackEnabled()) {
9659
- throw new HTTPException3(422, {
9775
+ throw new HTTPException5(422, {
9660
9776
  message: hasSkills ? "skills require a sandbox provider \u2014 configure via PUT /settings/sandbox-providers" : "sandbox is enabled but no sandbox provider is configured \u2014 PUT /settings/sandbox-providers"
9661
9777
  });
9662
9778
  }
@@ -9709,12 +9825,15 @@ async function canReadAgentBoundResource(input) {
9709
9825
  return managedAgentIds.includes(agent_id);
9710
9826
  }
9711
9827
 
9828
+ // src/apis/agentCodeSnippets.ts
9829
+ init_config();
9830
+
9712
9831
  // src/apis/codesnippet-templates/typescript.ts
9713
9832
  var typescriptStreamTemplate = `// npm install @truefoundry/trueforge-sdk
9714
9833
  import { TrueForge, TrueForgeApi, isEventDelta, mergeEventDelta } from "@truefoundry/trueforge-sdk";
9715
9834
 
9716
9835
  const client = new TrueForge({
9717
- baseUrl: {{baseUrl}},
9836
+ baseUrl: {{baseUrl}},{{tokenLine}}
9718
9837
  });
9719
9838
 
9720
9839
  const { data: session } = await client.sessions.create({
@@ -9741,7 +9860,7 @@ var typescriptNonStreamTemplate = `// npm install @truefoundry/trueforge-sdk
9741
9860
  import { TrueForge } from "@truefoundry/trueforge-sdk";
9742
9861
 
9743
9862
  const client = new TrueForge({
9744
- baseUrl: {{baseUrl}},
9863
+ baseUrl: {{baseUrl}},{{tokenLine}}
9745
9864
  });
9746
9865
 
9747
9866
  const { data: session } = await client.sessions.create({
@@ -9761,10 +9880,12 @@ console.log(latest.state);
9761
9880
 
9762
9881
  // src/apis/agentCodeSnippets.ts
9763
9882
  var TYPESCRIPT_ICON = "https://assets.production.truefoundry.com/typescript.svg";
9883
+ var TOKEN_LINE = '\n token: "USER_API_KEY",';
9764
9884
  function renderSnippetTemplate(template, vars) {
9765
9885
  const literals = {
9766
9886
  agentName: JSON.stringify(vars.agentName),
9767
- baseUrl: JSON.stringify(vars.baseUrl)
9887
+ baseUrl: JSON.stringify(vars.baseUrl),
9888
+ tokenLine: vars.includeToken ? TOKEN_LINE : ""
9768
9889
  };
9769
9890
  return template.replaceAll(/\{\{(\w+)\}\}/g, (match, key) => {
9770
9891
  const value = literals[key];
@@ -9775,6 +9896,8 @@ function renderSnippetTemplate(template, vars) {
9775
9896
  });
9776
9897
  }
9777
9898
  function buildAgentCodeSnippets(input) {
9899
+ const includeToken = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
9900
+ const vars = { ...input, includeToken };
9778
9901
  return {
9779
9902
  base_url: input.baseUrl,
9780
9903
  snippets: [
@@ -9783,8 +9906,8 @@ function buildAgentCodeSnippets(input) {
9783
9906
  language: "typescript",
9784
9907
  icon: TYPESCRIPT_ICON,
9785
9908
  sample_code: {
9786
- stream: renderSnippetTemplate(typescriptStreamTemplate, input),
9787
- non_stream: renderSnippetTemplate(typescriptNonStreamTemplate, input)
9909
+ stream: renderSnippetTemplate(typescriptStreamTemplate, vars),
9910
+ non_stream: renderSnippetTemplate(typescriptNonStreamTemplate, vars)
9788
9911
  }
9789
9912
  }
9790
9913
  ]
@@ -10017,7 +10140,7 @@ function readAccessTokenCookie(params) {
10017
10140
 
10018
10141
  // src/auth/middleware.ts
10019
10142
  init_config();
10020
- import { HTTPException as HTTPException4 } from "hono/http-exception";
10143
+ import { HTTPException as HTTPException6 } from "hono/http-exception";
10021
10144
  import { jwtVerify } from "jose";
10022
10145
 
10023
10146
  // src/auth/emailAllowlist.ts
@@ -10269,20 +10392,29 @@ function createAdminAuthMiddleware(authenticator) {
10269
10392
  return async (c, next) => {
10270
10393
  const requestContext = await authenticator.authenticate(c);
10271
10394
  if (!hasAdminRole(requestContext)) {
10272
- throw new HTTPException4(403, { message: "Admin access required" });
10395
+ throw new HTTPException6(403, { message: "Admin access required" });
10273
10396
  }
10274
10397
  c.set("request_context", requestContext);
10275
10398
  return next();
10276
10399
  };
10277
10400
  }
10401
+ function createApiKeyAuthMiddleware(apiKey) {
10402
+ return async (c, next) => {
10403
+ const token = readBearerToken(c);
10404
+ if (token === void 0 || token !== apiKey) {
10405
+ throw new HTTPException6(401, { message: "Invalid service credential" });
10406
+ }
10407
+ return next();
10408
+ };
10409
+ }
10278
10410
  var truefoundryAdminMiddleware = async (c, next) => {
10279
10411
  const token = extractRequestToken(c);
10280
10412
  if (config_default.STANDALONE) {
10281
- throw new HTTPException4(403, { message: "Service API key required" });
10413
+ throw new HTTPException6(403, { message: "Service API key required" });
10282
10414
  }
10283
10415
  const apiKey = config_default.TRUEFOUNDRY_API_KEY;
10284
10416
  if (apiKey === void 0 || token === void 0 || token !== apiKey) {
10285
- throw new HTTPException4(403, { message: "Service API key required" });
10417
+ throw new HTTPException6(403, { message: "Service API key required" });
10286
10418
  }
10287
10419
  c.set("request_context", {
10288
10420
  tenant_id: "system",
@@ -11434,7 +11566,7 @@ function createMcpOAuthRouter(deps) {
11434
11566
  // src/apis/mcpServers.ts
11435
11567
  import { OpenAPIHono as OpenAPIHono7 } from "@hono/zod-openapi";
11436
11568
  import { extractErrorLogFields as extractErrorLogFields5, isAuthRequired, McpConnectionError as McpConnectionError4, RemoteMCP } from "@truefoundry/trueforge-core/core";
11437
- import { HTTPException as HTTPException5 } from "hono/http-exception";
11569
+ import { HTTPException as HTTPException7 } from "hono/http-exception";
11438
11570
  init_config();
11439
11571
  init_mcpServerStore();
11440
11572
 
@@ -12009,7 +12141,7 @@ function createMcpServersRouter(deps) {
12009
12141
  });
12010
12142
  return c.json(authStatus, 200);
12011
12143
  } catch (error) {
12012
- if (error instanceof HTTPException5) {
12144
+ if (error instanceof HTTPException7) {
12013
12145
  throw error;
12014
12146
  }
12015
12147
  if (error instanceof McpServerNotFoundError) {
@@ -12289,10 +12421,14 @@ function createPermissionsRouter(deps) {
12289
12421
 
12290
12422
  // src/apis/schedules.ts
12291
12423
  import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
12292
- import { InvalidPageTokenError } from "@truefoundry/trueforge-core/agent-session";
12424
+ import {
12425
+ InvalidPageTokenError
12426
+ } from "@truefoundry/trueforge-core/agent-session";
12293
12427
 
12294
12428
  // src/controller/scheduleDispatch.ts
12429
+ init_config();
12295
12430
  init_scheduleStore();
12431
+ import { TrueForge } from "@truefoundry/trueforge-sdk";
12296
12432
  init_cron();
12297
12433
  init_schedule();
12298
12434
  var DISPATCH_BATCH_LIMIT = 20;
@@ -12301,6 +12437,20 @@ function scheduleRunFailureReason(error) {
12301
12437
  }
12302
12438
  var SCHEDULE_DISPATCH_INTERVAL_MS = 6e4;
12303
12439
  var SCHEDULE_DISPATCH_LOOP_NAME = "schedule-dispatch";
12440
+ function createHttpScheduleRunExecutor() {
12441
+ const tls = {
12442
+ enabled: config_default.TRUEFORGE_MTLS_ENABLED,
12443
+ dir: config_default.TRUEFORGE_MTLS_CERTS_DIR
12444
+ };
12445
+ const tlsFetch = createTlsFetch(tls);
12446
+ const client = new TrueForge({
12447
+ baseUrl: normalizeTlsUrl({ url: config_default.SERVER_URL, enabled: tls.enabled }),
12448
+ token: config_default.TRUEFORGE_API_KEY,
12449
+ timeoutInSeconds: 60,
12450
+ ...tlsFetch === void 0 ? {} : { fetch: tlsFetch }
12451
+ });
12452
+ return (scheduleRunId) => client.internal.schedules.executeRun({ scheduleRunId });
12453
+ }
12304
12454
  var ScheduleAgentNotFoundError = class extends Error {
12305
12455
  agent_name;
12306
12456
  constructor(agent_name, options) {
@@ -12309,29 +12459,23 @@ var ScheduleAgentNotFoundError = class extends Error {
12309
12459
  this.agent_name = agent_name;
12310
12460
  }
12311
12461
  };
12312
- function executeScheduledRun(client) {
12313
- return async ({ run, schedule }) => {
12314
- const { data: session } = await client.internal.sessions.getOrCreateByExternalId({
12315
- externalId: run.id,
12316
- agent: { name: schedule.agent_name },
12317
- source: { type: "schedule", id: schedule.id, runId: run.id }
12318
- });
12319
- const turns = await client.sessions.listTurns(session.id, { limit: 1 });
12320
- if (turns.data.length > 0) {
12321
- return;
12322
- }
12323
- await client.sessions.createTurn(session.id, {
12324
- input: [{ type: "user.message", content: schedule.manifest.task }],
12325
- previousTurnId: "none"
12326
- });
12327
- };
12328
- }
12462
+ var ScheduleRunNotFoundError = class extends Error {
12463
+ constructor(scheduleRunId, options) {
12464
+ super(`Schedule run not found: ${scheduleRunId}`, options);
12465
+ this.name = "ScheduleRunNotFoundError";
12466
+ }
12467
+ };
12468
+ var ScheduleNotFoundError = class extends Error {
12469
+ constructor(scheduleId, options) {
12470
+ super(`Schedule not found: ${scheduleId}`, options);
12471
+ this.name = "ScheduleNotFoundError";
12472
+ }
12473
+ };
12329
12474
  async function startScheduleRun(params) {
12330
12475
  const {
12331
12476
  item: { run, schedule },
12332
12477
  sessions,
12333
- agentStore,
12334
- startTurn
12478
+ agentStore
12335
12479
  } = params;
12336
12480
  const named = await agentStore.getAgent({ tenant_id: schedule.tenant_id, name: schedule.agent_name });
12337
12481
  if (named === void 0) {
@@ -12346,14 +12490,27 @@ async function startScheduleRun(params) {
12346
12490
  });
12347
12491
  const { data: turns } = await session.listTurns({ limit: 1 });
12348
12492
  if (turns.length > 0) {
12349
- return;
12493
+ return void 0;
12350
12494
  }
12351
- await startTurn({
12495
+ return {
12352
12496
  session,
12353
12497
  input: [{ type: "user.message", content: schedule.manifest.task }],
12354
12498
  previous_turn_id: "none",
12355
- userRef: schedule.created_by_subject.subject_id
12356
- });
12499
+ userRef: schedule.created_by_subject.subject_id,
12500
+ agent: named
12501
+ };
12502
+ }
12503
+ async function loadScheduleDispatchItem(params) {
12504
+ const { scheduleRunId, scheduleStore } = params;
12505
+ const run = await scheduleStore.getRunById({ id: scheduleRunId });
12506
+ if (run === void 0) {
12507
+ throw new ScheduleRunNotFoundError(scheduleRunId);
12508
+ }
12509
+ const schedule = await scheduleStore.getSchedule({ tenant_id: run.tenant_id, id: run.schedule_id });
12510
+ if (schedule === void 0) {
12511
+ throw new ScheduleNotFoundError(run.schedule_id);
12512
+ }
12513
+ return { run, schedule };
12357
12514
  }
12358
12515
  async function finishScheduledRun(params) {
12359
12516
  const { store, withTransaction, run, status, reason, now: now2 } = params;
@@ -12452,14 +12609,15 @@ async function dispatchScheduledRuns(params) {
12452
12609
  return { dispatched, failed };
12453
12610
  }
12454
12611
  function scheduleDispatchLoop(params) {
12455
- const { scheduleStore, client, withTransaction, logger } = params;
12612
+ const { scheduleStore, withTransaction, logger } = params;
12613
+ const executeRun = createHttpScheduleRunExecutor();
12456
12614
  return {
12457
12615
  name: SCHEDULE_DISPATCH_LOOP_NAME,
12458
12616
  intervalMs: SCHEDULE_DISPATCH_INTERVAL_MS,
12459
12617
  async tick(signal) {
12460
12618
  const result = await dispatchScheduledRuns({
12461
12619
  store: scheduleStore,
12462
- onTriggered: executeScheduledRun(client),
12620
+ onTriggered: (item) => executeRun(item.run.id),
12463
12621
  logger,
12464
12622
  withTransaction,
12465
12623
  signal
@@ -12604,6 +12762,36 @@ var createScheduleRunRoute = createRoute10({
12604
12762
  }
12605
12763
  }
12606
12764
  });
12765
+ var executeScheduleRunRoute = createRoute10({
12766
+ method: "post",
12767
+ path: "/runs/execute",
12768
+ tags: ["Internal" /* INTERNAL */],
12769
+ summary: "Execute a schedule run",
12770
+ description: "Execute a persisted schedule run using its saved schedule and agent.",
12771
+ "x-fern-sdk-group-name": ["internal", "schedules"],
12772
+ "x-fern-sdk-method-name": "execute_run",
12773
+ request: {
12774
+ body: {
12775
+ content: { "application/json": { schema: ExecuteScheduleRunRequestSchema } },
12776
+ required: true
12777
+ }
12778
+ },
12779
+ responses: {
12780
+ 204: { description: "Run executed or already has a turn." },
12781
+ 401: {
12782
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
12783
+ description: "Invalid service credential."
12784
+ },
12785
+ 404: {
12786
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
12787
+ description: "Run, schedule, or agent not found."
12788
+ },
12789
+ 422: {
12790
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
12791
+ description: "The run cannot be executed."
12792
+ }
12793
+ }
12794
+ });
12607
12795
  var createScheduleRoute = createRoute10({
12608
12796
  method: "post",
12609
12797
  path: "/",
@@ -12754,7 +12942,7 @@ import {
12754
12942
  SandboxError as SandboxError2,
12755
12943
  VercelAILLM
12756
12944
  } from "@truefoundry/trueforge-core/core";
12757
- import { HTTPException as HTTPException7 } from "hono/http-exception";
12945
+ import { HTTPException as HTTPException9 } from "hono/http-exception";
12758
12946
  import { streamSSE } from "hono/streaming";
12759
12947
 
12760
12948
  // src/routes/turnRoutes.ts
@@ -13758,14 +13946,14 @@ var StreamGoneError = class extends Error {
13758
13946
 
13759
13947
  // src/runtime/peeringIds.ts
13760
13948
  init_id();
13761
- import { HTTPException as HTTPException6 } from "hono/http-exception";
13949
+ import { HTTPException as HTTPException8 } from "hono/http-exception";
13762
13950
  function mintPeeredTurnId(executorId) {
13763
13951
  return `${newId()}.${executorId}`;
13764
13952
  }
13765
13953
  function executorFromTurnId(turnId) {
13766
13954
  const parts = turnId.split(".");
13767
13955
  if (parts.length !== 2 || !parts[0] || !parts[1]) {
13768
- throw new HTTPException6(400, { message: `ID ${turnId} is not a valid turn id` });
13956
+ throw new HTTPException8(400, { message: `ID ${turnId} is not a valid turn id` });
13769
13957
  }
13770
13958
  return parts[1];
13771
13959
  }
@@ -13859,7 +14047,7 @@ function createTurnResolver(deps) {
13859
14047
  userRef
13860
14048
  });
13861
14049
  if (connection === void 0) {
13862
- throw new HTTPException7(422, {
14050
+ throw new HTTPException9(422, {
13863
14051
  message: `Unknown MCP server "${name}" \u2014 not configured`
13864
14052
  });
13865
14053
  }
@@ -13875,7 +14063,7 @@ function createTurnResolver(deps) {
13875
14063
  sessionId
13876
14064
  });
13877
14065
  if (provider === void 0) {
13878
- throw new HTTPException7(422, {
14066
+ throw new HTTPException9(422, {
13879
14067
  message: "no sandbox provider configured \u2014 PUT /settings/sandbox-providers"
13880
14068
  });
13881
14069
  }
@@ -13886,7 +14074,7 @@ function createTurnResolver(deps) {
13886
14074
  if (carriedSandboxId === void 0 && provider.type !== "local") {
13887
14075
  const status = await checkSnapshotStatus({ store: sandboxProviderStore, tenant_id, logger });
13888
14076
  if (status?.status !== "ready") {
13889
- throw new HTTPException7(422, {
14077
+ throw new HTTPException9(422, {
13890
14078
  message: status?.status === "failed" ? `sandbox image build failed (${status.status_reason ?? "unknown error"})` : "sandbox image is activating \u2014 retry shortly"
13891
14079
  });
13892
14080
  }
@@ -13908,7 +14096,7 @@ function createTurnResolver(deps) {
13908
14096
  agent: async (agentId) => {
13909
14097
  const record = await agentStore.getAgent({ tenant_id, id: agentId });
13910
14098
  if (record === void 0) {
13911
- throw new HTTPException7(422, { message: `Agent not found: ${agentId}` });
14099
+ throw new HTTPException9(422, { message: `Agent not found: ${agentId}` });
13912
14100
  }
13913
14101
  return record.manifest;
13914
14102
  },
@@ -14040,7 +14228,7 @@ async function startTurnInProcess(params) {
14040
14228
  return turn;
14041
14229
  }
14042
14230
  function getTurnExecutionError(error) {
14043
- if (error instanceof HTTPException7) {
14231
+ if (error instanceof HTTPException9) {
14044
14232
  if (error.status === 400 || error.status === 404 || error.status === 422) {
14045
14233
  return { status: error.status, message: error.message };
14046
14234
  }
@@ -14069,7 +14257,7 @@ function resolveAfterSequenceNumber(c, bodyAfterSequenceNumber) {
14069
14257
  if (lastEventId) {
14070
14258
  const sequenceNumber = Number(lastEventId);
14071
14259
  if (!Number.isInteger(sequenceNumber) || sequenceNumber < 0) {
14072
- throw new HTTPException7(400, { message: "Invalid Last-Event-Id header" });
14260
+ throw new HTTPException9(400, { message: "Invalid Last-Event-Id header" });
14073
14261
  }
14074
14262
  return sequenceNumber;
14075
14263
  }
@@ -14353,7 +14541,7 @@ function createTurnsRouter(deps) {
14353
14541
  await turnEventStream.assertSubscribable();
14354
14542
  } catch (error) {
14355
14543
  if (error instanceof StreamGoneError) {
14356
- throw new HTTPException7(412, { message: error.message, cause: error });
14544
+ throw new HTTPException9(412, { message: error.message, cause: error });
14357
14545
  }
14358
14546
  throw error;
14359
14547
  }
@@ -14403,6 +14591,33 @@ function createTurnsRouter(deps) {
14403
14591
  }
14404
14592
 
14405
14593
  // src/apis/schedules.ts
14594
+ async function startScheduleRunOnRequest(params) {
14595
+ const { c, item, deps } = params;
14596
+ const prepared = await startScheduleRun({
14597
+ item,
14598
+ sessions: deps.sessions,
14599
+ agentStore: deps.agentStore
14600
+ });
14601
+ if (prepared === void 0) {
14602
+ return;
14603
+ }
14604
+ await startTurnInProcess({
14605
+ session: prepared.session,
14606
+ input: prepared.input,
14607
+ previous_turn_id: prepared.previous_turn_id,
14608
+ userRef: prepared.userRef,
14609
+ deps: {
14610
+ activeTurns: deps.activeTurns,
14611
+ eventSubscriptions: deps.eventSubscriptions,
14612
+ agentStore: deps.agentStore,
14613
+ modelProviderStore: deps.resolveModelProviderStore(c, prepared.agent),
14614
+ mcpServerStore: deps.resolveMcpServerStore(c, prepared.agent),
14615
+ sandboxProviderStore: deps.resolveSandboxProviderStore(c),
14616
+ skillStore: deps.turnSkillsResolverStore,
14617
+ logger: deps.logger
14618
+ }
14619
+ });
14620
+ }
14406
14621
  function toWireSchedule(record) {
14407
14622
  return {
14408
14623
  id: record.id,
@@ -14456,6 +14671,34 @@ var FORBIDDEN_SCHEDULE_ACCESS = "Only the schedule creator can access this sched
14456
14671
  function isScheduleOwner(requestContext, created_by_subject_id) {
14457
14672
  return requestContext.subject.id === created_by_subject_id;
14458
14673
  }
14674
+ function createScheduleExecutionRouter(deps) {
14675
+ const handler = async (c) => {
14676
+ const { schedule_run_id: scheduleRunId } = c.req.valid("json");
14677
+ try {
14678
+ const item = await loadScheduleDispatchItem({
14679
+ scheduleRunId,
14680
+ scheduleStore: deps.scheduleStore
14681
+ });
14682
+ c.set(
14683
+ "request_context",
14684
+ requestContextFromCreatedBySubject({
14685
+ tenant_id: item.schedule.tenant_id,
14686
+ created_by_subject: item.schedule.created_by_subject
14687
+ })
14688
+ );
14689
+ await startScheduleRunOnRequest({ c, item, deps });
14690
+ } catch (error) {
14691
+ if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
14692
+ return c.json({ error: { message: error.message } }, 404);
14693
+ }
14694
+ throw error;
14695
+ }
14696
+ return c.body(null, 204);
14697
+ };
14698
+ const router = new OpenAPIHono11();
14699
+ router.openapi(executeScheduleRunRoute, handler);
14700
+ return router;
14701
+ }
14459
14702
  function createSchedulesRouter(deps) {
14460
14703
  const listHandler = async (c) => {
14461
14704
  const { agent_names: agentNames, limit, page_token: pageToken, created_by_me: createdByMe } = c.req.valid("query");
@@ -14563,14 +14806,7 @@ function createSchedulesRouter(deps) {
14563
14806
  throw error;
14564
14807
  }
14565
14808
  try {
14566
- await startScheduleRun({
14567
- item: { run, schedule },
14568
- sessions: deps.sessions,
14569
- agentStore: deps.resolveAgentStore(c),
14570
- startTurn: async (turnParams) => {
14571
- await startTurnInProcess({ ...turnParams, deps: deps.resolveTurnDeps(c, agent) });
14572
- }
14573
- });
14809
+ await startScheduleRunOnRequest({ c, item: { run, schedule }, deps });
14574
14810
  } catch (error) {
14575
14811
  await deps.scheduleStore.updateRunStatus({
14576
14812
  tenant_id: requestContext.tenant_id,
@@ -14578,7 +14814,7 @@ function createSchedulesRouter(deps) {
14578
14814
  status: "failed",
14579
14815
  reason: scheduleRunFailureReason(error)
14580
14816
  });
14581
- if (error instanceof ScheduleAgentNotFoundError) {
14817
+ if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
14582
14818
  return c.json({ error: { message: error.message } }, 404);
14583
14819
  }
14584
14820
  const turnError = getTurnExecutionError(error);
@@ -15947,7 +16183,8 @@ function createAvailableSkillsRouter(deps) {
15947
16183
  });
15948
16184
  router.openapi(listSkillVersionsRoute, async (c) => {
15949
16185
  const { name } = c.req.valid("query");
15950
- return c.json({ data: await deps.resolveSkillStore(c).listSkillVersions({ name }) }, 200);
16186
+ const skillVersions = await deps.resolveSkillStore(c).listSkillVersions({ name });
16187
+ return c.json({ data: skillVersions }, 200);
15951
16188
  });
15952
16189
  return router;
15953
16190
  }
@@ -16073,7 +16310,7 @@ function createAppErrorHandler(params) {
16073
16310
  if (error instanceof InvalidCronError) {
16074
16311
  return c.json({ error: { message: error.message } }, 400);
16075
16312
  }
16076
- if (error instanceof HTTPException8) {
16313
+ if (error instanceof HTTPException10) {
16077
16314
  if (error.status >= 500) {
16078
16315
  params.logger.error("Server API error", {
16079
16316
  status: error.status,
@@ -16122,7 +16359,20 @@ function createServerApp(deps) {
16122
16359
  const app = new OpenAPIHono18({ defaultHook: zodValidationHook });
16123
16360
  const authMiddleware = createAuthMiddleware(deps.authenticator);
16124
16361
  const adminAuthMiddleware = createAdminAuthMiddleware(deps.authenticator);
16362
+ const scheduleExecutionAuthMiddleware = createApiKeyAuthMiddleware(config_default.TRUEFORGE_API_KEY);
16125
16363
  const authEnabled = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
16364
+ const scheduleTurnDeps = {
16365
+ scheduleStore: deps.scheduleStore,
16366
+ sessions: deps.sessions,
16367
+ agentStore: deps.agentStore,
16368
+ eventSubscriptions: deps.eventSubscriptions,
16369
+ logger: deps.logger,
16370
+ resolveModelProviderStore: deps.resolveModelProviderStore,
16371
+ resolveMcpServerStore: deps.resolveMcpServerStore,
16372
+ resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
16373
+ activeTurns: deps.activeTurns,
16374
+ turnSkillsResolverStore: deps.turnSkillsResolverStore
16375
+ };
16126
16376
  if (config_default.ACCESS_LOGS) {
16127
16377
  app.use("*", createAccessLogMiddleware(deps.logger));
16128
16378
  }
@@ -16222,23 +16472,16 @@ function createServerApp(deps) {
16222
16472
  authMiddleware
16223
16473
  )
16224
16474
  );
16475
+ app.route(
16476
+ "/api/internal/schedules",
16477
+ withAuth(createScheduleExecutionRouter(scheduleTurnDeps), scheduleExecutionAuthMiddleware)
16478
+ );
16225
16479
  app.route(
16226
16480
  "/api/v1/schedules",
16227
16481
  withAuth(
16228
16482
  createSchedulesRouter({
16229
- scheduleStore: deps.scheduleStore,
16483
+ ...scheduleTurnDeps,
16230
16484
  resolveAgentStore: deps.resolveAgentStore,
16231
- sessions: deps.sessions,
16232
- resolveTurnDeps: (c, runAsAgent) => ({
16233
- activeTurns: deps.activeTurns,
16234
- eventSubscriptions: deps.eventSubscriptions,
16235
- modelProviderStore: deps.resolveModelProviderStore(c, runAsAgent),
16236
- mcpServerStore: deps.resolveMcpServerStore(c, runAsAgent),
16237
- skillStore: deps.resolveSkillStore(c),
16238
- agentStore: deps.resolveAgentStore(c),
16239
- sandboxProviderStore: deps.resolveSandboxProviderStore(c),
16240
- logger: deps.logger
16241
- }),
16242
16485
  withTransaction: deps.withTransaction,
16243
16486
  resolveRequestContext,
16244
16487
  authorizer: deps.authorizer
@@ -16425,87 +16668,6 @@ init_config();
16425
16668
 
16426
16669
  // src/truefoundry/TrueFoundryAuthenticator.ts
16427
16670
  import { HTTPException as HTTPException11 } from "hono/http-exception";
16428
-
16429
- // src/truefoundry/accessToken.ts
16430
- import { HTTPException as HTTPException10 } from "hono/http-exception";
16431
-
16432
- // src/truefoundry/errors.ts
16433
- import { HTTPException as HTTPException9 } from "hono/http-exception";
16434
- var AGENT_EXTERNAL_ID_REQUIRED = "Agent is missing a TrueFoundry external id";
16435
- var TRUEFOUNDRY_MANAGED_STATUS = 424;
16436
- var TRUEFOUNDRY_MANAGED_MESSAGE = "This resource is managed by TrueFoundry";
16437
- function requireTrueFoundryAgentExternalId(agent) {
16438
- if (agent.external_id === null) {
16439
- throw new HTTPException9(500, { message: AGENT_EXTERNAL_ID_REQUIRED });
16440
- }
16441
- return agent.external_id;
16442
- }
16443
- function trueFoundryManaged() {
16444
- throw new HTTPException9(TRUEFOUNDRY_MANAGED_STATUS, { message: TRUEFOUNDRY_MANAGED_MESSAGE });
16445
- }
16446
-
16447
- // src/truefoundry/accessToken.ts
16448
- var accessTokenCache = /* @__PURE__ */ Symbol("truefoundryAccessTokenCache");
16449
- function createTrueFoundryRequestContext(base) {
16450
- return { ...base, [accessTokenCache]: /* @__PURE__ */ new Map() };
16451
- }
16452
- function isTrueFoundryRequestContext(context) {
16453
- return accessTokenCache in context;
16454
- }
16455
- function asTrueFoundryRequestContext(context) {
16456
- if (!isTrueFoundryRequestContext(context)) {
16457
- throw new Error("TrueFoundry request context required for access token resolution");
16458
- }
16459
- return context;
16460
- }
16461
- function agentAccessToken(input) {
16462
- const { client, context } = input;
16463
- const agentId = requireTrueFoundryAgentExternalId(input.agent);
16464
- let pending;
16465
- return () => {
16466
- if (pending === void 0) {
16467
- input.logger.info("Exchanging user context for agent access token", {
16468
- subject: context.subject.id,
16469
- agentId
16470
- });
16471
- pending = client.vendToken({ subject: context.subject, agentId, tenantName: context.tenant_id }).catch((error) => {
16472
- pending = void 0;
16473
- throw error;
16474
- });
16475
- }
16476
- return pending;
16477
- };
16478
- }
16479
- function callerAccessToken(context) {
16480
- if (context.user_credential === null) {
16481
- throw new HTTPException10(401, {
16482
- message: "Authentication token required to list or call TrueFoundry models, MCP servers, skills, and agents"
16483
- });
16484
- }
16485
- const token = context.user_credential;
16486
- return () => Promise.resolve(token);
16487
- }
16488
- function accessTokenForRequest(input) {
16489
- if (input.agent === void 0) {
16490
- return callerAccessToken(input.context);
16491
- }
16492
- const agentId = requireTrueFoundryAgentExternalId(input.agent);
16493
- const cache = input.context[accessTokenCache];
16494
- const existing = cache.get(agentId);
16495
- if (existing !== void 0) {
16496
- return existing;
16497
- }
16498
- const resolveAgentAccessToken = agentAccessToken({
16499
- client: input.client,
16500
- context: input.context,
16501
- agent: input.agent,
16502
- logger: input.logger
16503
- });
16504
- cache.set(agentId, resolveAgentAccessToken);
16505
- return resolveAgentAccessToken;
16506
- }
16507
-
16508
- // src/truefoundry/TrueFoundryAuthenticator.ts
16509
16671
  var TrueFoundryAuthenticator = class {
16510
16672
  #client;
16511
16673
  constructor(client) {
@@ -16839,9 +17001,6 @@ var SkillCatalog = class _SkillCatalog {
16839
17001
  // src/main.ts
16840
17002
  init_config();
16841
17003
 
16842
- // src/controller.ts
16843
- import { TrueForge } from "@truefoundry/trueforge-sdk";
16844
-
16845
17004
  // src/controller/Controller.ts
16846
17005
  var CONTROLLER_STOPPED = "controller-stopped";
16847
17006
  var Controller = class {
@@ -16937,28 +17096,16 @@ var Controller = class {
16937
17096
  };
16938
17097
 
16939
17098
  // src/controller.ts
16940
- function createScheduleApiClient(params) {
16941
- const baseUrl = normalizeTlsUrl({ url: params.baseUrl, enabled: params.tls.enabled });
16942
- const fetchImpl = createTlsFetch(params.tls);
16943
- return new TrueForge({
16944
- baseUrl,
16945
- auth: false,
16946
- ...fetchImpl !== void 0 ? { fetch: fetchImpl } : {}
16947
- });
16948
- }
16949
17099
  function createController(params) {
16950
- const { scheduleStore, withTransaction, logger, baseUrl } = params;
16951
- const tls = params.tls ?? { enabled: false, dir: "" };
16952
17100
  return new Controller({
16953
17101
  loops: [
16954
17102
  scheduleDispatchLoop({
16955
- scheduleStore,
16956
- client: createScheduleApiClient({ baseUrl, tls }),
16957
- withTransaction,
16958
- logger
17103
+ scheduleStore: params.scheduleStore,
17104
+ withTransaction: params.withTransaction,
17105
+ logger: params.logger
16959
17106
  })
16960
17107
  ],
16961
- logger
17108
+ logger: params.logger
16962
17109
  });
16963
17110
  }
16964
17111
 
@@ -17797,11 +17944,11 @@ var TrueFoundryMcpServerStore = class {
17797
17944
  this.#client = input.client;
17798
17945
  this.#resolveAccessToken = accessTokenForRequest({
17799
17946
  client: input.client,
17800
- context: asTrueFoundryRequestContext(input.context),
17947
+ requestContext: asTrueFoundryRequestContext(input.requestContext),
17801
17948
  agent: input.agent,
17802
17949
  logger: input.logger
17803
17950
  });
17804
- this.#subject = input.context.subject;
17951
+ this.#subject = input.requestContext.subject;
17805
17952
  this.#perServerHeaders = input.perServerHeaders ?? {};
17806
17953
  }
17807
17954
  /** Gateway Bearer (+ optional per-server overrides); SFY authorize first, else authRequired. */
@@ -17968,7 +18115,7 @@ var TrueFoundryModelProviderStore = class {
17968
18115
  this.#client = input.client;
17969
18116
  this.#resolveAccessToken = accessTokenForRequest({
17970
18117
  client: input.client,
17971
- context: asTrueFoundryRequestContext(input.context),
18118
+ requestContext: asTrueFoundryRequestContext(input.requestContext),
17972
18119
  agent: input.agent,
17973
18120
  logger: input.logger
17974
18121
  });
@@ -18217,10 +18364,60 @@ function toRegistryRecord(tenant_id, skill) {
18217
18364
  updated_at: now2
18218
18365
  };
18219
18366
  }
18220
- var TrueFoundrySkillStore = class {
18367
+ var TrueFoundryAdminSkillStore = class {
18368
+ #client;
18369
+ constructor(input) {
18370
+ this.#client = input.client;
18371
+ }
18372
+ async resolveTurnSkills(input) {
18373
+ const { skills } = input;
18374
+ if (skills.length === 0) {
18375
+ return [];
18376
+ }
18377
+ const resolved = await this.#client.resolveAgentSkillVersions({
18378
+ accessToken: this.#client.apiKey,
18379
+ skills: skills.map((skill) => ({
18380
+ fqn: skill.name,
18381
+ include_skill_md_content: skill.preload,
18382
+ include_presigned_url: true
18383
+ }))
18384
+ });
18385
+ const byFqn = new Map(resolved.map((row) => [row.fqn, row]));
18386
+ return skills.map((skill) => {
18387
+ const row = byFqn.get(skill.name);
18388
+ if (row === void 0) {
18389
+ throw new HTTPException18(422, {
18390
+ message: `Unknown skill "${skill.name}" \u2014 not configured`
18391
+ });
18392
+ }
18393
+ if (row.presigned_url === void 0) {
18394
+ throw new HTTPException18(422, {
18395
+ message: `Skill "${skill.name}" did not return a presigned URL`
18396
+ });
18397
+ }
18398
+ const skillMdContent = skill.preload ? row.skill_md_content ?? null : null;
18399
+ if (skill.preload && (skillMdContent === null || skillMdContent.length === 0)) {
18400
+ throw new HTTPException18(422, {
18401
+ message: `Skill "${skill.name}" did not return SKILL.md for preload`
18402
+ });
18403
+ }
18404
+ return {
18405
+ type: "registry",
18406
+ name: row.name,
18407
+ description: row.description,
18408
+ fqn: row.fqn,
18409
+ preload: skill.preload,
18410
+ skillMdContent,
18411
+ presignedUrl: row.presigned_url
18412
+ };
18413
+ });
18414
+ }
18415
+ };
18416
+ var TrueFoundrySkillStore = class extends TrueFoundryAdminSkillStore {
18221
18417
  #client;
18222
18418
  #resolveAccessToken;
18223
18419
  constructor(input) {
18420
+ super(input);
18224
18421
  this.#client = input.client;
18225
18422
  this.#resolveAccessToken = callerAccessToken(input.context);
18226
18423
  }
@@ -18299,49 +18496,6 @@ var TrueFoundrySkillStore = class {
18299
18496
  seenNames.add(row.name);
18300
18497
  }
18301
18498
  }
18302
- async resolveTurnSkills(input) {
18303
- const { skills } = input;
18304
- if (skills.length === 0) {
18305
- return [];
18306
- }
18307
- const resolved = await this.#client.resolveAgentSkillVersions({
18308
- accessToken: this.#client.apiKey,
18309
- skills: skills.map((skill) => ({
18310
- fqn: skill.name,
18311
- include_skill_md_content: skill.preload,
18312
- include_presigned_url: true
18313
- }))
18314
- });
18315
- const byFqn = new Map(resolved.map((row) => [row.fqn, row]));
18316
- return skills.map((skill) => {
18317
- const row = byFqn.get(skill.name);
18318
- if (row === void 0) {
18319
- throw new HTTPException18(422, {
18320
- message: `Unknown skill "${skill.name}" \u2014 not configured`
18321
- });
18322
- }
18323
- if (row.presigned_url === void 0) {
18324
- throw new HTTPException18(422, {
18325
- message: `Skill "${skill.name}" did not return a presigned URL`
18326
- });
18327
- }
18328
- const skillMdContent = skill.preload ? row.skill_md_content ?? null : null;
18329
- if (skill.preload && (skillMdContent === null || skillMdContent.length === 0)) {
18330
- throw new HTTPException18(422, {
18331
- message: `Skill "${skill.name}" did not return SKILL.md for preload`
18332
- });
18333
- }
18334
- return {
18335
- type: "registry",
18336
- name: row.name,
18337
- description: row.description,
18338
- fqn: row.fqn,
18339
- preload: skill.preload,
18340
- skillMdContent,
18341
- presignedUrl: row.presigned_url
18342
- };
18343
- });
18344
- }
18345
18499
  };
18346
18500
 
18347
18501
  // src/main.ts
@@ -18390,19 +18544,25 @@ function buildResolveSkillStore(options) {
18390
18544
  if (client === void 0) {
18391
18545
  return () => persistenceStore;
18392
18546
  }
18393
- return (c) => new TrueFoundrySkillStore({
18547
+ return (requestContext) => new TrueFoundrySkillStore({
18394
18548
  client,
18395
- context: resolveRequestContext(c)
18549
+ context: requestContext
18396
18550
  });
18397
18551
  }
18552
+ function buildTurnSkillsResolverStore(options) {
18553
+ const { persistenceStore, client } = options;
18554
+ if (client) {
18555
+ return new TrueFoundryAdminSkillStore({ client });
18556
+ }
18557
+ return persistenceStore;
18558
+ }
18398
18559
  function buildResolveModelProviderStore(options) {
18399
- return (c, runAsAgent) => {
18560
+ return (rc, runAsAgent) => {
18400
18561
  const { persistenceStore, client } = options;
18401
18562
  if (client) {
18402
- const requestContext = resolveRequestContext(c);
18403
18563
  return new TrueFoundryModelProviderStore({
18404
18564
  client,
18405
- context: requestContext,
18565
+ requestContext: rc,
18406
18566
  agent: runAsAgent,
18407
18567
  logger: options.logger
18408
18568
  });
@@ -18411,35 +18571,33 @@ function buildResolveModelProviderStore(options) {
18411
18571
  };
18412
18572
  }
18413
18573
  function buildResolveMcpServerStore(options) {
18414
- return (c, runAsAgent) => {
18415
- const { persistenceStore, tokenStore, client } = options;
18416
- if (c && client) {
18417
- const requestContext = resolveRequestContext(c);
18418
- const rawPerServerHeaders = c.req.header(X_TFG_MCP_HEADERS);
18574
+ const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
18575
+ store: options.persistenceStore,
18576
+ tokenStore: options.tokenStore,
18577
+ clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
18578
+ });
18579
+ return (rc, runAsAgent, perServerHeaders) => {
18580
+ const { client } = options;
18581
+ if (client) {
18419
18582
  return new TrueFoundryMcpServerStore({
18420
18583
  client,
18421
- context: requestContext,
18584
+ requestContext: rc,
18422
18585
  agent: runAsAgent,
18423
18586
  logger: options.logger,
18424
- perServerHeaders: rawPerServerHeaders ? parsePerServerMcpHeaders(rawPerServerHeaders) : {}
18587
+ ...perServerHeaders === void 0 ? {} : { perServerHeaders }
18425
18588
  });
18426
18589
  }
18427
- const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
18428
- store: persistenceStore,
18429
- tokenStore,
18430
- clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
18431
- });
18432
18590
  return withAuthMcpPersistenceStore;
18433
18591
  };
18434
18592
  }
18435
18593
  function buildResolveAgentStore(options) {
18436
18594
  const { persistenceStore, client, db } = options;
18437
- return (c) => {
18595
+ return (rc) => {
18438
18596
  if (client) {
18439
18597
  return new TrueFoundryAgentStore({
18440
18598
  inner: persistenceStore,
18441
18599
  client,
18442
- context: resolveRequestContext(c),
18600
+ context: rc,
18443
18601
  db
18444
18602
  });
18445
18603
  }
@@ -18448,11 +18606,10 @@ function buildResolveAgentStore(options) {
18448
18606
  }
18449
18607
  function buildResolveSandboxProviderStore(options) {
18450
18608
  const { persistenceStore } = options;
18451
- if (!isTrueFoundryModeEnabled2(configuration2)) {
18452
- return () => persistenceStore;
18609
+ if (isTrueFoundryModeEnabled2(configuration2)) {
18610
+ return () => new TrueFoundrySandboxProviderStore();
18453
18611
  }
18454
- const trueFoundryStore = new TrueFoundrySandboxProviderStore();
18455
- return () => trueFoundryStore;
18612
+ return () => persistenceStore;
18456
18613
  }
18457
18614
  async function createStandalonePersistence(options) {
18458
18615
  const { sqlitePath, logger } = options;
@@ -18498,20 +18655,23 @@ async function createStandalonePersistence(options) {
18498
18655
  const sandboxProviderStore = new SqliteSandboxProviderStore2(db);
18499
18656
  const skillStore = new SqliteSkillStore2(db);
18500
18657
  return {
18658
+ withTransaction: (callback) => db.transaction().execute(callback),
18501
18659
  sessionStore: new SqliteSessionStore2(db),
18502
18660
  sessionMetricsStore: new SqliteSessionMetricsStore2(db),
18661
+ mcpOAuthStore: mcpServerStore,
18662
+ tokenStore,
18663
+ scheduleStore: new SqliteScheduleStore2(db),
18503
18664
  resolveModelProviderStore: () => modelProviderStore,
18504
18665
  resolveMcpServerStore: () => mcpServerStore,
18666
+ resolveSandboxProviderStore: () => sandboxProviderStore,
18667
+ resolveSkillStore: () => skillStore,
18505
18668
  resolveAgentStore: () => agentStore,
18506
18669
  resolveImportAgentStore: () => agentStore,
18507
- resolveSandboxProviderStore: () => sandboxProviderStore,
18508
- withTransaction: (callback) => db.transaction().execute(callback),
18509
- tokenStore,
18510
- scheduleStore: new SqliteScheduleStore2(db),
18670
+ agentStore,
18671
+ turnSkillsResolverStore: skillStore,
18511
18672
  destroyDb: () => db.destroy(),
18512
18673
  redis: void 0,
18513
- serviceFoundryClient: void 0,
18514
- resolveSkillStore: () => skillStore
18674
+ serviceFoundryClient: void 0
18515
18675
  };
18516
18676
  }
18517
18677
  async function createDistributedPersistence(options) {
@@ -18560,11 +18720,22 @@ async function createDistributedPersistence(options) {
18560
18720
  await migrateToLatest2(db);
18561
18721
  logger.info("Distributed mode: postgres");
18562
18722
  logger.info(`Executor id: ${executorId}`);
18723
+ const serviceFoundryClient = createServiceFoundryServerClient(logger);
18563
18724
  const tokenStore = new PostgresOAuthTokenStore2(db);
18564
- const agentStore = new PostgresAgentStore3(db);
18565
18725
  const modelProviderStore = new PostgresModelProviderStore2(db);
18566
18726
  const mcpServerStore = new PostgresMcpServerStore2(db);
18567
- const serviceFoundryClient = createServiceFoundryServerClient(logger);
18727
+ const mcpServerWithAuthStore = new McpServerWithAuthStore({
18728
+ store: mcpServerStore,
18729
+ tokenStore,
18730
+ clientName: configuration3.MCP_DCR_OAUTH_CLIENT_NAME
18731
+ });
18732
+ const sandboxProviderStore = new PostgresSandboxProviderStore2(db);
18733
+ const skillStore = new PostgresSkillStore2(db);
18734
+ const agentStore = new PostgresAgentStore3(db);
18735
+ const turnSkillsResolverStore = buildTurnSkillsResolverStore({
18736
+ persistenceStore: skillStore,
18737
+ client: serviceFoundryClient
18738
+ });
18568
18739
  const resolveModelProviderStore = buildResolveModelProviderStore({
18569
18740
  persistenceStore: modelProviderStore,
18570
18741
  client: serviceFoundryClient,
@@ -18599,49 +18770,51 @@ async function createDistributedPersistence(options) {
18599
18770
  });
18600
18771
  };
18601
18772
  const resolveSandboxProviderStore = buildResolveSandboxProviderStore({
18602
- persistenceStore: new PostgresSandboxProviderStore2(db)
18773
+ persistenceStore: sandboxProviderStore
18774
+ });
18775
+ const resolveSkillStore = buildResolveSkillStore({
18776
+ persistenceStore: skillStore,
18777
+ client: serviceFoundryClient
18603
18778
  });
18604
- const skillStore = new PostgresSkillStore2(db);
18605
18779
  return {
18780
+ withTransaction: (callback) => db.transaction().execute(callback),
18606
18781
  sessionStore: new PostgresSessionStore2(db),
18607
18782
  sessionMetricsStore: new PostgresSessionMetricsStore2(db),
18783
+ mcpOAuthStore: mcpServerWithAuthStore,
18784
+ tokenStore,
18785
+ scheduleStore: new PostgresScheduleStore2(db),
18608
18786
  resolveModelProviderStore,
18609
18787
  resolveMcpServerStore,
18788
+ resolveSandboxProviderStore,
18789
+ resolveSkillStore,
18610
18790
  resolveAgentStore,
18611
18791
  resolveImportAgentStore,
18612
- resolveSandboxProviderStore,
18613
- withTransaction: (callback) => db.transaction().execute(callback),
18614
- tokenStore,
18615
- scheduleStore: new PostgresScheduleStore2(db),
18792
+ agentStore,
18793
+ turnSkillsResolverStore,
18616
18794
  destroyDb: () => db.destroy(),
18617
18795
  redis: await connectRedis2({ url: redisUrl, logger }),
18618
- serviceFoundryClient,
18619
- resolveSkillStore: buildResolveSkillStore({
18620
- persistenceStore: skillStore,
18621
- client: serviceFoundryClient
18622
- })
18796
+ serviceFoundryClient
18623
18797
  };
18624
18798
  }
18625
18799
  async function createServerRuntime(persistence, logger) {
18626
18800
  const {
18801
+ withTransaction,
18627
18802
  sessionStore,
18628
18803
  sessionMetricsStore,
18629
- resolveModelProviderStore,
18630
- resolveMcpServerStore,
18631
- resolveAgentStore,
18632
- resolveImportAgentStore,
18633
- resolveSandboxProviderStore,
18634
- withTransaction,
18635
18804
  tokenStore,
18636
18805
  scheduleStore,
18806
+ mcpOAuthStore,
18807
+ resolveImportAgentStore,
18808
+ agentStore,
18809
+ turnSkillsResolverStore,
18637
18810
  destroyDb,
18638
18811
  redis,
18639
- serviceFoundryClient,
18640
- resolveSkillStore
18812
+ serviceFoundryClient
18641
18813
  } = persistence;
18642
18814
  const activeTurns = new ActiveTurnRegistry();
18643
18815
  const requestReplyRouter = new RequestReplyRouter();
18644
18816
  const eventSubscriptions = new EventSubscriptionRegistry(redis);
18817
+ const sessions = new Sessions({ sessionStore });
18645
18818
  const oidc = isOidcConfigured2(configuration2) ? configuration2.OIDC : void 0;
18646
18819
  if (oidc) {
18647
18820
  logger.info("Auth is enabled", { issuer: oidc.OIDC_ISSUER_URL });
@@ -18671,9 +18844,23 @@ async function createServerRuntime(persistence, logger) {
18671
18844
  const controller = configuration2.STANDALONE ? createController({
18672
18845
  scheduleStore,
18673
18846
  withTransaction,
18674
- logger,
18675
- baseUrl: `http://localhost:${String(configuration2.PORT)}`
18847
+ logger
18676
18848
  }) : void 0;
18849
+ const resolveModelProviderStore = (c, runAsAgent) => persistence.resolveModelProviderStore(resolveRequestContext(c), runAsAgent);
18850
+ const resolveMcpServerStore = (c, runAsAgent) => {
18851
+ if (c === void 0) {
18852
+ return mcpOAuthStore;
18853
+ }
18854
+ const rawPerServerHeaders = c.req.header(X_TFG_MCP_HEADERS);
18855
+ return persistence.resolveMcpServerStore(
18856
+ resolveRequestContext(c),
18857
+ runAsAgent,
18858
+ rawPerServerHeaders === void 0 ? void 0 : parsePerServerMcpHeaders(rawPerServerHeaders)
18859
+ );
18860
+ };
18861
+ const resolveAgentStore = (c) => persistence.resolveAgentStore(resolveRequestContext(c));
18862
+ const resolveSandboxProviderStore = (c) => persistence.resolveSandboxProviderStore(resolveRequestContext(c));
18863
+ const resolveSkillStore = (c) => persistence.resolveSkillStore(resolveRequestContext(c));
18677
18864
  const app = createServerApp({
18678
18865
  modelCatalog: ModelCatalog.load(),
18679
18866
  mcpCatalog: McpCatalog.load(),
@@ -18684,12 +18871,15 @@ async function createServerRuntime(persistence, logger) {
18684
18871
  resolveAgentStore,
18685
18872
  resolveImportAgentStore,
18686
18873
  resolveSandboxProviderStore,
18874
+ resolveSkillStore,
18687
18875
  withTransaction,
18688
18876
  tokenStore,
18689
18877
  scheduleStore,
18878
+ agentStore,
18879
+ turnSkillsResolverStore,
18690
18880
  sessionStore,
18691
18881
  sessionMetricsStore,
18692
- sessions: new Sessions({ sessionStore }),
18882
+ sessions,
18693
18883
  activeTurns,
18694
18884
  redis,
18695
18885
  requestReplyRouter,
@@ -18697,8 +18887,7 @@ async function createServerRuntime(persistence, logger) {
18697
18887
  logger,
18698
18888
  oidcClient,
18699
18889
  authenticator,
18700
- authorizer,
18701
- resolveSkillStore
18890
+ authorizer
18702
18891
  });
18703
18892
  return { activeTurns, app, controller, destroyDb, redis, requestReplyRouter };
18704
18893
  }