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

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 (209) hide show
  1. package/dist/_frontend/assets/{AgentCodeSnippets-N546FNNS-DlWVvctF.js → AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js} +1 -1
  2. package/dist/_frontend/assets/AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js.br +0 -0
  3. package/dist/_frontend/assets/AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js.gz +0 -0
  4. package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js +1 -0
  5. package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js.br +0 -0
  6. package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js.gz +0 -0
  7. package/dist/_frontend/assets/{AgentOverview-VF74XC7I-DuR4GDFb.js → AgentOverview-RLJ6HZCN-YJvNjt8b.js} +1 -1
  8. package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js.br +0 -0
  9. package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js.gz +0 -0
  10. package/dist/_frontend/assets/{AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js → AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js} +1 -1
  11. package/dist/_frontend/assets/AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js.br +0 -0
  12. package/dist/_frontend/assets/AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js.gz +0 -0
  13. package/dist/_frontend/assets/{AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js → AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js} +1 -1
  14. package/dist/_frontend/assets/AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js.br +0 -0
  15. package/dist/_frontend/assets/AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js.gz +0 -0
  16. package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js +1 -0
  17. package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js.br +0 -0
  18. package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js.gz +0 -0
  19. package/dist/_frontend/assets/{ConnectorSettings-R5VEP7BO-Cvdqimeu.js → ConnectorSettings-OIGAC2HU-xm76mpmk.js} +1 -1
  20. package/dist/_frontend/assets/ConnectorSettings-OIGAC2HU-xm76mpmk.js.br +0 -0
  21. package/dist/_frontend/assets/ConnectorSettings-OIGAC2HU-xm76mpmk.js.gz +0 -0
  22. package/dist/_frontend/assets/{DockLayout-F44RWGEY-DVcqWNpi.js → DockLayout-J5BRKMJZ-xjQQzILb.js} +1 -1
  23. package/dist/_frontend/assets/{DrawerLayout-SQ323AVM-CrsDJpVR.js → DrawerLayout-65YHGHIF-CehQ0ZjJ.js} +2 -2
  24. package/dist/_frontend/assets/DrawerLayout-65YHGHIF-CehQ0ZjJ.js.br +0 -0
  25. package/dist/_frontend/assets/DrawerLayout-65YHGHIF-CehQ0ZjJ.js.gz +0 -0
  26. package/dist/_frontend/assets/{ModelSettings-6QLS63HM-B0omK7y_.js → ModelSettings-VP6WCMGT-DuhYOy95.js} +1 -1
  27. package/dist/_frontend/assets/ModelSettings-VP6WCMGT-DuhYOy95.js.br +0 -0
  28. package/dist/_frontend/assets/ModelSettings-VP6WCMGT-DuhYOy95.js.gz +0 -0
  29. package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js +1 -0
  30. package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js.br +0 -0
  31. package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js.gz +0 -0
  32. package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js +1 -0
  33. package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js.br +0 -0
  34. package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js.gz +0 -0
  35. package/dist/_frontend/assets/{SettingsBuilder-GISAH2WU-2fVa9yeg.js → SettingsBuilder-A4BPYIFZ-B4p1JpXq.js} +2 -2
  36. package/dist/_frontend/assets/SettingsBuilder-A4BPYIFZ-B4p1JpXq.js.br +0 -0
  37. package/dist/_frontend/assets/SettingsBuilder-A4BPYIFZ-B4p1JpXq.js.gz +0 -0
  38. package/dist/_frontend/assets/{ShellRouteSync-EN33DUQ7-C280D67g.js → ShellRouteSync-SSLGM35F-Cqt-1Q8u.js} +1 -1
  39. package/dist/_frontend/assets/ShellRouteSync-SSLGM35F-Cqt-1Q8u.js.br +0 -0
  40. package/dist/_frontend/assets/ShellRouteSync-SSLGM35F-Cqt-1Q8u.js.gz +0 -0
  41. package/dist/_frontend/assets/{SidebarLayout-35K4AKTC-0-Mjo6gf.js → SidebarLayout-MFDOGAVJ-pSgzH70r.js} +2 -2
  42. package/dist/_frontend/assets/SidebarLayout-MFDOGAVJ-pSgzH70r.js.br +0 -0
  43. package/dist/_frontend/assets/SidebarLayout-MFDOGAVJ-pSgzH70r.js.gz +0 -0
  44. package/dist/_frontend/assets/{SkillSettings-JSX2BTII-BriJH4Oj.js → SkillSettings-WQPUQ5TE-x17-_tYg.js} +1 -1
  45. package/dist/_frontend/assets/SkillSettings-WQPUQ5TE-x17-_tYg.js.br +0 -0
  46. package/dist/_frontend/assets/SkillSettings-WQPUQ5TE-x17-_tYg.js.gz +0 -0
  47. package/dist/_frontend/assets/TrueForgeUIWithRouter-5CDICMCE-DcMl1KUh.js +1 -0
  48. package/dist/_frontend/assets/{WidgetLayout-RKBSN2FZ-u6iVYu3w.js → WidgetLayout-HE7E4UL5-D_jC6D5-.js} +1 -1
  49. package/dist/_frontend/assets/WidgetLayout-HE7E4UL5-D_jC6D5-.js.br +0 -0
  50. package/dist/_frontend/assets/WidgetLayout-HE7E4UL5-D_jC6D5-.js.gz +0 -0
  51. package/dist/_frontend/assets/{chunk-73FQVITT-mgvTPDmd.js → chunk-2BDTG544-FxcOqFr-.js} +1 -1
  52. package/dist/_frontend/assets/chunk-2BDTG544-FxcOqFr-.js.br +0 -0
  53. package/dist/_frontend/assets/chunk-2BDTG544-FxcOqFr-.js.gz +0 -0
  54. package/dist/_frontend/assets/{chunk-62JRHF6Z-DYrEQoq5.js → chunk-62JRHF6Z-6aeTVQm8.js} +1 -1
  55. package/dist/_frontend/assets/chunk-62JRHF6Z-6aeTVQm8.js.br +0 -0
  56. package/dist/_frontend/assets/chunk-62JRHF6Z-6aeTVQm8.js.gz +0 -0
  57. package/dist/_frontend/assets/{chunk-LUG7E6BL-QKvrInc2.js → chunk-TGKQRK3S-D5Bs7icZ.js} +1 -1
  58. package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js.br +0 -0
  59. package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js.gz +0 -0
  60. package/dist/_frontend/assets/{chunk-GIPFF6FZ-DPTdcXQj.js → chunk-VXKNS7FH-Dm2ZAGlE.js} +2 -2
  61. package/dist/_frontend/assets/chunk-VXKNS7FH-Dm2ZAGlE.js.br +0 -0
  62. package/dist/_frontend/assets/chunk-VXKNS7FH-Dm2ZAGlE.js.gz +0 -0
  63. package/dist/_frontend/assets/{cssMode-BNfxrwWp.js → cssMode-BSK94pjD.js} +1 -1
  64. package/dist/_frontend/assets/cssMode-BSK94pjD.js.br +0 -0
  65. package/dist/_frontend/assets/cssMode-BSK94pjD.js.gz +0 -0
  66. package/dist/_frontend/assets/{freemarker2-ClbLzW-k.js → freemarker2-hYZ9lU-u.js} +1 -1
  67. package/dist/_frontend/assets/freemarker2-hYZ9lU-u.js.br +0 -0
  68. package/dist/_frontend/assets/freemarker2-hYZ9lU-u.js.gz +0 -0
  69. package/dist/_frontend/assets/{handlebars-5nE6yTDt.js → handlebars-CJdvCy_0.js} +1 -1
  70. package/dist/_frontend/assets/handlebars-CJdvCy_0.js.br +0 -0
  71. package/dist/_frontend/assets/handlebars-CJdvCy_0.js.gz +0 -0
  72. package/dist/_frontend/assets/{html-BZRf7Zhg.js → html-BHnJtaJv.js} +1 -1
  73. package/dist/_frontend/assets/html-BHnJtaJv.js.br +0 -0
  74. package/dist/_frontend/assets/html-BHnJtaJv.js.gz +0 -0
  75. package/dist/_frontend/assets/{htmlMode-C6O73C_r.js → htmlMode-BTNbHYXw.js} +1 -1
  76. package/dist/_frontend/assets/htmlMode-BTNbHYXw.js.br +0 -0
  77. package/dist/_frontend/assets/htmlMode-BTNbHYXw.js.gz +0 -0
  78. package/dist/_frontend/assets/{index-D0Yf366e.js → index-B1sBHguz.js} +1 -1
  79. package/dist/_frontend/assets/index-B1sBHguz.js.br +0 -0
  80. package/dist/_frontend/assets/index-B1sBHguz.js.gz +0 -0
  81. package/dist/_frontend/assets/{index-DBjak9Sg.js → index-BU6gYO7K.js} +3 -3
  82. package/dist/_frontend/assets/index-BU6gYO7K.js.br +0 -0
  83. package/dist/_frontend/assets/index-BU6gYO7K.js.gz +0 -0
  84. package/dist/_frontend/assets/{index-XpZpj5Rl.js → index-DZOZ1xN3.js} +240 -240
  85. package/dist/_frontend/assets/index-DZOZ1xN3.js.br +0 -0
  86. package/dist/_frontend/assets/index-DZOZ1xN3.js.gz +0 -0
  87. package/dist/_frontend/assets/{javascript-CrSAQdU4.js → javascript-BKY4Sujy.js} +1 -1
  88. package/dist/_frontend/assets/{jsonMode-Dal25yu2.js → jsonMode-B_jTSLwe.js} +1 -1
  89. package/dist/_frontend/assets/jsonMode-B_jTSLwe.js.br +0 -0
  90. package/dist/_frontend/assets/jsonMode-B_jTSLwe.js.gz +0 -0
  91. package/dist/_frontend/assets/{liquid-Ci7gjLGv.js → liquid-OVC8bSZr.js} +1 -1
  92. package/dist/_frontend/assets/liquid-OVC8bSZr.js.br +0 -0
  93. package/dist/_frontend/assets/liquid-OVC8bSZr.js.gz +0 -0
  94. package/dist/_frontend/assets/{lspLanguageFeatures-rM-QiA57.js → lspLanguageFeatures-BpQc31SX.js} +1 -1
  95. package/dist/_frontend/assets/lspLanguageFeatures-BpQc31SX.js.br +0 -0
  96. package/dist/_frontend/assets/lspLanguageFeatures-BpQc31SX.js.gz +0 -0
  97. package/dist/_frontend/assets/{mdx-J3rSuJw4.js → mdx-Rt-sDg8a.js} +1 -1
  98. package/dist/_frontend/assets/mdx-Rt-sDg8a.js.br +0 -0
  99. package/dist/_frontend/assets/mdx-Rt-sDg8a.js.gz +0 -0
  100. package/dist/_frontend/assets/{python-BSpXGEco.js → python-CLLuhWlP.js} +1 -1
  101. package/dist/_frontend/assets/python-CLLuhWlP.js.br +0 -0
  102. package/dist/_frontend/assets/python-CLLuhWlP.js.gz +0 -0
  103. package/dist/_frontend/assets/{razor-DLV1uhEc.js → razor-CTEZKBpz.js} +1 -1
  104. package/dist/_frontend/assets/razor-CTEZKBpz.js.br +0 -0
  105. package/dist/_frontend/assets/razor-CTEZKBpz.js.gz +0 -0
  106. package/dist/_frontend/assets/{tsMode-CQqRu3mP.js → tsMode-BsjOp9ss.js} +1 -1
  107. package/dist/_frontend/assets/tsMode-BsjOp9ss.js.br +0 -0
  108. package/dist/_frontend/assets/tsMode-BsjOp9ss.js.gz +0 -0
  109. package/dist/_frontend/assets/{typescript-BExfm66c.js → typescript-CpIJvyBH.js} +1 -1
  110. package/dist/_frontend/assets/typescript-CpIJvyBH.js.br +0 -0
  111. package/dist/_frontend/assets/typescript-CpIJvyBH.js.gz +0 -0
  112. package/dist/_frontend/assets/{workers-Cn25A5Lb.js → workers-C_uhAUan.js} +1 -1
  113. package/dist/_frontend/assets/workers-C_uhAUan.js.br +0 -0
  114. package/dist/_frontend/assets/workers-C_uhAUan.js.gz +0 -0
  115. package/dist/_frontend/assets/{xml-D2IDD-hb.js → xml-BxHi2HCJ.js} +1 -1
  116. package/dist/_frontend/assets/xml-BxHi2HCJ.js.br +0 -0
  117. package/dist/_frontend/assets/xml-BxHi2HCJ.js.gz +0 -0
  118. package/dist/_frontend/assets/{yaml-CY4c2A0Y.js → yaml-DyyH_CDu.js} +1 -1
  119. package/dist/_frontend/assets/yaml-DyyH_CDu.js.br +0 -0
  120. package/dist/_frontend/assets/yaml-DyyH_CDu.js.gz +0 -0
  121. package/dist/_frontend/index.html +1 -1
  122. package/dist/controller-main.js +101 -108
  123. package/dist/controller-main.js.map +1 -1
  124. package/dist/main.js +459 -277
  125. package/dist/main.js.map +1 -1
  126. package/package.json +2 -2
  127. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.br +0 -0
  128. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.gz +0 -0
  129. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js +0 -1
  130. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.br +0 -0
  131. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.gz +0 -0
  132. package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.br +0 -0
  133. package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.gz +0 -0
  134. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.br +0 -0
  135. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.gz +0 -0
  136. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.br +0 -0
  137. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.gz +0 -0
  138. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js +0 -1
  139. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.br +0 -0
  140. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.gz +0 -0
  141. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.br +0 -0
  142. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.gz +0 -0
  143. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.br +0 -0
  144. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.gz +0 -0
  145. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.br +0 -0
  146. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.gz +0 -0
  147. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js +0 -1
  148. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.br +0 -0
  149. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.gz +0 -0
  150. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js +0 -1
  151. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.br +0 -0
  152. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.gz +0 -0
  153. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.br +0 -0
  154. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.gz +0 -0
  155. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.br +0 -0
  156. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.gz +0 -0
  157. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.br +0 -0
  158. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.gz +0 -0
  159. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.br +0 -0
  160. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.gz +0 -0
  161. package/dist/_frontend/assets/TrueForgeUIWithRouter-6VCR7ES3-CtIaYnA8.js +0 -1
  162. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.br +0 -0
  163. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.gz +0 -0
  164. package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.br +0 -0
  165. package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.gz +0 -0
  166. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.br +0 -0
  167. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.gz +0 -0
  168. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.br +0 -0
  169. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.gz +0 -0
  170. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.br +0 -0
  171. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.gz +0 -0
  172. package/dist/_frontend/assets/cssMode-BNfxrwWp.js.br +0 -0
  173. package/dist/_frontend/assets/cssMode-BNfxrwWp.js.gz +0 -0
  174. package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.br +0 -0
  175. package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.gz +0 -0
  176. package/dist/_frontend/assets/handlebars-5nE6yTDt.js.br +0 -0
  177. package/dist/_frontend/assets/handlebars-5nE6yTDt.js.gz +0 -0
  178. package/dist/_frontend/assets/html-BZRf7Zhg.js.br +0 -0
  179. package/dist/_frontend/assets/html-BZRf7Zhg.js.gz +0 -0
  180. package/dist/_frontend/assets/htmlMode-C6O73C_r.js.br +0 -0
  181. package/dist/_frontend/assets/htmlMode-C6O73C_r.js.gz +0 -0
  182. package/dist/_frontend/assets/index-D0Yf366e.js.br +0 -0
  183. package/dist/_frontend/assets/index-D0Yf366e.js.gz +0 -0
  184. package/dist/_frontend/assets/index-DBjak9Sg.js.br +0 -0
  185. package/dist/_frontend/assets/index-DBjak9Sg.js.gz +0 -0
  186. package/dist/_frontend/assets/index-XpZpj5Rl.js.br +0 -0
  187. package/dist/_frontend/assets/index-XpZpj5Rl.js.gz +0 -0
  188. package/dist/_frontend/assets/jsonMode-Dal25yu2.js.br +0 -0
  189. package/dist/_frontend/assets/jsonMode-Dal25yu2.js.gz +0 -0
  190. package/dist/_frontend/assets/liquid-Ci7gjLGv.js.br +0 -0
  191. package/dist/_frontend/assets/liquid-Ci7gjLGv.js.gz +0 -0
  192. package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.br +0 -0
  193. package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.gz +0 -0
  194. package/dist/_frontend/assets/mdx-J3rSuJw4.js.br +0 -0
  195. package/dist/_frontend/assets/mdx-J3rSuJw4.js.gz +0 -0
  196. package/dist/_frontend/assets/python-BSpXGEco.js.br +0 -0
  197. package/dist/_frontend/assets/python-BSpXGEco.js.gz +0 -0
  198. package/dist/_frontend/assets/razor-DLV1uhEc.js.br +0 -0
  199. package/dist/_frontend/assets/razor-DLV1uhEc.js.gz +0 -0
  200. package/dist/_frontend/assets/tsMode-CQqRu3mP.js.br +0 -0
  201. package/dist/_frontend/assets/tsMode-CQqRu3mP.js.gz +0 -0
  202. package/dist/_frontend/assets/typescript-BExfm66c.js.br +0 -0
  203. package/dist/_frontend/assets/typescript-BExfm66c.js.gz +0 -0
  204. package/dist/_frontend/assets/workers-Cn25A5Lb.js.br +0 -0
  205. package/dist/_frontend/assets/workers-Cn25A5Lb.js.gz +0 -0
  206. package/dist/_frontend/assets/xml-D2IDD-hb.js.br +0 -0
  207. package/dist/_frontend/assets/xml-D2IDD-hb.js.gz +0 -0
  208. package/dist/_frontend/assets/yaml-CY4c2A0Y.js.br +0 -0
  209. 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
  }
@@ -10017,7 +10133,7 @@ function readAccessTokenCookie(params) {
10017
10133
 
10018
10134
  // src/auth/middleware.ts
10019
10135
  init_config();
10020
- import { HTTPException as HTTPException4 } from "hono/http-exception";
10136
+ import { HTTPException as HTTPException6 } from "hono/http-exception";
10021
10137
  import { jwtVerify } from "jose";
10022
10138
 
10023
10139
  // src/auth/emailAllowlist.ts
@@ -10269,20 +10385,29 @@ function createAdminAuthMiddleware(authenticator) {
10269
10385
  return async (c, next) => {
10270
10386
  const requestContext = await authenticator.authenticate(c);
10271
10387
  if (!hasAdminRole(requestContext)) {
10272
- throw new HTTPException4(403, { message: "Admin access required" });
10388
+ throw new HTTPException6(403, { message: "Admin access required" });
10273
10389
  }
10274
10390
  c.set("request_context", requestContext);
10275
10391
  return next();
10276
10392
  };
10277
10393
  }
10394
+ function createApiKeyAuthMiddleware(apiKey) {
10395
+ return async (c, next) => {
10396
+ const token = readBearerToken(c);
10397
+ if (token === void 0 || token !== apiKey) {
10398
+ throw new HTTPException6(401, { message: "Invalid service credential" });
10399
+ }
10400
+ return next();
10401
+ };
10402
+ }
10278
10403
  var truefoundryAdminMiddleware = async (c, next) => {
10279
10404
  const token = extractRequestToken(c);
10280
10405
  if (config_default.STANDALONE) {
10281
- throw new HTTPException4(403, { message: "Service API key required" });
10406
+ throw new HTTPException6(403, { message: "Service API key required" });
10282
10407
  }
10283
10408
  const apiKey = config_default.TRUEFOUNDRY_API_KEY;
10284
10409
  if (apiKey === void 0 || token === void 0 || token !== apiKey) {
10285
- throw new HTTPException4(403, { message: "Service API key required" });
10410
+ throw new HTTPException6(403, { message: "Service API key required" });
10286
10411
  }
10287
10412
  c.set("request_context", {
10288
10413
  tenant_id: "system",
@@ -11434,7 +11559,7 @@ function createMcpOAuthRouter(deps) {
11434
11559
  // src/apis/mcpServers.ts
11435
11560
  import { OpenAPIHono as OpenAPIHono7 } from "@hono/zod-openapi";
11436
11561
  import { extractErrorLogFields as extractErrorLogFields5, isAuthRequired, McpConnectionError as McpConnectionError4, RemoteMCP } from "@truefoundry/trueforge-core/core";
11437
- import { HTTPException as HTTPException5 } from "hono/http-exception";
11562
+ import { HTTPException as HTTPException7 } from "hono/http-exception";
11438
11563
  init_config();
11439
11564
  init_mcpServerStore();
11440
11565
 
@@ -12009,7 +12134,7 @@ function createMcpServersRouter(deps) {
12009
12134
  });
12010
12135
  return c.json(authStatus, 200);
12011
12136
  } catch (error) {
12012
- if (error instanceof HTTPException5) {
12137
+ if (error instanceof HTTPException7) {
12013
12138
  throw error;
12014
12139
  }
12015
12140
  if (error instanceof McpServerNotFoundError) {
@@ -12289,10 +12414,14 @@ function createPermissionsRouter(deps) {
12289
12414
 
12290
12415
  // src/apis/schedules.ts
12291
12416
  import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
12292
- import { InvalidPageTokenError } from "@truefoundry/trueforge-core/agent-session";
12417
+ import {
12418
+ InvalidPageTokenError
12419
+ } from "@truefoundry/trueforge-core/agent-session";
12293
12420
 
12294
12421
  // src/controller/scheduleDispatch.ts
12422
+ init_config();
12295
12423
  init_scheduleStore();
12424
+ import { TrueForge } from "@truefoundry/trueforge-sdk";
12296
12425
  init_cron();
12297
12426
  init_schedule();
12298
12427
  var DISPATCH_BATCH_LIMIT = 20;
@@ -12301,6 +12430,20 @@ function scheduleRunFailureReason(error) {
12301
12430
  }
12302
12431
  var SCHEDULE_DISPATCH_INTERVAL_MS = 6e4;
12303
12432
  var SCHEDULE_DISPATCH_LOOP_NAME = "schedule-dispatch";
12433
+ function createHttpScheduleRunExecutor() {
12434
+ const tls = {
12435
+ enabled: config_default.TRUEFORGE_MTLS_ENABLED,
12436
+ dir: config_default.TRUEFORGE_MTLS_CERTS_DIR
12437
+ };
12438
+ const tlsFetch = createTlsFetch(tls);
12439
+ const client = new TrueForge({
12440
+ baseUrl: normalizeTlsUrl({ url: config_default.SERVER_URL, enabled: tls.enabled }),
12441
+ token: config_default.TRUEFORGE_API_KEY,
12442
+ timeoutInSeconds: 60,
12443
+ ...tlsFetch === void 0 ? {} : { fetch: tlsFetch }
12444
+ });
12445
+ return (scheduleRunId) => client.internal.schedules.executeRun({ scheduleRunId });
12446
+ }
12304
12447
  var ScheduleAgentNotFoundError = class extends Error {
12305
12448
  agent_name;
12306
12449
  constructor(agent_name, options) {
@@ -12309,29 +12452,23 @@ var ScheduleAgentNotFoundError = class extends Error {
12309
12452
  this.agent_name = agent_name;
12310
12453
  }
12311
12454
  };
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
- }
12455
+ var ScheduleRunNotFoundError = class extends Error {
12456
+ constructor(scheduleRunId, options) {
12457
+ super(`Schedule run not found: ${scheduleRunId}`, options);
12458
+ this.name = "ScheduleRunNotFoundError";
12459
+ }
12460
+ };
12461
+ var ScheduleNotFoundError = class extends Error {
12462
+ constructor(scheduleId, options) {
12463
+ super(`Schedule not found: ${scheduleId}`, options);
12464
+ this.name = "ScheduleNotFoundError";
12465
+ }
12466
+ };
12329
12467
  async function startScheduleRun(params) {
12330
12468
  const {
12331
12469
  item: { run, schedule },
12332
12470
  sessions,
12333
- agentStore,
12334
- startTurn
12471
+ agentStore
12335
12472
  } = params;
12336
12473
  const named = await agentStore.getAgent({ tenant_id: schedule.tenant_id, name: schedule.agent_name });
12337
12474
  if (named === void 0) {
@@ -12346,14 +12483,27 @@ async function startScheduleRun(params) {
12346
12483
  });
12347
12484
  const { data: turns } = await session.listTurns({ limit: 1 });
12348
12485
  if (turns.length > 0) {
12349
- return;
12486
+ return void 0;
12350
12487
  }
12351
- await startTurn({
12488
+ return {
12352
12489
  session,
12353
12490
  input: [{ type: "user.message", content: schedule.manifest.task }],
12354
12491
  previous_turn_id: "none",
12355
- userRef: schedule.created_by_subject.subject_id
12356
- });
12492
+ userRef: schedule.created_by_subject.subject_id,
12493
+ agent: named
12494
+ };
12495
+ }
12496
+ async function loadScheduleDispatchItem(params) {
12497
+ const { scheduleRunId, scheduleStore } = params;
12498
+ const run = await scheduleStore.getRunById({ id: scheduleRunId });
12499
+ if (run === void 0) {
12500
+ throw new ScheduleRunNotFoundError(scheduleRunId);
12501
+ }
12502
+ const schedule = await scheduleStore.getSchedule({ tenant_id: run.tenant_id, id: run.schedule_id });
12503
+ if (schedule === void 0) {
12504
+ throw new ScheduleNotFoundError(run.schedule_id);
12505
+ }
12506
+ return { run, schedule };
12357
12507
  }
12358
12508
  async function finishScheduledRun(params) {
12359
12509
  const { store, withTransaction, run, status, reason, now: now2 } = params;
@@ -12452,14 +12602,15 @@ async function dispatchScheduledRuns(params) {
12452
12602
  return { dispatched, failed };
12453
12603
  }
12454
12604
  function scheduleDispatchLoop(params) {
12455
- const { scheduleStore, client, withTransaction, logger } = params;
12605
+ const { scheduleStore, withTransaction, logger } = params;
12606
+ const executeRun = createHttpScheduleRunExecutor();
12456
12607
  return {
12457
12608
  name: SCHEDULE_DISPATCH_LOOP_NAME,
12458
12609
  intervalMs: SCHEDULE_DISPATCH_INTERVAL_MS,
12459
12610
  async tick(signal) {
12460
12611
  const result = await dispatchScheduledRuns({
12461
12612
  store: scheduleStore,
12462
- onTriggered: executeScheduledRun(client),
12613
+ onTriggered: (item) => executeRun(item.run.id),
12463
12614
  logger,
12464
12615
  withTransaction,
12465
12616
  signal
@@ -12604,6 +12755,36 @@ var createScheduleRunRoute = createRoute10({
12604
12755
  }
12605
12756
  }
12606
12757
  });
12758
+ var executeScheduleRunRoute = createRoute10({
12759
+ method: "post",
12760
+ path: "/runs/execute",
12761
+ tags: ["Internal" /* INTERNAL */],
12762
+ summary: "Execute a schedule run",
12763
+ description: "Execute a persisted schedule run using its saved schedule and agent.",
12764
+ "x-fern-sdk-group-name": ["internal", "schedules"],
12765
+ "x-fern-sdk-method-name": "execute_run",
12766
+ request: {
12767
+ body: {
12768
+ content: { "application/json": { schema: ExecuteScheduleRunRequestSchema } },
12769
+ required: true
12770
+ }
12771
+ },
12772
+ responses: {
12773
+ 204: { description: "Run executed or already has a turn." },
12774
+ 401: {
12775
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
12776
+ description: "Invalid service credential."
12777
+ },
12778
+ 404: {
12779
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
12780
+ description: "Run, schedule, or agent not found."
12781
+ },
12782
+ 422: {
12783
+ content: { "application/json": { schema: RequestErrorResponseSchema } },
12784
+ description: "The run cannot be executed."
12785
+ }
12786
+ }
12787
+ });
12607
12788
  var createScheduleRoute = createRoute10({
12608
12789
  method: "post",
12609
12790
  path: "/",
@@ -12754,7 +12935,7 @@ import {
12754
12935
  SandboxError as SandboxError2,
12755
12936
  VercelAILLM
12756
12937
  } from "@truefoundry/trueforge-core/core";
12757
- import { HTTPException as HTTPException7 } from "hono/http-exception";
12938
+ import { HTTPException as HTTPException9 } from "hono/http-exception";
12758
12939
  import { streamSSE } from "hono/streaming";
12759
12940
 
12760
12941
  // src/routes/turnRoutes.ts
@@ -13758,14 +13939,14 @@ var StreamGoneError = class extends Error {
13758
13939
 
13759
13940
  // src/runtime/peeringIds.ts
13760
13941
  init_id();
13761
- import { HTTPException as HTTPException6 } from "hono/http-exception";
13942
+ import { HTTPException as HTTPException8 } from "hono/http-exception";
13762
13943
  function mintPeeredTurnId(executorId) {
13763
13944
  return `${newId()}.${executorId}`;
13764
13945
  }
13765
13946
  function executorFromTurnId(turnId) {
13766
13947
  const parts = turnId.split(".");
13767
13948
  if (parts.length !== 2 || !parts[0] || !parts[1]) {
13768
- throw new HTTPException6(400, { message: `ID ${turnId} is not a valid turn id` });
13949
+ throw new HTTPException8(400, { message: `ID ${turnId} is not a valid turn id` });
13769
13950
  }
13770
13951
  return parts[1];
13771
13952
  }
@@ -13859,7 +14040,7 @@ function createTurnResolver(deps) {
13859
14040
  userRef
13860
14041
  });
13861
14042
  if (connection === void 0) {
13862
- throw new HTTPException7(422, {
14043
+ throw new HTTPException9(422, {
13863
14044
  message: `Unknown MCP server "${name}" \u2014 not configured`
13864
14045
  });
13865
14046
  }
@@ -13875,7 +14056,7 @@ function createTurnResolver(deps) {
13875
14056
  sessionId
13876
14057
  });
13877
14058
  if (provider === void 0) {
13878
- throw new HTTPException7(422, {
14059
+ throw new HTTPException9(422, {
13879
14060
  message: "no sandbox provider configured \u2014 PUT /settings/sandbox-providers"
13880
14061
  });
13881
14062
  }
@@ -13886,7 +14067,7 @@ function createTurnResolver(deps) {
13886
14067
  if (carriedSandboxId === void 0 && provider.type !== "local") {
13887
14068
  const status = await checkSnapshotStatus({ store: sandboxProviderStore, tenant_id, logger });
13888
14069
  if (status?.status !== "ready") {
13889
- throw new HTTPException7(422, {
14070
+ throw new HTTPException9(422, {
13890
14071
  message: status?.status === "failed" ? `sandbox image build failed (${status.status_reason ?? "unknown error"})` : "sandbox image is activating \u2014 retry shortly"
13891
14072
  });
13892
14073
  }
@@ -13908,7 +14089,7 @@ function createTurnResolver(deps) {
13908
14089
  agent: async (agentId) => {
13909
14090
  const record = await agentStore.getAgent({ tenant_id, id: agentId });
13910
14091
  if (record === void 0) {
13911
- throw new HTTPException7(422, { message: `Agent not found: ${agentId}` });
14092
+ throw new HTTPException9(422, { message: `Agent not found: ${agentId}` });
13912
14093
  }
13913
14094
  return record.manifest;
13914
14095
  },
@@ -14040,7 +14221,7 @@ async function startTurnInProcess(params) {
14040
14221
  return turn;
14041
14222
  }
14042
14223
  function getTurnExecutionError(error) {
14043
- if (error instanceof HTTPException7) {
14224
+ if (error instanceof HTTPException9) {
14044
14225
  if (error.status === 400 || error.status === 404 || error.status === 422) {
14045
14226
  return { status: error.status, message: error.message };
14046
14227
  }
@@ -14069,7 +14250,7 @@ function resolveAfterSequenceNumber(c, bodyAfterSequenceNumber) {
14069
14250
  if (lastEventId) {
14070
14251
  const sequenceNumber = Number(lastEventId);
14071
14252
  if (!Number.isInteger(sequenceNumber) || sequenceNumber < 0) {
14072
- throw new HTTPException7(400, { message: "Invalid Last-Event-Id header" });
14253
+ throw new HTTPException9(400, { message: "Invalid Last-Event-Id header" });
14073
14254
  }
14074
14255
  return sequenceNumber;
14075
14256
  }
@@ -14353,7 +14534,7 @@ function createTurnsRouter(deps) {
14353
14534
  await turnEventStream.assertSubscribable();
14354
14535
  } catch (error) {
14355
14536
  if (error instanceof StreamGoneError) {
14356
- throw new HTTPException7(412, { message: error.message, cause: error });
14537
+ throw new HTTPException9(412, { message: error.message, cause: error });
14357
14538
  }
14358
14539
  throw error;
14359
14540
  }
@@ -14403,6 +14584,33 @@ function createTurnsRouter(deps) {
14403
14584
  }
14404
14585
 
14405
14586
  // src/apis/schedules.ts
14587
+ async function startScheduleRunOnRequest(params) {
14588
+ const { c, item, deps } = params;
14589
+ const prepared = await startScheduleRun({
14590
+ item,
14591
+ sessions: deps.sessions,
14592
+ agentStore: deps.agentStore
14593
+ });
14594
+ if (prepared === void 0) {
14595
+ return;
14596
+ }
14597
+ await startTurnInProcess({
14598
+ session: prepared.session,
14599
+ input: prepared.input,
14600
+ previous_turn_id: prepared.previous_turn_id,
14601
+ userRef: prepared.userRef,
14602
+ deps: {
14603
+ activeTurns: deps.activeTurns,
14604
+ eventSubscriptions: deps.eventSubscriptions,
14605
+ agentStore: deps.agentStore,
14606
+ modelProviderStore: deps.resolveModelProviderStore(c, prepared.agent),
14607
+ mcpServerStore: deps.resolveMcpServerStore(c, prepared.agent),
14608
+ sandboxProviderStore: deps.resolveSandboxProviderStore(c),
14609
+ skillStore: deps.turnSkillsResolverStore,
14610
+ logger: deps.logger
14611
+ }
14612
+ });
14613
+ }
14406
14614
  function toWireSchedule(record) {
14407
14615
  return {
14408
14616
  id: record.id,
@@ -14456,6 +14664,34 @@ var FORBIDDEN_SCHEDULE_ACCESS = "Only the schedule creator can access this sched
14456
14664
  function isScheduleOwner(requestContext, created_by_subject_id) {
14457
14665
  return requestContext.subject.id === created_by_subject_id;
14458
14666
  }
14667
+ function createScheduleExecutionRouter(deps) {
14668
+ const handler = async (c) => {
14669
+ const { schedule_run_id: scheduleRunId } = c.req.valid("json");
14670
+ try {
14671
+ const item = await loadScheduleDispatchItem({
14672
+ scheduleRunId,
14673
+ scheduleStore: deps.scheduleStore
14674
+ });
14675
+ c.set(
14676
+ "request_context",
14677
+ requestContextFromCreatedBySubject({
14678
+ tenant_id: item.schedule.tenant_id,
14679
+ created_by_subject: item.schedule.created_by_subject
14680
+ })
14681
+ );
14682
+ await startScheduleRunOnRequest({ c, item, deps });
14683
+ } catch (error) {
14684
+ if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
14685
+ return c.json({ error: { message: error.message } }, 404);
14686
+ }
14687
+ throw error;
14688
+ }
14689
+ return c.body(null, 204);
14690
+ };
14691
+ const router = new OpenAPIHono11();
14692
+ router.openapi(executeScheduleRunRoute, handler);
14693
+ return router;
14694
+ }
14459
14695
  function createSchedulesRouter(deps) {
14460
14696
  const listHandler = async (c) => {
14461
14697
  const { agent_names: agentNames, limit, page_token: pageToken, created_by_me: createdByMe } = c.req.valid("query");
@@ -14563,14 +14799,7 @@ function createSchedulesRouter(deps) {
14563
14799
  throw error;
14564
14800
  }
14565
14801
  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
- });
14802
+ await startScheduleRunOnRequest({ c, item: { run, schedule }, deps });
14574
14803
  } catch (error) {
14575
14804
  await deps.scheduleStore.updateRunStatus({
14576
14805
  tenant_id: requestContext.tenant_id,
@@ -14578,7 +14807,7 @@ function createSchedulesRouter(deps) {
14578
14807
  status: "failed",
14579
14808
  reason: scheduleRunFailureReason(error)
14580
14809
  });
14581
- if (error instanceof ScheduleAgentNotFoundError) {
14810
+ if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
14582
14811
  return c.json({ error: { message: error.message } }, 404);
14583
14812
  }
14584
14813
  const turnError = getTurnExecutionError(error);
@@ -15947,7 +16176,8 @@ function createAvailableSkillsRouter(deps) {
15947
16176
  });
15948
16177
  router.openapi(listSkillVersionsRoute, async (c) => {
15949
16178
  const { name } = c.req.valid("query");
15950
- return c.json({ data: await deps.resolveSkillStore(c).listSkillVersions({ name }) }, 200);
16179
+ const skillVersions = await deps.resolveSkillStore(c).listSkillVersions({ name });
16180
+ return c.json({ data: skillVersions }, 200);
15951
16181
  });
15952
16182
  return router;
15953
16183
  }
@@ -16073,7 +16303,7 @@ function createAppErrorHandler(params) {
16073
16303
  if (error instanceof InvalidCronError) {
16074
16304
  return c.json({ error: { message: error.message } }, 400);
16075
16305
  }
16076
- if (error instanceof HTTPException8) {
16306
+ if (error instanceof HTTPException10) {
16077
16307
  if (error.status >= 500) {
16078
16308
  params.logger.error("Server API error", {
16079
16309
  status: error.status,
@@ -16122,7 +16352,20 @@ function createServerApp(deps) {
16122
16352
  const app = new OpenAPIHono18({ defaultHook: zodValidationHook });
16123
16353
  const authMiddleware = createAuthMiddleware(deps.authenticator);
16124
16354
  const adminAuthMiddleware = createAdminAuthMiddleware(deps.authenticator);
16355
+ const scheduleExecutionAuthMiddleware = createApiKeyAuthMiddleware(config_default.TRUEFORGE_API_KEY);
16125
16356
  const authEnabled = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
16357
+ const scheduleTurnDeps = {
16358
+ scheduleStore: deps.scheduleStore,
16359
+ sessions: deps.sessions,
16360
+ agentStore: deps.agentStore,
16361
+ eventSubscriptions: deps.eventSubscriptions,
16362
+ logger: deps.logger,
16363
+ resolveModelProviderStore: deps.resolveModelProviderStore,
16364
+ resolveMcpServerStore: deps.resolveMcpServerStore,
16365
+ resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
16366
+ activeTurns: deps.activeTurns,
16367
+ turnSkillsResolverStore: deps.turnSkillsResolverStore
16368
+ };
16126
16369
  if (config_default.ACCESS_LOGS) {
16127
16370
  app.use("*", createAccessLogMiddleware(deps.logger));
16128
16371
  }
@@ -16222,23 +16465,16 @@ function createServerApp(deps) {
16222
16465
  authMiddleware
16223
16466
  )
16224
16467
  );
16468
+ app.route(
16469
+ "/api/internal/schedules",
16470
+ withAuth(createScheduleExecutionRouter(scheduleTurnDeps), scheduleExecutionAuthMiddleware)
16471
+ );
16225
16472
  app.route(
16226
16473
  "/api/v1/schedules",
16227
16474
  withAuth(
16228
16475
  createSchedulesRouter({
16229
- scheduleStore: deps.scheduleStore,
16476
+ ...scheduleTurnDeps,
16230
16477
  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
16478
  withTransaction: deps.withTransaction,
16243
16479
  resolveRequestContext,
16244
16480
  authorizer: deps.authorizer
@@ -16425,87 +16661,6 @@ init_config();
16425
16661
 
16426
16662
  // src/truefoundry/TrueFoundryAuthenticator.ts
16427
16663
  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
16664
  var TrueFoundryAuthenticator = class {
16510
16665
  #client;
16511
16666
  constructor(client) {
@@ -16839,9 +16994,6 @@ var SkillCatalog = class _SkillCatalog {
16839
16994
  // src/main.ts
16840
16995
  init_config();
16841
16996
 
16842
- // src/controller.ts
16843
- import { TrueForge } from "@truefoundry/trueforge-sdk";
16844
-
16845
16997
  // src/controller/Controller.ts
16846
16998
  var CONTROLLER_STOPPED = "controller-stopped";
16847
16999
  var Controller = class {
@@ -16937,28 +17089,16 @@ var Controller = class {
16937
17089
  };
16938
17090
 
16939
17091
  // 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
17092
  function createController(params) {
16950
- const { scheduleStore, withTransaction, logger, baseUrl } = params;
16951
- const tls = params.tls ?? { enabled: false, dir: "" };
16952
17093
  return new Controller({
16953
17094
  loops: [
16954
17095
  scheduleDispatchLoop({
16955
- scheduleStore,
16956
- client: createScheduleApiClient({ baseUrl, tls }),
16957
- withTransaction,
16958
- logger
17096
+ scheduleStore: params.scheduleStore,
17097
+ withTransaction: params.withTransaction,
17098
+ logger: params.logger
16959
17099
  })
16960
17100
  ],
16961
- logger
17101
+ logger: params.logger
16962
17102
  });
16963
17103
  }
16964
17104
 
@@ -17797,11 +17937,11 @@ var TrueFoundryMcpServerStore = class {
17797
17937
  this.#client = input.client;
17798
17938
  this.#resolveAccessToken = accessTokenForRequest({
17799
17939
  client: input.client,
17800
- context: asTrueFoundryRequestContext(input.context),
17940
+ requestContext: asTrueFoundryRequestContext(input.requestContext),
17801
17941
  agent: input.agent,
17802
17942
  logger: input.logger
17803
17943
  });
17804
- this.#subject = input.context.subject;
17944
+ this.#subject = input.requestContext.subject;
17805
17945
  this.#perServerHeaders = input.perServerHeaders ?? {};
17806
17946
  }
17807
17947
  /** Gateway Bearer (+ optional per-server overrides); SFY authorize first, else authRequired. */
@@ -17968,7 +18108,7 @@ var TrueFoundryModelProviderStore = class {
17968
18108
  this.#client = input.client;
17969
18109
  this.#resolveAccessToken = accessTokenForRequest({
17970
18110
  client: input.client,
17971
- context: asTrueFoundryRequestContext(input.context),
18111
+ requestContext: asTrueFoundryRequestContext(input.requestContext),
17972
18112
  agent: input.agent,
17973
18113
  logger: input.logger
17974
18114
  });
@@ -18217,10 +18357,60 @@ function toRegistryRecord(tenant_id, skill) {
18217
18357
  updated_at: now2
18218
18358
  };
18219
18359
  }
18220
- var TrueFoundrySkillStore = class {
18360
+ var TrueFoundryAdminSkillStore = class {
18361
+ #client;
18362
+ constructor(input) {
18363
+ this.#client = input.client;
18364
+ }
18365
+ async resolveTurnSkills(input) {
18366
+ const { skills } = input;
18367
+ if (skills.length === 0) {
18368
+ return [];
18369
+ }
18370
+ const resolved = await this.#client.resolveAgentSkillVersions({
18371
+ accessToken: this.#client.apiKey,
18372
+ skills: skills.map((skill) => ({
18373
+ fqn: skill.name,
18374
+ include_skill_md_content: skill.preload,
18375
+ include_presigned_url: true
18376
+ }))
18377
+ });
18378
+ const byFqn = new Map(resolved.map((row) => [row.fqn, row]));
18379
+ return skills.map((skill) => {
18380
+ const row = byFqn.get(skill.name);
18381
+ if (row === void 0) {
18382
+ throw new HTTPException18(422, {
18383
+ message: `Unknown skill "${skill.name}" \u2014 not configured`
18384
+ });
18385
+ }
18386
+ if (row.presigned_url === void 0) {
18387
+ throw new HTTPException18(422, {
18388
+ message: `Skill "${skill.name}" did not return a presigned URL`
18389
+ });
18390
+ }
18391
+ const skillMdContent = skill.preload ? row.skill_md_content ?? null : null;
18392
+ if (skill.preload && (skillMdContent === null || skillMdContent.length === 0)) {
18393
+ throw new HTTPException18(422, {
18394
+ message: `Skill "${skill.name}" did not return SKILL.md for preload`
18395
+ });
18396
+ }
18397
+ return {
18398
+ type: "registry",
18399
+ name: row.name,
18400
+ description: row.description,
18401
+ fqn: row.fqn,
18402
+ preload: skill.preload,
18403
+ skillMdContent,
18404
+ presignedUrl: row.presigned_url
18405
+ };
18406
+ });
18407
+ }
18408
+ };
18409
+ var TrueFoundrySkillStore = class extends TrueFoundryAdminSkillStore {
18221
18410
  #client;
18222
18411
  #resolveAccessToken;
18223
18412
  constructor(input) {
18413
+ super(input);
18224
18414
  this.#client = input.client;
18225
18415
  this.#resolveAccessToken = callerAccessToken(input.context);
18226
18416
  }
@@ -18299,49 +18489,6 @@ var TrueFoundrySkillStore = class {
18299
18489
  seenNames.add(row.name);
18300
18490
  }
18301
18491
  }
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
18492
  };
18346
18493
 
18347
18494
  // src/main.ts
@@ -18390,19 +18537,25 @@ function buildResolveSkillStore(options) {
18390
18537
  if (client === void 0) {
18391
18538
  return () => persistenceStore;
18392
18539
  }
18393
- return (c) => new TrueFoundrySkillStore({
18540
+ return (requestContext) => new TrueFoundrySkillStore({
18394
18541
  client,
18395
- context: resolveRequestContext(c)
18542
+ context: requestContext
18396
18543
  });
18397
18544
  }
18545
+ function buildTurnSkillsResolverStore(options) {
18546
+ const { persistenceStore, client } = options;
18547
+ if (client) {
18548
+ return new TrueFoundryAdminSkillStore({ client });
18549
+ }
18550
+ return persistenceStore;
18551
+ }
18398
18552
  function buildResolveModelProviderStore(options) {
18399
- return (c, runAsAgent) => {
18553
+ return (rc, runAsAgent) => {
18400
18554
  const { persistenceStore, client } = options;
18401
18555
  if (client) {
18402
- const requestContext = resolveRequestContext(c);
18403
18556
  return new TrueFoundryModelProviderStore({
18404
18557
  client,
18405
- context: requestContext,
18558
+ requestContext: rc,
18406
18559
  agent: runAsAgent,
18407
18560
  logger: options.logger
18408
18561
  });
@@ -18411,35 +18564,33 @@ function buildResolveModelProviderStore(options) {
18411
18564
  };
18412
18565
  }
18413
18566
  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);
18567
+ const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
18568
+ store: options.persistenceStore,
18569
+ tokenStore: options.tokenStore,
18570
+ clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
18571
+ });
18572
+ return (rc, runAsAgent, perServerHeaders) => {
18573
+ const { client } = options;
18574
+ if (client) {
18419
18575
  return new TrueFoundryMcpServerStore({
18420
18576
  client,
18421
- context: requestContext,
18577
+ requestContext: rc,
18422
18578
  agent: runAsAgent,
18423
18579
  logger: options.logger,
18424
- perServerHeaders: rawPerServerHeaders ? parsePerServerMcpHeaders(rawPerServerHeaders) : {}
18580
+ ...perServerHeaders === void 0 ? {} : { perServerHeaders }
18425
18581
  });
18426
18582
  }
18427
- const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
18428
- store: persistenceStore,
18429
- tokenStore,
18430
- clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
18431
- });
18432
18583
  return withAuthMcpPersistenceStore;
18433
18584
  };
18434
18585
  }
18435
18586
  function buildResolveAgentStore(options) {
18436
18587
  const { persistenceStore, client, db } = options;
18437
- return (c) => {
18588
+ return (rc) => {
18438
18589
  if (client) {
18439
18590
  return new TrueFoundryAgentStore({
18440
18591
  inner: persistenceStore,
18441
18592
  client,
18442
- context: resolveRequestContext(c),
18593
+ context: rc,
18443
18594
  db
18444
18595
  });
18445
18596
  }
@@ -18448,11 +18599,10 @@ function buildResolveAgentStore(options) {
18448
18599
  }
18449
18600
  function buildResolveSandboxProviderStore(options) {
18450
18601
  const { persistenceStore } = options;
18451
- if (!isTrueFoundryModeEnabled2(configuration2)) {
18452
- return () => persistenceStore;
18602
+ if (isTrueFoundryModeEnabled2(configuration2)) {
18603
+ return () => new TrueFoundrySandboxProviderStore();
18453
18604
  }
18454
- const trueFoundryStore = new TrueFoundrySandboxProviderStore();
18455
- return () => trueFoundryStore;
18605
+ return () => persistenceStore;
18456
18606
  }
18457
18607
  async function createStandalonePersistence(options) {
18458
18608
  const { sqlitePath, logger } = options;
@@ -18498,20 +18648,23 @@ async function createStandalonePersistence(options) {
18498
18648
  const sandboxProviderStore = new SqliteSandboxProviderStore2(db);
18499
18649
  const skillStore = new SqliteSkillStore2(db);
18500
18650
  return {
18651
+ withTransaction: (callback) => db.transaction().execute(callback),
18501
18652
  sessionStore: new SqliteSessionStore2(db),
18502
18653
  sessionMetricsStore: new SqliteSessionMetricsStore2(db),
18654
+ mcpOAuthStore: mcpServerStore,
18655
+ tokenStore,
18656
+ scheduleStore: new SqliteScheduleStore2(db),
18503
18657
  resolveModelProviderStore: () => modelProviderStore,
18504
18658
  resolveMcpServerStore: () => mcpServerStore,
18659
+ resolveSandboxProviderStore: () => sandboxProviderStore,
18660
+ resolveSkillStore: () => skillStore,
18505
18661
  resolveAgentStore: () => agentStore,
18506
18662
  resolveImportAgentStore: () => agentStore,
18507
- resolveSandboxProviderStore: () => sandboxProviderStore,
18508
- withTransaction: (callback) => db.transaction().execute(callback),
18509
- tokenStore,
18510
- scheduleStore: new SqliteScheduleStore2(db),
18663
+ agentStore,
18664
+ turnSkillsResolverStore: skillStore,
18511
18665
  destroyDb: () => db.destroy(),
18512
18666
  redis: void 0,
18513
- serviceFoundryClient: void 0,
18514
- resolveSkillStore: () => skillStore
18667
+ serviceFoundryClient: void 0
18515
18668
  };
18516
18669
  }
18517
18670
  async function createDistributedPersistence(options) {
@@ -18560,11 +18713,22 @@ async function createDistributedPersistence(options) {
18560
18713
  await migrateToLatest2(db);
18561
18714
  logger.info("Distributed mode: postgres");
18562
18715
  logger.info(`Executor id: ${executorId}`);
18716
+ const serviceFoundryClient = createServiceFoundryServerClient(logger);
18563
18717
  const tokenStore = new PostgresOAuthTokenStore2(db);
18564
- const agentStore = new PostgresAgentStore3(db);
18565
18718
  const modelProviderStore = new PostgresModelProviderStore2(db);
18566
18719
  const mcpServerStore = new PostgresMcpServerStore2(db);
18567
- const serviceFoundryClient = createServiceFoundryServerClient(logger);
18720
+ const mcpServerWithAuthStore = new McpServerWithAuthStore({
18721
+ store: mcpServerStore,
18722
+ tokenStore,
18723
+ clientName: configuration3.MCP_DCR_OAUTH_CLIENT_NAME
18724
+ });
18725
+ const sandboxProviderStore = new PostgresSandboxProviderStore2(db);
18726
+ const skillStore = new PostgresSkillStore2(db);
18727
+ const agentStore = new PostgresAgentStore3(db);
18728
+ const turnSkillsResolverStore = buildTurnSkillsResolverStore({
18729
+ persistenceStore: skillStore,
18730
+ client: serviceFoundryClient
18731
+ });
18568
18732
  const resolveModelProviderStore = buildResolveModelProviderStore({
18569
18733
  persistenceStore: modelProviderStore,
18570
18734
  client: serviceFoundryClient,
@@ -18599,49 +18763,51 @@ async function createDistributedPersistence(options) {
18599
18763
  });
18600
18764
  };
18601
18765
  const resolveSandboxProviderStore = buildResolveSandboxProviderStore({
18602
- persistenceStore: new PostgresSandboxProviderStore2(db)
18766
+ persistenceStore: sandboxProviderStore
18767
+ });
18768
+ const resolveSkillStore = buildResolveSkillStore({
18769
+ persistenceStore: skillStore,
18770
+ client: serviceFoundryClient
18603
18771
  });
18604
- const skillStore = new PostgresSkillStore2(db);
18605
18772
  return {
18773
+ withTransaction: (callback) => db.transaction().execute(callback),
18606
18774
  sessionStore: new PostgresSessionStore2(db),
18607
18775
  sessionMetricsStore: new PostgresSessionMetricsStore2(db),
18776
+ mcpOAuthStore: mcpServerWithAuthStore,
18777
+ tokenStore,
18778
+ scheduleStore: new PostgresScheduleStore2(db),
18608
18779
  resolveModelProviderStore,
18609
18780
  resolveMcpServerStore,
18781
+ resolveSandboxProviderStore,
18782
+ resolveSkillStore,
18610
18783
  resolveAgentStore,
18611
18784
  resolveImportAgentStore,
18612
- resolveSandboxProviderStore,
18613
- withTransaction: (callback) => db.transaction().execute(callback),
18614
- tokenStore,
18615
- scheduleStore: new PostgresScheduleStore2(db),
18785
+ agentStore,
18786
+ turnSkillsResolverStore,
18616
18787
  destroyDb: () => db.destroy(),
18617
18788
  redis: await connectRedis2({ url: redisUrl, logger }),
18618
- serviceFoundryClient,
18619
- resolveSkillStore: buildResolveSkillStore({
18620
- persistenceStore: skillStore,
18621
- client: serviceFoundryClient
18622
- })
18789
+ serviceFoundryClient
18623
18790
  };
18624
18791
  }
18625
18792
  async function createServerRuntime(persistence, logger) {
18626
18793
  const {
18794
+ withTransaction,
18627
18795
  sessionStore,
18628
18796
  sessionMetricsStore,
18629
- resolveModelProviderStore,
18630
- resolveMcpServerStore,
18631
- resolveAgentStore,
18632
- resolveImportAgentStore,
18633
- resolveSandboxProviderStore,
18634
- withTransaction,
18635
18797
  tokenStore,
18636
18798
  scheduleStore,
18799
+ mcpOAuthStore,
18800
+ resolveImportAgentStore,
18801
+ agentStore,
18802
+ turnSkillsResolverStore,
18637
18803
  destroyDb,
18638
18804
  redis,
18639
- serviceFoundryClient,
18640
- resolveSkillStore
18805
+ serviceFoundryClient
18641
18806
  } = persistence;
18642
18807
  const activeTurns = new ActiveTurnRegistry();
18643
18808
  const requestReplyRouter = new RequestReplyRouter();
18644
18809
  const eventSubscriptions = new EventSubscriptionRegistry(redis);
18810
+ const sessions = new Sessions({ sessionStore });
18645
18811
  const oidc = isOidcConfigured2(configuration2) ? configuration2.OIDC : void 0;
18646
18812
  if (oidc) {
18647
18813
  logger.info("Auth is enabled", { issuer: oidc.OIDC_ISSUER_URL });
@@ -18671,9 +18837,23 @@ async function createServerRuntime(persistence, logger) {
18671
18837
  const controller = configuration2.STANDALONE ? createController({
18672
18838
  scheduleStore,
18673
18839
  withTransaction,
18674
- logger,
18675
- baseUrl: `http://localhost:${String(configuration2.PORT)}`
18840
+ logger
18676
18841
  }) : void 0;
18842
+ const resolveModelProviderStore = (c, runAsAgent) => persistence.resolveModelProviderStore(resolveRequestContext(c), runAsAgent);
18843
+ const resolveMcpServerStore = (c, runAsAgent) => {
18844
+ if (c === void 0) {
18845
+ return mcpOAuthStore;
18846
+ }
18847
+ const rawPerServerHeaders = c.req.header(X_TFG_MCP_HEADERS);
18848
+ return persistence.resolveMcpServerStore(
18849
+ resolveRequestContext(c),
18850
+ runAsAgent,
18851
+ rawPerServerHeaders === void 0 ? void 0 : parsePerServerMcpHeaders(rawPerServerHeaders)
18852
+ );
18853
+ };
18854
+ const resolveAgentStore = (c) => persistence.resolveAgentStore(resolveRequestContext(c));
18855
+ const resolveSandboxProviderStore = (c) => persistence.resolveSandboxProviderStore(resolveRequestContext(c));
18856
+ const resolveSkillStore = (c) => persistence.resolveSkillStore(resolveRequestContext(c));
18677
18857
  const app = createServerApp({
18678
18858
  modelCatalog: ModelCatalog.load(),
18679
18859
  mcpCatalog: McpCatalog.load(),
@@ -18684,12 +18864,15 @@ async function createServerRuntime(persistence, logger) {
18684
18864
  resolveAgentStore,
18685
18865
  resolveImportAgentStore,
18686
18866
  resolveSandboxProviderStore,
18867
+ resolveSkillStore,
18687
18868
  withTransaction,
18688
18869
  tokenStore,
18689
18870
  scheduleStore,
18871
+ agentStore,
18872
+ turnSkillsResolverStore,
18690
18873
  sessionStore,
18691
18874
  sessionMetricsStore,
18692
- sessions: new Sessions({ sessionStore }),
18875
+ sessions,
18693
18876
  activeTurns,
18694
18877
  redis,
18695
18878
  requestReplyRouter,
@@ -18697,8 +18880,7 @@ async function createServerRuntime(persistence, logger) {
18697
18880
  logger,
18698
18881
  oidcClient,
18699
18882
  authenticator,
18700
- authorizer,
18701
- resolveSkillStore
18883
+ authorizer
18702
18884
  });
18703
18885
  return { activeTurns, app, controller, destroyDb, redis, requestReplyRouter };
18704
18886
  }