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

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 (260) hide show
  1. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js +1 -0
  2. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.br +0 -0
  3. package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.gz +0 -0
  4. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js +1 -0
  5. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.br +0 -0
  6. package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.gz +0 -0
  7. package/dist/_frontend/assets/{AgentOverview-EEBHJC32-Bn4qidnv.js → AgentOverview-VF74XC7I-DuR4GDFb.js} +1 -1
  8. package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.br +0 -0
  9. package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.gz +0 -0
  10. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js +1 -0
  11. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.br +0 -0
  12. package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.gz +0 -0
  13. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js +1 -0
  14. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.br +0 -0
  15. package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.gz +0 -0
  16. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js +1 -0
  17. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.br +0 -0
  18. package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.gz +0 -0
  19. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js +1 -0
  20. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.br +0 -0
  21. package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.gz +0 -0
  22. package/dist/_frontend/assets/{DockLayout-LM4AFMFY-DoBwJ3-e.js → DockLayout-F44RWGEY-DVcqWNpi.js} +1 -1
  23. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js +2 -0
  24. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.br +0 -0
  25. package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.gz +0 -0
  26. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js +1 -0
  27. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.br +0 -0
  28. package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.gz +0 -0
  29. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js +1 -0
  30. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.br +0 -0
  31. package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.gz +0 -0
  32. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js +1 -0
  33. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.br +0 -0
  34. package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.gz +0 -0
  35. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js +2 -0
  36. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.br +0 -0
  37. package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.gz +0 -0
  38. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js +1 -0
  39. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.br +0 -0
  40. package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.gz +0 -0
  41. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js +2 -0
  42. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.br +0 -0
  43. package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.gz +0 -0
  44. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js +1 -0
  45. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.br +0 -0
  46. package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.gz +0 -0
  47. package/dist/_frontend/assets/TrueForgeUIWithRouter-6VCR7ES3-CtIaYnA8.js +1 -0
  48. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js +1 -0
  49. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.br +0 -0
  50. package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.gz +0 -0
  51. package/dist/_frontend/assets/{chunk-62JRHF6Z-BLb_tkPU.js → chunk-62JRHF6Z-DYrEQoq5.js} +1 -1
  52. package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.br +0 -0
  53. package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.gz +0 -0
  54. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js +1 -0
  55. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.br +0 -0
  56. package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.gz +0 -0
  57. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js +2 -0
  58. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.br +0 -0
  59. package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.gz +0 -0
  60. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js +1 -0
  61. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.br +0 -0
  62. package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.gz +0 -0
  63. package/dist/_frontend/assets/cssMode-BNfxrwWp.js +1 -0
  64. package/dist/_frontend/assets/cssMode-BNfxrwWp.js.br +0 -0
  65. package/dist/_frontend/assets/cssMode-BNfxrwWp.js.gz +0 -0
  66. package/dist/_frontend/assets/{freemarker2-mt8l8QVE.js → freemarker2-ClbLzW-k.js} +1 -1
  67. package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.br +0 -0
  68. package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.gz +0 -0
  69. package/dist/_frontend/assets/{handlebars-C97jT8Zn.js → handlebars-5nE6yTDt.js} +1 -1
  70. package/dist/_frontend/assets/handlebars-5nE6yTDt.js.br +0 -0
  71. package/dist/_frontend/assets/handlebars-5nE6yTDt.js.gz +0 -0
  72. package/dist/_frontend/assets/{html-DKtvlaWU.js → html-BZRf7Zhg.js} +1 -1
  73. package/dist/_frontend/assets/html-BZRf7Zhg.js.br +0 -0
  74. package/dist/_frontend/assets/html-BZRf7Zhg.js.gz +0 -0
  75. package/dist/_frontend/assets/htmlMode-C6O73C_r.js +1 -0
  76. package/dist/_frontend/assets/htmlMode-C6O73C_r.js.br +0 -0
  77. package/dist/_frontend/assets/htmlMode-C6O73C_r.js.gz +0 -0
  78. package/dist/_frontend/assets/{index-D8eVAzN5.css → index-BBGLYdJn.css} +1 -1
  79. package/dist/_frontend/assets/index-BBGLYdJn.css.br +0 -0
  80. package/dist/_frontend/assets/index-BBGLYdJn.css.gz +0 -0
  81. package/dist/_frontend/assets/index-D0Yf366e.js +18 -0
  82. package/dist/_frontend/assets/index-D0Yf366e.js.br +0 -0
  83. package/dist/_frontend/assets/index-D0Yf366e.js.gz +0 -0
  84. package/dist/_frontend/assets/{index-BW-oaxAt.js → index-DBjak9Sg.js} +4 -4
  85. package/dist/_frontend/assets/index-DBjak9Sg.js.br +0 -0
  86. package/dist/_frontend/assets/index-DBjak9Sg.js.gz +0 -0
  87. package/dist/_frontend/assets/index-DhA9jnhv.css +1 -0
  88. package/dist/_frontend/assets/index-DhA9jnhv.css.br +0 -0
  89. package/dist/_frontend/assets/index-DhA9jnhv.css.gz +0 -0
  90. package/dist/_frontend/assets/index-XpZpj5Rl.js +933 -0
  91. package/dist/_frontend/assets/index-XpZpj5Rl.js.br +0 -0
  92. package/dist/_frontend/assets/index-XpZpj5Rl.js.gz +0 -0
  93. package/dist/_frontend/assets/{javascript-Cs0N3w-s.js → javascript-CrSAQdU4.js} +1 -1
  94. package/dist/_frontend/assets/{jsonMode-CqrfFSVA.js → jsonMode-Dal25yu2.js} +4 -4
  95. package/dist/_frontend/assets/jsonMode-Dal25yu2.js.br +0 -0
  96. package/dist/_frontend/assets/jsonMode-Dal25yu2.js.gz +0 -0
  97. package/dist/_frontend/assets/{liquid-C11lKF6J.js → liquid-Ci7gjLGv.js} +1 -1
  98. package/dist/_frontend/assets/liquid-Ci7gjLGv.js.br +0 -0
  99. package/dist/_frontend/assets/liquid-Ci7gjLGv.js.gz +0 -0
  100. package/dist/_frontend/assets/{lspLanguageFeatures-DBZtnSMo.js → lspLanguageFeatures-rM-QiA57.js} +1 -1
  101. package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.br +0 -0
  102. package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.gz +0 -0
  103. package/dist/_frontend/assets/{mdx-CCo4oKJJ.js → mdx-J3rSuJw4.js} +1 -1
  104. package/dist/_frontend/assets/mdx-J3rSuJw4.js.br +0 -0
  105. package/dist/_frontend/assets/mdx-J3rSuJw4.js.gz +0 -0
  106. package/dist/_frontend/assets/{python-627g_SSG.js → python-BSpXGEco.js} +1 -1
  107. package/dist/_frontend/assets/python-BSpXGEco.js.br +0 -0
  108. package/dist/_frontend/assets/python-BSpXGEco.js.gz +0 -0
  109. package/dist/_frontend/assets/{razor-BGDxoA7p.js → razor-DLV1uhEc.js} +1 -1
  110. package/dist/_frontend/assets/razor-DLV1uhEc.js.br +0 -0
  111. package/dist/_frontend/assets/razor-DLV1uhEc.js.gz +0 -0
  112. package/dist/_frontend/assets/{tsMode-gPT7Bbjh.js → tsMode-CQqRu3mP.js} +1 -1
  113. package/dist/_frontend/assets/tsMode-CQqRu3mP.js.br +0 -0
  114. package/dist/_frontend/assets/tsMode-CQqRu3mP.js.gz +0 -0
  115. package/dist/_frontend/assets/{typescript-Cb0PzreF.js → typescript-BExfm66c.js} +1 -1
  116. package/dist/_frontend/assets/typescript-BExfm66c.js.br +0 -0
  117. package/dist/_frontend/assets/typescript-BExfm66c.js.gz +0 -0
  118. package/dist/_frontend/assets/{workers-BAgwFgJ0.js → workers-Cn25A5Lb.js} +1 -1
  119. package/dist/_frontend/assets/workers-Cn25A5Lb.js.br +0 -0
  120. package/dist/_frontend/assets/workers-Cn25A5Lb.js.gz +0 -0
  121. package/dist/_frontend/assets/{xml-BpvCCHF9.js → xml-D2IDD-hb.js} +1 -1
  122. package/dist/_frontend/assets/xml-D2IDD-hb.js.br +0 -0
  123. package/dist/_frontend/assets/xml-D2IDD-hb.js.gz +0 -0
  124. package/dist/_frontend/assets/{yaml-f3XKmHoH.js → yaml-CY4c2A0Y.js} +1 -1
  125. package/dist/_frontend/assets/yaml-CY4c2A0Y.js.br +0 -0
  126. package/dist/_frontend/assets/yaml-CY4c2A0Y.js.gz +0 -0
  127. package/dist/_frontend/index.html +5 -2
  128. package/dist/controller-main.js +119 -21
  129. package/dist/controller-main.js.map +1 -1
  130. package/dist/main.js +15177 -13274
  131. package/dist/main.js.map +1 -1
  132. package/dist/postgres/migrations/20260831_000001_session_external_id.js.map +1 -1
  133. package/dist/postgres/migrations/20260902_000002_agent_external_id.js.map +1 -1
  134. package/dist/postgres/migrations/20260903_000002_created_by_subject.js +1 -1
  135. package/dist/postgres/migrations/20260903_000002_created_by_subject.js.map +1 -1
  136. package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js.map +1 -1
  137. package/dist/postgres/migrations/20260904_000002_session_source.js +31 -0
  138. package/dist/postgres/migrations/20260904_000002_session_source.js.map +1 -0
  139. package/dist/postgres/migrations/20260904_000003_session_metadata_gin.js +24 -0
  140. package/dist/postgres/migrations/20260904_000003_session_metadata_gin.js.map +1 -0
  141. package/dist/postgres/migrations/20260907_000001_schedule_run_reason.js +15 -0
  142. package/dist/postgres/migrations/20260907_000001_schedule_run_reason.js.map +1 -0
  143. package/dist/sqlite/migrations/20260831_000001_session_external_id.js.map +1 -1
  144. package/dist/sqlite/migrations/20260902_000001_session_metadata.js.map +1 -1
  145. package/dist/sqlite/migrations/20260902_000002_agent_external_id.js.map +1 -1
  146. package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js.map +1 -1
  147. package/dist/sqlite/migrations/20260903_000002_created_by_subject.js +1 -1
  148. package/dist/sqlite/migrations/20260903_000002_created_by_subject.js.map +1 -1
  149. package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js.map +1 -1
  150. package/dist/sqlite/migrations/20260904_000002_session_source.js +28 -0
  151. package/dist/sqlite/migrations/20260904_000002_session_source.js.map +1 -0
  152. package/dist/sqlite/migrations/20260907_000001_schedule_run_reason.js +17 -0
  153. package/dist/sqlite/migrations/20260907_000001_schedule_run_reason.js.map +1 -0
  154. package/package.json +17 -16
  155. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js +0 -1
  156. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.br +0 -0
  157. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.gz +0 -0
  158. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js +0 -1
  159. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.br +0 -0
  160. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.gz +0 -0
  161. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.br +0 -0
  162. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.gz +0 -0
  163. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js +0 -1
  164. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.br +0 -0
  165. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.gz +0 -0
  166. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js +0 -1
  167. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.br +0 -0
  168. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.gz +0 -0
  169. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js +0 -1
  170. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.br +0 -0
  171. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.gz +0 -0
  172. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js +0 -1
  173. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.br +0 -0
  174. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.gz +0 -0
  175. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js +0 -2
  176. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.br +0 -0
  177. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.gz +0 -0
  178. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js +0 -1
  179. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.br +0 -0
  180. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.gz +0 -0
  181. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js +0 -1
  182. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.br +0 -0
  183. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.gz +0 -0
  184. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js +0 -1
  185. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.br +0 -0
  186. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.gz +0 -0
  187. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js +0 -2
  188. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.br +0 -0
  189. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.gz +0 -0
  190. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js +0 -1
  191. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.br +0 -0
  192. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.gz +0 -0
  193. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js +0 -2
  194. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.br +0 -0
  195. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.gz +0 -0
  196. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js +0 -1
  197. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.br +0 -0
  198. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.gz +0 -0
  199. package/dist/_frontend/assets/TrueForgeUIWithRouter-MZVJWJMB-CZ8BOF1k.js +0 -1
  200. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js +0 -1
  201. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.br +0 -0
  202. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.gz +0 -0
  203. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.br +0 -0
  204. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.gz +0 -0
  205. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js +0 -1
  206. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.br +0 -0
  207. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.gz +0 -0
  208. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js +0 -2
  209. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.br +0 -0
  210. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.gz +0 -0
  211. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js +0 -1
  212. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.br +0 -0
  213. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.gz +0 -0
  214. package/dist/_frontend/assets/cssMode-CVefs5W-.js +0 -1
  215. package/dist/_frontend/assets/cssMode-CVefs5W-.js.br +0 -0
  216. package/dist/_frontend/assets/cssMode-CVefs5W-.js.gz +0 -0
  217. package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.br +0 -0
  218. package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.gz +0 -0
  219. package/dist/_frontend/assets/handlebars-C97jT8Zn.js.br +0 -0
  220. package/dist/_frontend/assets/handlebars-C97jT8Zn.js.gz +0 -0
  221. package/dist/_frontend/assets/html-DKtvlaWU.js.br +0 -0
  222. package/dist/_frontend/assets/html-DKtvlaWU.js.gz +0 -0
  223. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js +0 -1
  224. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.br +0 -0
  225. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.gz +0 -0
  226. package/dist/_frontend/assets/index-BW-oaxAt.js.br +0 -0
  227. package/dist/_frontend/assets/index-BW-oaxAt.js.gz +0 -0
  228. package/dist/_frontend/assets/index-CB2SckMT.css +0 -1
  229. package/dist/_frontend/assets/index-CB2SckMT.css.br +0 -0
  230. package/dist/_frontend/assets/index-CB2SckMT.css.gz +0 -0
  231. package/dist/_frontend/assets/index-D8eVAzN5.css.br +0 -0
  232. package/dist/_frontend/assets/index-D8eVAzN5.css.gz +0 -0
  233. package/dist/_frontend/assets/index-DVCxCjDg.js +0 -923
  234. package/dist/_frontend/assets/index-DVCxCjDg.js.br +0 -0
  235. package/dist/_frontend/assets/index-DVCxCjDg.js.gz +0 -0
  236. package/dist/_frontend/assets/index-DuKoX4ct.js +0 -18
  237. package/dist/_frontend/assets/index-DuKoX4ct.js.br +0 -0
  238. package/dist/_frontend/assets/index-DuKoX4ct.js.gz +0 -0
  239. package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.br +0 -0
  240. package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.gz +0 -0
  241. package/dist/_frontend/assets/liquid-C11lKF6J.js.br +0 -0
  242. package/dist/_frontend/assets/liquid-C11lKF6J.js.gz +0 -0
  243. package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.br +0 -0
  244. package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.gz +0 -0
  245. package/dist/_frontend/assets/mdx-CCo4oKJJ.js.br +0 -0
  246. package/dist/_frontend/assets/mdx-CCo4oKJJ.js.gz +0 -0
  247. package/dist/_frontend/assets/python-627g_SSG.js.br +0 -0
  248. package/dist/_frontend/assets/python-627g_SSG.js.gz +0 -0
  249. package/dist/_frontend/assets/razor-BGDxoA7p.js.br +0 -0
  250. package/dist/_frontend/assets/razor-BGDxoA7p.js.gz +0 -0
  251. package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.br +0 -0
  252. package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.gz +0 -0
  253. package/dist/_frontend/assets/typescript-Cb0PzreF.js.br +0 -0
  254. package/dist/_frontend/assets/typescript-Cb0PzreF.js.gz +0 -0
  255. package/dist/_frontend/assets/workers-BAgwFgJ0.js.br +0 -0
  256. package/dist/_frontend/assets/workers-BAgwFgJ0.js.gz +0 -0
  257. package/dist/_frontend/assets/xml-BpvCCHF9.js.br +0 -0
  258. package/dist/_frontend/assets/xml-BpvCCHF9.js.gz +0 -0
  259. package/dist/_frontend/assets/yaml-f3XKmHoH.js.br +0 -0
  260. package/dist/_frontend/assets/yaml-f3XKmHoH.js.gz +0 -0
@@ -1 +1 @@
1
- import{l as e}from"./index-BW-oaxAt.js";import"./index-DVCxCjDg.js";const o={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:e.IndentAction.Indent}}]},r={tokenPostfix:".yaml",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["true","True","TRUE","false","False","FALSE","null","Null","Null","~"],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/%[^ ]+.*$/,"meta.directive"],[/---/,"operators.directivesEnd"],[/\.{3}/,"operators.documentEnd"],[/[-?:](?= )/,"operators"],{include:"@anchor"},{include:"@tagHandle"},{include:"@flowCollections"},{include:"@blockStyle"},[/@numberInteger(?![ \t]*\S+)/,"number"],[/@numberFloat(?![ \t]*\S+)/,"number.float"],[/@numberOctal(?![ \t]*\S+)/,"number.octal"],[/@numberHex(?![ \t]*\S+)/,"number.hex"],[/@numberInfinity(?![ \t]*\S+)/,"number.infinity"],[/@numberNaN(?![ \t]*\S+)/,"number.nan"],[/@numberDate(?![ \t]*\S+)/,"number.date"],[/(".*?"|'.*?'|[^#'"]*?)([ \t]*)(:)( |$)/,["type","white","operators","white"]],{include:"@flowScalars"},[/.+?(?=(\s+#|$))/,{cases:{"@keywords":"keyword","@default":"string"}}]],object:[{include:"@whitespace"},{include:"@comment"},[/\}/,"@brackets","@pop"],[/,/,"delimiter.comma"],[/:(?= )/,"operators"],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,"type"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\},]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],array:[{include:"@whitespace"},{include:"@comment"},[/\]/,"@brackets","@pop"],[/,/,"delimiter.comma"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\],]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],multiString:[[/^( +).+$/,"string","@multiStringContinued.$1"]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":"string","@default":{token:"@rematch",next:"@popall"}}}]],whitespace:[[/[ \t\r\n]+/,"white"]],comment:[[/#.*$/,"comment"]],flowCollections:[[/\[/,"@brackets","@array"],[/\{/,"@brackets","@object"]],flowScalars:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'[^']*'/,"string"],[/"/,"string","@doubleQuotedString"]],doubleQuotedString:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],blockStyle:[[/[>|][0-9]*[+-]?$/,"operators","@multiString"]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,"number"],[/@numberFloat(?=[ \t]*[,\]\}])/,"number.float"],[/@numberOctal(?=[ \t]*[,\]\}])/,"number.octal"],[/@numberHex(?=[ \t]*[,\]\}])/,"number.hex"],[/@numberInfinity(?=[ \t]*[,\]\}])/,"number.infinity"],[/@numberNaN(?=[ \t]*[,\]\}])/,"number.nan"],[/@numberDate(?=[ \t]*[,\]\}])/,"number.date"]],tagHandle:[[/\![^ ]*/,"tag"]],anchor:[[/[&*][^ ]+/,"namespace"]]}};export{o as conf,r as language};
1
+ import{l as e}from"./index-DBjak9Sg.js";import"./index-XpZpj5Rl.js";const o={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:e.IndentAction.Indent}}]},r={tokenPostfix:".yaml",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["true","True","TRUE","false","False","FALSE","null","Null","Null","~"],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/%[^ ]+.*$/,"meta.directive"],[/---/,"operators.directivesEnd"],[/\.{3}/,"operators.documentEnd"],[/[-?:](?= )/,"operators"],{include:"@anchor"},{include:"@tagHandle"},{include:"@flowCollections"},{include:"@blockStyle"},[/@numberInteger(?![ \t]*\S+)/,"number"],[/@numberFloat(?![ \t]*\S+)/,"number.float"],[/@numberOctal(?![ \t]*\S+)/,"number.octal"],[/@numberHex(?![ \t]*\S+)/,"number.hex"],[/@numberInfinity(?![ \t]*\S+)/,"number.infinity"],[/@numberNaN(?![ \t]*\S+)/,"number.nan"],[/@numberDate(?![ \t]*\S+)/,"number.date"],[/(".*?"|'.*?'|[^#'"]*?)([ \t]*)(:)( |$)/,["type","white","operators","white"]],{include:"@flowScalars"},[/.+?(?=(\s+#|$))/,{cases:{"@keywords":"keyword","@default":"string"}}]],object:[{include:"@whitespace"},{include:"@comment"},[/\}/,"@brackets","@pop"],[/,/,"delimiter.comma"],[/:(?= )/,"operators"],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,"type"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\},]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],array:[{include:"@whitespace"},{include:"@comment"},[/\]/,"@brackets","@pop"],[/,/,"delimiter.comma"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\],]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],multiString:[[/^( +).+$/,"string","@multiStringContinued.$1"]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":"string","@default":{token:"@rematch",next:"@popall"}}}]],whitespace:[[/[ \t\r\n]+/,"white"]],comment:[[/#.*$/,"comment"]],flowCollections:[[/\[/,"@brackets","@array"],[/\{/,"@brackets","@object"]],flowScalars:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'[^']*'/,"string"],[/"/,"string","@doubleQuotedString"]],doubleQuotedString:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],blockStyle:[[/[>|][0-9]*[+-]?$/,"operators","@multiString"]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,"number"],[/@numberFloat(?=[ \t]*[,\]\}])/,"number.float"],[/@numberOctal(?=[ \t]*[,\]\}])/,"number.octal"],[/@numberHex(?=[ \t]*[,\]\}])/,"number.hex"],[/@numberInfinity(?=[ \t]*[,\]\}])/,"number.infinity"],[/@numberNaN(?=[ \t]*[,\]\}])/,"number.nan"],[/@numberDate(?=[ \t]*[,\]\}])/,"number.date"]],tagHandle:[[/\![^ ]*/,"tag"]],anchor:[[/[&*][^ ]+/,"namespace"]]}};export{o as conf,r as language};
@@ -5,8 +5,11 @@
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>TrueForge</title>
8
- <script type="module" crossorigin src="/assets/index-DVCxCjDg.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-D8eVAzN5.css">
8
+ <script>
9
+ window.__TRUEFORGE_BASE_PATH__ = '%%TRUEFORGE_BASE_PATH%%';
10
+ </script>
11
+ <script type="module" crossorigin src="%%TRUEFORGE_BASE_PATH%%assets/index-XpZpj5Rl.js"></script>
12
+ <link rel="stylesheet" crossorigin href="%%TRUEFORGE_BASE_PATH%%assets/index-BBGLYdJn.css">
10
13
  </head>
11
14
  <body>
12
15
  <div id="root"></div>
@@ -85,6 +85,38 @@ function parseBoolean(options) {
85
85
  }
86
86
  throw new Error(`Environment variable ${envKey} must be "true" or "false", got "${raw}"`);
87
87
  }
88
+ function parsePublicBaseUrl(raw) {
89
+ if (raw === void 0 || raw.trim() === "") {
90
+ return "";
91
+ }
92
+ let parsed;
93
+ try {
94
+ parsed = new URL(raw.trim());
95
+ } catch (error) {
96
+ throw new Error("PUBLIC_BASE_URL must be a valid URL", { cause: error });
97
+ }
98
+ if (parsed.search !== "" || parsed.hash !== "") {
99
+ throw new Error("PUBLIC_BASE_URL must not include a query or hash");
100
+ }
101
+ const segments = parsed.pathname.split("/").filter((part) => part.length > 0);
102
+ if (segments.some((part) => part === "." || part === "..")) {
103
+ throw new Error('PUBLIC_BASE_URL path must not contain "." or ".." segments');
104
+ }
105
+ const path3 = segments.length === 0 ? "" : `/${segments.join("/")}`;
106
+ return `${parsed.origin}${path3}`;
107
+ }
108
+ function parseTrueFoundrySandboxProvider(raw) {
109
+ if (raw === void 0 || raw.trim() === "") {
110
+ return void 0;
111
+ }
112
+ const value = raw.trim();
113
+ if (value === "daytona" || value === "truefoundry") {
114
+ return value;
115
+ }
116
+ throw new Error(
117
+ `Environment variable TRUEFOUNDRY_SANDBOX_PROVIDER must be "daytona" or "truefoundry", got ${JSON.stringify(raw)}`
118
+ );
119
+ }
88
120
  function parsePostgresSslMode(raw) {
89
121
  if (!raw) {
90
122
  return "";
@@ -296,7 +328,7 @@ var shared = {
296
328
  raw: getEnv("REDIS_REQUEST_REPLY_POLL_INTERVAL_MS"),
297
329
  defaultValue: 500
298
330
  }),
299
- PUBLIC_BASE_URL: getEnv("PUBLIC_BASE_URL", { defaultValue: "" }) ?? "",
331
+ PUBLIC_BASE_URL: parsePublicBaseUrl(getEnv("PUBLIC_BASE_URL", { defaultValue: "" })),
300
332
  SERVER_URL: getEnv("SERVER_URL", { defaultValue: `http://localhost:${String(port)}` }) ?? `http://localhost:${String(port)}`,
301
333
  TRUEFORGE_MTLS_ENABLED: parseBoolean({
302
334
  envKey: "TRUEFORGE_MTLS_ENABLED",
@@ -333,6 +365,7 @@ var configuration = standalone ? {
333
365
  REDIS_URL: resolveRedisUrl(),
334
366
  OIDC: resolveOIDCConfig(),
335
367
  TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL: getEnv("TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL", { required: false }),
368
+ TRUEFOUNDRY_API_KEY: getEnv("TRUEFOUNDRY_API_KEY", { required: false }),
336
369
  TRUEFOUNDRY_SERVICEFOUNDRY_HTTP_TIMEOUT_MS: parsePositiveInt({
337
370
  envKey: "TRUEFOUNDRY_SERVICEFOUNDRY_HTTP_TIMEOUT_MS",
338
371
  raw: getEnv("TRUEFOUNDRY_SERVICEFOUNDRY_HTTP_TIMEOUT_MS"),
@@ -348,7 +381,18 @@ var configuration = standalone ? {
348
381
  raw: getEnv("TRUEFOUNDRY_MTLS_ENABLED"),
349
382
  defaultValue: false
350
383
  }),
351
- TRUEFOUNDRY_MTLS_CERTS_DIR: getEnv("TRUEFOUNDRY_MTLS_CERTS_DIR", { defaultValue: "/etc/tls/truefoundry" }) ?? "/etc/tls/truefoundry"
384
+ TRUEFOUNDRY_MTLS_CERTS_DIR: getEnv("TRUEFOUNDRY_MTLS_CERTS_DIR", { defaultValue: "/etc/tls/truefoundry" }) ?? "/etc/tls/truefoundry",
385
+ TRUEFOUNDRY_SANDBOX_ENABLED: parseBoolean({
386
+ envKey: "TRUEFOUNDRY_SANDBOX_ENABLED",
387
+ raw: getEnv("TRUEFOUNDRY_SANDBOX_ENABLED"),
388
+ defaultValue: false
389
+ }),
390
+ TRUEFOUNDRY_SANDBOX_PROVIDER: parseTrueFoundrySandboxProvider(
391
+ getEnv("TRUEFOUNDRY_SANDBOX_PROVIDER", { required: false })
392
+ ),
393
+ TRUEFOUNDRY_SANDBOX_API_KEY: getEnv("TRUEFOUNDRY_SANDBOX_API_KEY", { required: false }),
394
+ TRUEFOUNDRY_SANDBOX_SERVER_URL: getEnv("TRUEFOUNDRY_SANDBOX_SERVER_URL", { required: false }),
395
+ TRUEFOUNDRY_SANDBOX_SETTINGS: getEnv("TRUEFOUNDRY_SANDBOX_SETTINGS", { required: false })
352
396
  };
353
397
  function isOidcConfigured(value) {
354
398
  return !value.STANDALONE && value.OIDC !== void 0;
@@ -356,10 +400,42 @@ function isOidcConfigured(value) {
356
400
  function isTrueFoundryModeEnabled(config = configuration) {
357
401
  return !config.STANDALONE && config.TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL !== void 0;
358
402
  }
359
- if (isTrueFoundryModeEnabled(configuration) && isOidcConfigured(configuration)) {
360
- throw new Error(
361
- "TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL (TrueFoundry mode) and OIDC (SSO) cannot both be enabled at once."
362
- );
403
+ if (isTrueFoundryModeEnabled(configuration)) {
404
+ if (isOidcConfigured(configuration)) {
405
+ throw new Error(
406
+ "TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL (TrueFoundry mode) and OIDC (SSO) cannot both be enabled at once."
407
+ );
408
+ }
409
+ if (configuration.TRUEFOUNDRY_API_KEY === void 0) {
410
+ throw new Error("TRUEFOUNDRY_API_KEY is required when TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL is set.");
411
+ }
412
+ if (configuration.TRUEFOUNDRY_SANDBOX_ENABLED) {
413
+ if (configuration.TRUEFOUNDRY_SANDBOX_PROVIDER === void 0) {
414
+ throw new Error(
415
+ 'TRUEFOUNDRY_SANDBOX_ENABLED is true but TRUEFOUNDRY_SANDBOX_PROVIDER is not set. Set TRUEFOUNDRY_SANDBOX_PROVIDER to "daytona" or "truefoundry", or set TRUEFOUNDRY_SANDBOX_ENABLED=false.'
416
+ );
417
+ }
418
+ if (configuration.TRUEFOUNDRY_SANDBOX_SETTINGS === void 0) {
419
+ throw new Error(
420
+ "TRUEFOUNDRY_SANDBOX_ENABLED is true but TRUEFOUNDRY_SANDBOX_SETTINGS is not set. Provide a JSON settings object, or set TRUEFOUNDRY_SANDBOX_ENABLED=false."
421
+ );
422
+ }
423
+ try {
424
+ JSON.parse(configuration.TRUEFOUNDRY_SANDBOX_SETTINGS);
425
+ } catch (error) {
426
+ throw new Error("TRUEFOUNDRY_SANDBOX_SETTINGS must be valid JSON", { cause: error });
427
+ }
428
+ if (configuration.TRUEFOUNDRY_SANDBOX_PROVIDER === "daytona" && configuration.TRUEFOUNDRY_SANDBOX_API_KEY === void 0) {
429
+ throw new Error(
430
+ "TRUEFOUNDRY_SANDBOX_PROVIDER=daytona requires TRUEFOUNDRY_SANDBOX_API_KEY, or set TRUEFOUNDRY_SANDBOX_ENABLED=false."
431
+ );
432
+ }
433
+ if (configuration.TRUEFOUNDRY_SANDBOX_PROVIDER === "truefoundry" && configuration.TRUEFOUNDRY_SANDBOX_SERVER_URL === void 0) {
434
+ throw new Error(
435
+ "TRUEFOUNDRY_SANDBOX_PROVIDER=truefoundry requires TRUEFOUNDRY_SANDBOX_SERVER_URL, or set TRUEFOUNDRY_SANDBOX_ENABLED=false."
436
+ );
437
+ }
438
+ }
363
439
  }
364
440
  var config_default = configuration;
365
441
 
@@ -538,10 +614,14 @@ var ScheduleRunSchema = z2.object({
538
614
  status: ScheduleRunStatusSchema,
539
615
  created_by_subject: CreatedBySubjectSchema,
540
616
  triggered_at: NullableIsoTimestamp,
617
+ reason: z2.string().nullable(),
541
618
  created_at: IsoTimestamp,
542
619
  updated_at: IsoTimestamp
543
620
  }).strict().openapi("ScheduleRun");
544
- var ListScheduleRunsResponseSchema = z2.object({ data: z2.array(ScheduleRunSchema) }).openapi("ListScheduleRunsResponse");
621
+ var ListScheduleRunsResponseSchema = z2.object({
622
+ data: z2.array(ScheduleRunSchema),
623
+ pagination: TokenPaginationSchema
624
+ }).openapi("ListScheduleRunsResponse");
545
625
  var CreateScheduleRunRequestSchema = z2.object({
546
626
  schedule_id: z2.string().min(1).max(64).describe("Immutable schedule identifier.")
547
627
  }).strict().describe("Trigger an immediate run for the given schedule. The task is taken from the schedule manifest.").openapi("CreateScheduleRunRequest");
@@ -593,13 +673,17 @@ function nextTriggerAfter(input) {
593
673
 
594
674
  // src/controller/scheduleDispatch.ts
595
675
  var DISPATCH_BATCH_LIMIT = 20;
676
+ function scheduleRunFailureReason(error) {
677
+ return error instanceof Error && error.message.trim() !== "" ? error.message : "Schedule run failed";
678
+ }
596
679
  var SCHEDULE_DISPATCH_INTERVAL_MS = 6e4;
597
680
  var SCHEDULE_DISPATCH_LOOP_NAME = "schedule-dispatch";
598
681
  function executeScheduledRun(client) {
599
682
  return async ({ run, schedule }) => {
600
683
  const { data: session } = await client.internal.sessions.getOrCreateByExternalId({
601
684
  externalId: run.id,
602
- agent: { name: schedule.agent_name }
685
+ agent: { name: schedule.agent_name },
686
+ source: { type: "schedule", id: schedule.id, runId: run.id }
603
687
  });
604
688
  const turns = await client.sessions.listTurns(session.id, { limit: 1 });
605
689
  if (turns.data.length > 0) {
@@ -612,10 +696,13 @@ function executeScheduledRun(client) {
612
696
  };
613
697
  }
614
698
  async function finishScheduledRun(params) {
615
- const { store, withTransaction, run, status, now: now2 } = params;
699
+ const { store, withTransaction, run, status, reason, now: now2 } = params;
616
700
  await withTransaction(async (txn) => {
617
701
  const latest = await store.getScheduleForUpdate({ tenant_id: run.tenant_id, id: run.schedule_id }, txn);
618
- const updated = await store.updateRunStatus({ tenant_id: run.tenant_id, id: run.id, status }, txn);
702
+ const updated = await store.updateRunStatus(
703
+ { tenant_id: run.tenant_id, id: run.id, status, reason: reason ?? null },
704
+ txn
705
+ );
619
706
  if (updated === void 0) {
620
707
  return;
621
708
  }
@@ -680,6 +767,7 @@ async function dispatchScheduledRuns(params) {
680
767
  run,
681
768
  now: now2,
682
769
  status: "failed",
770
+ reason: scheduleRunFailureReason(error),
683
771
  withTransaction
684
772
  });
685
773
  failed += 1;
@@ -890,10 +978,12 @@ function isUniqueViolation(err) {
890
978
  }
891
979
 
892
980
  // src/db/postgres/schedule-store/PostgresScheduleStore.ts
981
+ import { CreatedBySubjectSchema as CreatedBySubjectSchema2 } from "@truefoundry/trueforge-core/agent-session";
893
982
  import {
894
983
  decodeOffsetPageToken,
895
984
  paginateOffsetRows
896
985
  } from "@truefoundry/trueforge-core/agent-session/store/OffsetPageToken";
986
+ import { sql as sql3 } from "kysely";
897
987
 
898
988
  // src/utils/id.ts
899
989
  import { ulid } from "ulid";
@@ -901,12 +991,6 @@ function newId() {
901
991
  return ulid().toLowerCase();
902
992
  }
903
993
 
904
- // src/db/createdBySubject.ts
905
- import { CreatedBySubjectSchema as CreatedBySubjectSchema2 } from "@truefoundry/trueforge-core/agent-session";
906
- function parseStoredCreatedBySubject(value) {
907
- return CreatedBySubjectSchema2.parse(value);
908
- }
909
-
910
994
  // src/db/postgres/sqlExpressions.ts
911
995
  import { sql as sql2 } from "kysely";
912
996
  function json(value) {
@@ -940,7 +1024,7 @@ function toScheduleRecord(row) {
940
1024
  name: row.name,
941
1025
  manifest: parseStoredScheduleManifest(row.manifest),
942
1026
  status: row.status,
943
- created_by_subject: parseStoredCreatedBySubject(row.created_by_subject),
1027
+ created_by_subject: CreatedBySubjectSchema2.parse(row.created_by_subject),
944
1028
  created_at: row.created_at.toISOString(),
945
1029
  updated_at: row.updated_at.toISOString()
946
1030
  };
@@ -953,8 +1037,9 @@ function toRunRecord(row) {
953
1037
  name: row.name,
954
1038
  scheduled_for: row.scheduled_for.toISOString(),
955
1039
  status: row.status,
956
- created_by_subject: parseStoredCreatedBySubject(row.created_by_subject),
1040
+ created_by_subject: CreatedBySubjectSchema2.parse(row.created_by_subject),
957
1041
  triggered_at: row.triggered_at === null ? null : row.triggered_at.toISOString(),
1042
+ reason: row.reason,
958
1043
  created_at: row.created_at.toISOString(),
959
1044
  updated_at: row.updated_at.toISOString()
960
1045
  };
@@ -1074,10 +1159,20 @@ var PostgresScheduleStore = class {
1074
1159
  const { data, pagination } = paginateOffsetRows(rows, input.limit, offset);
1075
1160
  return { data: data.map(toScheduleRecord), pagination };
1076
1161
  }
1162
+ async getOwnedIds(input, transaction) {
1163
+ if (input.ids.length === 0) {
1164
+ return [];
1165
+ }
1166
+ const db = transaction ?? this.#db;
1167
+ const rows = await db.selectFrom("schedule").select("id").where("tenant_id", "=", input.tenant_id).where("id", "in", [...input.ids]).where(sql3`created_by_subject->>'subject_id'`, "=", input.subject_id).execute();
1168
+ return rows.map((row) => row.id);
1169
+ }
1077
1170
  async listRuns(input, transaction) {
1171
+ const offset = decodeOffsetPageToken(input.page_token);
1078
1172
  const db = transaction ?? this.#db;
1079
- const rows = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).orderBy("scheduled_for", "desc").orderBy("id").execute();
1080
- return rows.map(toRunRecord);
1173
+ const rows = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).orderBy("scheduled_for", "desc").orderBy("id").limit(input.limit + 1).offset(offset).execute();
1174
+ const { data, pagination } = paginateOffsetRows(rows, input.limit, offset);
1175
+ return { data: data.map(toRunRecord), pagination };
1081
1176
  }
1082
1177
  async getRun(input, transaction) {
1083
1178
  const db = transaction ?? this.#db;
@@ -1101,6 +1196,7 @@ var PostgresScheduleStore = class {
1101
1196
  status: input.status,
1102
1197
  created_by_subject: json(input.created_by_subject),
1103
1198
  triggered_at: input.triggered_at ?? null,
1199
+ reason: input.reason ?? null,
1104
1200
  created_at: now(),
1105
1201
  updated_at: now()
1106
1202
  }).returningAll().executeTakeFirstOrThrow();
@@ -1114,7 +1210,9 @@ var PostgresScheduleStore = class {
1114
1210
  }
1115
1211
  async updateRunStatus(input, transaction) {
1116
1212
  const db = transaction ?? this.#db;
1117
- const patch = input.status === "triggered" ? { status: input.status, triggered_at: now(), updated_at: now() } : { status: input.status, updated_at: now() };
1213
+ const timestamp = now();
1214
+ const reason = input.status === "failed" ? input.reason ?? null : null;
1215
+ const patch = input.status === "triggered" ? { status: input.status, triggered_at: timestamp, reason, updated_at: timestamp } : { status: input.status, reason, updated_at: timestamp };
1118
1216
  const row = await db.updateTable("schedule_run").set(patch).where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).returningAll().executeTakeFirst();
1119
1217
  return row === void 0 ? void 0 : toRunRecord(row);
1120
1218
  }