@truefoundry/trueforge 0.1.4 → 0.2.0-rc.1

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 (252) hide show
  1. package/README.md +1 -1
  2. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js +1 -0
  3. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.br +0 -0
  4. package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.gz +0 -0
  5. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js +1 -0
  6. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.br +0 -0
  7. package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.gz +0 -0
  8. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js +1 -0
  9. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.br +0 -0
  10. package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.gz +0 -0
  11. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js +1 -0
  12. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.br +0 -0
  13. package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.gz +0 -0
  14. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js +1 -0
  15. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.br +0 -0
  16. package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.gz +0 -0
  17. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js +1 -0
  18. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.br +0 -0
  19. package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.gz +0 -0
  20. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js +1 -0
  21. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.br +0 -0
  22. package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.gz +0 -0
  23. package/dist/_frontend/assets/{DockLayout-2RWDSUKE-eKoTN8R3.js → DockLayout-LM4AFMFY-DoBwJ3-e.js} +1 -1
  24. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js +2 -0
  25. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.br +0 -0
  26. package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.gz +0 -0
  27. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js +1 -0
  28. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.br +0 -0
  29. package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.gz +0 -0
  30. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js +1 -0
  31. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.br +0 -0
  32. package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.gz +0 -0
  33. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js +1 -0
  34. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.br +0 -0
  35. package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.gz +0 -0
  36. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js +2 -0
  37. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.br +0 -0
  38. package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.gz +0 -0
  39. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js +1 -0
  40. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.br +0 -0
  41. package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.gz +0 -0
  42. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js +2 -0
  43. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.br +0 -0
  44. package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.gz +0 -0
  45. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js +1 -0
  46. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.br +0 -0
  47. package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.gz +0 -0
  48. package/dist/_frontend/assets/TrueForgeUIWithRouter-MZVJWJMB-CZ8BOF1k.js +1 -0
  49. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js +1 -0
  50. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.br +0 -0
  51. package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.gz +0 -0
  52. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js +12 -0
  53. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.br +0 -0
  54. package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.gz +0 -0
  55. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js +1 -0
  56. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.br +0 -0
  57. package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.gz +0 -0
  58. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js +2 -0
  59. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.br +0 -0
  60. package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.gz +0 -0
  61. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js +1 -0
  62. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.br +0 -0
  63. package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.gz +0 -0
  64. package/dist/_frontend/assets/{cssMode-CvKwYh_L.js → cssMode-CVefs5W-.js} +1 -1
  65. package/dist/_frontend/assets/cssMode-CVefs5W-.js.br +0 -0
  66. package/dist/_frontend/assets/cssMode-CVefs5W-.js.gz +0 -0
  67. package/dist/_frontend/assets/{freemarker2-Bb2yOpT3.js → freemarker2-mt8l8QVE.js} +1 -1
  68. package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.br +0 -0
  69. package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.gz +0 -0
  70. package/dist/_frontend/assets/{handlebars-FL3wsxe0.js → handlebars-C97jT8Zn.js} +1 -1
  71. package/dist/_frontend/assets/handlebars-C97jT8Zn.js.br +0 -0
  72. package/dist/_frontend/assets/handlebars-C97jT8Zn.js.gz +0 -0
  73. package/dist/_frontend/assets/{html-Cb3v_ZRD.js → html-DKtvlaWU.js} +1 -1
  74. package/dist/_frontend/assets/html-DKtvlaWU.js.br +0 -0
  75. package/dist/_frontend/assets/html-DKtvlaWU.js.gz +0 -0
  76. package/dist/_frontend/assets/{htmlMode-JQDvK0Qf.js → htmlMode-BHsrcqlc.js} +1 -1
  77. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.br +0 -0
  78. package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.gz +0 -0
  79. package/dist/_frontend/assets/{index-DRjgykCE.js → index-BW-oaxAt.js} +3 -3
  80. package/dist/_frontend/assets/index-BW-oaxAt.js.br +0 -0
  81. package/dist/_frontend/assets/index-BW-oaxAt.js.gz +0 -0
  82. package/dist/_frontend/assets/{index-DEKCw40W.css → index-D8eVAzN5.css} +1 -1
  83. package/dist/_frontend/assets/index-D8eVAzN5.css.br +0 -0
  84. package/dist/_frontend/assets/index-D8eVAzN5.css.gz +0 -0
  85. package/dist/_frontend/assets/index-DVCxCjDg.js +923 -0
  86. package/dist/_frontend/assets/index-DVCxCjDg.js.br +0 -0
  87. package/dist/_frontend/assets/index-DVCxCjDg.js.gz +0 -0
  88. package/dist/_frontend/assets/index-DuKoX4ct.js +18 -0
  89. package/dist/_frontend/assets/index-DuKoX4ct.js.br +0 -0
  90. package/dist/_frontend/assets/index-DuKoX4ct.js.gz +0 -0
  91. package/dist/_frontend/assets/{javascript-2WsgEpYV.js → javascript-Cs0N3w-s.js} +1 -1
  92. package/dist/_frontend/assets/{jsonMode-DnbseMlM.js → jsonMode-CqrfFSVA.js} +1 -1
  93. package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.br +0 -0
  94. package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.gz +0 -0
  95. package/dist/_frontend/assets/{liquid-DeE37I1e.js → liquid-C11lKF6J.js} +1 -1
  96. package/dist/_frontend/assets/liquid-C11lKF6J.js.br +0 -0
  97. package/dist/_frontend/assets/liquid-C11lKF6J.js.gz +0 -0
  98. package/dist/_frontend/assets/{lspLanguageFeatures-Bty8j9di.js → lspLanguageFeatures-DBZtnSMo.js} +1 -1
  99. package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.br +0 -0
  100. package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.gz +0 -0
  101. package/dist/_frontend/assets/{mdx-DfKPZX1Z.js → mdx-CCo4oKJJ.js} +1 -1
  102. package/dist/_frontend/assets/mdx-CCo4oKJJ.js.br +0 -0
  103. package/dist/_frontend/assets/mdx-CCo4oKJJ.js.gz +0 -0
  104. package/dist/_frontend/assets/{python-2i3Kiv75.js → python-627g_SSG.js} +1 -1
  105. package/dist/_frontend/assets/python-627g_SSG.js.br +0 -0
  106. package/dist/_frontend/assets/python-627g_SSG.js.gz +0 -0
  107. package/dist/_frontend/assets/{razor-B0N4vZnc.js → razor-BGDxoA7p.js} +1 -1
  108. package/dist/_frontend/assets/razor-BGDxoA7p.js.br +0 -0
  109. package/dist/_frontend/assets/razor-BGDxoA7p.js.gz +0 -0
  110. package/dist/_frontend/assets/{tsMode-D1Y8xh-o.js → tsMode-gPT7Bbjh.js} +1 -1
  111. package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.br +0 -0
  112. package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.gz +0 -0
  113. package/dist/_frontend/assets/{typescript-2nhip0PT.js → typescript-Cb0PzreF.js} +1 -1
  114. package/dist/_frontend/assets/typescript-Cb0PzreF.js.br +0 -0
  115. package/dist/_frontend/assets/typescript-Cb0PzreF.js.gz +0 -0
  116. package/dist/_frontend/assets/{workers-DSmTvA39.js → workers-BAgwFgJ0.js} +1 -1
  117. package/dist/_frontend/assets/workers-BAgwFgJ0.js.br +0 -0
  118. package/dist/_frontend/assets/workers-BAgwFgJ0.js.gz +0 -0
  119. package/dist/_frontend/assets/{xml-CA4M6Pks.js → xml-BpvCCHF9.js} +1 -1
  120. package/dist/_frontend/assets/xml-BpvCCHF9.js.br +0 -0
  121. package/dist/_frontend/assets/xml-BpvCCHF9.js.gz +0 -0
  122. package/dist/_frontend/assets/{yaml-D5KNk7Ji.js → yaml-f3XKmHoH.js} +1 -1
  123. package/dist/_frontend/assets/yaml-f3XKmHoH.js.br +0 -0
  124. package/dist/_frontend/assets/yaml-f3XKmHoH.js.gz +0 -0
  125. package/dist/_frontend/index.html +2 -31
  126. package/dist/controller-main.js +1259 -0
  127. package/dist/controller-main.js.map +1 -0
  128. package/dist/main.js +10419 -5343
  129. package/dist/main.js.map +1 -1
  130. package/dist/postgres/migrations/20260821_000001_agent_compaction.js +63 -0
  131. package/dist/postgres/migrations/20260821_000001_agent_compaction.js.map +1 -0
  132. package/dist/postgres/migrations/20260827_000001_schedule.js +40 -0
  133. package/dist/postgres/migrations/20260827_000001_schedule.js.map +1 -0
  134. package/dist/postgres/migrations/20260827_000001_session_metrics.js +25 -0
  135. package/dist/postgres/migrations/20260827_000001_session_metrics.js.map +1 -0
  136. package/dist/postgres/migrations/20260828_000001_schedule_name_uq.js +15 -0
  137. package/dist/postgres/migrations/20260828_000001_schedule_name_uq.js.map +1 -0
  138. package/dist/postgres/migrations/20260831_000001_session_external_id.js +26 -0
  139. package/dist/postgres/migrations/20260831_000001_session_external_id.js.map +1 -0
  140. package/dist/postgres/migrations/20260901_000001_agent_metadata.js +18 -0
  141. package/dist/postgres/migrations/20260901_000001_agent_metadata.js.map +1 -0
  142. package/dist/postgres/migrations/20260902_000001_session_metadata.js +15 -0
  143. package/dist/postgres/migrations/20260902_000001_session_metadata.js.map +1 -0
  144. package/dist/postgres/migrations/20260902_000002_agent_external_id.js +26 -0
  145. package/dist/postgres/migrations/20260902_000002_agent_external_id.js.map +1 -0
  146. package/dist/postgres/migrations/20260903_000001_drop_agent_metadata.js +18 -0
  147. package/dist/postgres/migrations/20260903_000001_drop_agent_metadata.js.map +1 -0
  148. package/dist/postgres/migrations/20260903_000002_created_by_subject.js +110 -0
  149. package/dist/postgres/migrations/20260903_000002_created_by_subject.js.map +1 -0
  150. package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js +48 -0
  151. package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js.map +1 -0
  152. package/dist/sqlite/migrations/20260821_000001_agent_compaction.js +69 -0
  153. package/dist/sqlite/migrations/20260821_000001_agent_compaction.js.map +1 -0
  154. package/dist/sqlite/migrations/20260827_000001_schedule.js +69 -0
  155. package/dist/sqlite/migrations/20260827_000001_schedule.js.map +1 -0
  156. package/dist/sqlite/migrations/20260827_000001_session_metrics.js +165 -0
  157. package/dist/sqlite/migrations/20260827_000001_session_metrics.js.map +1 -0
  158. package/dist/sqlite/migrations/20260828_000001_schedule_name_uq.js +20 -0
  159. package/dist/sqlite/migrations/20260828_000001_schedule_name_uq.js.map +1 -0
  160. package/dist/sqlite/migrations/20260831_000001_session_external_id.js +28 -0
  161. package/dist/sqlite/migrations/20260831_000001_session_external_id.js.map +1 -0
  162. package/dist/sqlite/migrations/20260901_000001_agent_metadata.js +92 -0
  163. package/dist/sqlite/migrations/20260901_000001_agent_metadata.js.map +1 -0
  164. package/dist/sqlite/migrations/20260902_000001_session_metadata.js +197 -0
  165. package/dist/sqlite/migrations/20260902_000001_session_metadata.js.map +1 -0
  166. package/dist/sqlite/migrations/20260902_000002_agent_external_id.js +28 -0
  167. package/dist/sqlite/migrations/20260902_000002_agent_external_id.js.map +1 -0
  168. package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js +114 -0
  169. package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js.map +1 -0
  170. package/dist/sqlite/migrations/20260903_000002_created_by_subject.js +496 -0
  171. package/dist/sqlite/migrations/20260903_000002_created_by_subject.js.map +1 -0
  172. package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js +131 -0
  173. package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js.map +1 -0
  174. package/package.json +31 -24
  175. package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js +0 -1
  176. package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js.br +0 -0
  177. package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js.gz +0 -0
  178. package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js +0 -2
  179. package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js.br +0 -0
  180. package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js.gz +0 -0
  181. package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js +0 -1
  182. package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js.br +0 -0
  183. package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js.gz +0 -0
  184. package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js +0 -1
  185. package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js.br +0 -0
  186. package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js.gz +0 -0
  187. package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js +0 -2
  188. package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js.br +0 -0
  189. package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js.gz +0 -0
  190. package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js +0 -1
  191. package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js.br +0 -0
  192. package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js.gz +0 -0
  193. package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js +0 -2
  194. package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js.br +0 -0
  195. package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js.gz +0 -0
  196. package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js +0 -1
  197. package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js.br +0 -0
  198. package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js.gz +0 -0
  199. package/dist/_frontend/assets/TrueForgeUIWithRouter-RKZ2E7PV-CoVbEgto.js +0 -1
  200. package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js +0 -1
  201. package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js.br +0 -0
  202. package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js.gz +0 -0
  203. package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js +0 -12
  204. package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js.br +0 -0
  205. package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js.gz +0 -0
  206. package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js +0 -4
  207. package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js.br +0 -0
  208. package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js.gz +0 -0
  209. package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js +0 -2
  210. package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js.br +0 -0
  211. package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js.gz +0 -0
  212. package/dist/_frontend/assets/cssMode-CvKwYh_L.js.br +0 -0
  213. package/dist/_frontend/assets/cssMode-CvKwYh_L.js.gz +0 -0
  214. package/dist/_frontend/assets/freemarker2-Bb2yOpT3.js.br +0 -0
  215. package/dist/_frontend/assets/freemarker2-Bb2yOpT3.js.gz +0 -0
  216. package/dist/_frontend/assets/handlebars-FL3wsxe0.js.br +0 -0
  217. package/dist/_frontend/assets/handlebars-FL3wsxe0.js.gz +0 -0
  218. package/dist/_frontend/assets/html-Cb3v_ZRD.js.br +0 -0
  219. package/dist/_frontend/assets/html-Cb3v_ZRD.js.gz +0 -0
  220. package/dist/_frontend/assets/htmlMode-JQDvK0Qf.js.br +0 -0
  221. package/dist/_frontend/assets/htmlMode-JQDvK0Qf.js.gz +0 -0
  222. package/dist/_frontend/assets/index-DEKCw40W.css.br +0 -0
  223. package/dist/_frontend/assets/index-DEKCw40W.css.gz +0 -0
  224. package/dist/_frontend/assets/index-DJ1uWGdt.js +0 -859
  225. package/dist/_frontend/assets/index-DJ1uWGdt.js.br +0 -0
  226. package/dist/_frontend/assets/index-DJ1uWGdt.js.gz +0 -0
  227. package/dist/_frontend/assets/index-DRjgykCE.js.br +0 -0
  228. package/dist/_frontend/assets/index-DRjgykCE.js.gz +0 -0
  229. package/dist/_frontend/assets/jsonMode-DnbseMlM.js.br +0 -0
  230. package/dist/_frontend/assets/jsonMode-DnbseMlM.js.gz +0 -0
  231. package/dist/_frontend/assets/liquid-DeE37I1e.js.br +0 -0
  232. package/dist/_frontend/assets/liquid-DeE37I1e.js.gz +0 -0
  233. package/dist/_frontend/assets/lspLanguageFeatures-Bty8j9di.js.br +0 -0
  234. package/dist/_frontend/assets/lspLanguageFeatures-Bty8j9di.js.gz +0 -0
  235. package/dist/_frontend/assets/mdx-DfKPZX1Z.js.br +0 -0
  236. package/dist/_frontend/assets/mdx-DfKPZX1Z.js.gz +0 -0
  237. package/dist/_frontend/assets/python-2i3Kiv75.js.br +0 -0
  238. package/dist/_frontend/assets/python-2i3Kiv75.js.gz +0 -0
  239. package/dist/_frontend/assets/razor-B0N4vZnc.js.br +0 -0
  240. package/dist/_frontend/assets/razor-B0N4vZnc.js.gz +0 -0
  241. package/dist/_frontend/assets/tsMode-D1Y8xh-o.js.br +0 -0
  242. package/dist/_frontend/assets/tsMode-D1Y8xh-o.js.gz +0 -0
  243. package/dist/_frontend/assets/typescript-2nhip0PT.js.br +0 -0
  244. package/dist/_frontend/assets/typescript-2nhip0PT.js.gz +0 -0
  245. package/dist/_frontend/assets/workers-DSmTvA39.js.br +0 -0
  246. package/dist/_frontend/assets/workers-DSmTvA39.js.gz +0 -0
  247. package/dist/_frontend/assets/xml-CA4M6Pks.js.br +0 -0
  248. package/dist/_frontend/assets/xml-CA4M6Pks.js.gz +0 -0
  249. package/dist/_frontend/assets/yaml-D5KNk7Ji.js.br +0 -0
  250. package/dist/_frontend/assets/yaml-D5KNk7Ji.js.gz +0 -0
  251. package/dist/_frontend/index.html.br +0 -0
  252. package/dist/_frontend/index.html.gz +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260902_000002_agent_external_id.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { type Kysely, sql } from 'kysely';\nimport { AGENT_EXTERNAL_ID_UQ } from '../../indexes';\n\n/**\n * Optional agent `external_id`, unique within a tenant when set.\n * NULLs are excluded so agents without an external id do not collide.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await db.transaction().execute(async trx => {\n await sql`ALTER TABLE agent ADD COLUMN external_id TEXT`.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}\n ON agent (tenant_id, external_id)\n WHERE external_id IS NOT NULL\n `.execute(trx);\n });\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await db.transaction().execute(async trx => {\n await sql`DROP INDEX IF EXISTS ${sql.raw(AGENT_EXTERNAL_ID_UQ)}`.execute(trx);\n await sql`ALTER TABLE agent DROP COLUMN external_id`.execute(trx);\n });\n}\n","/** Partial unique index on `session (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const SESSION_EXTERNAL_ID_UQ = 'session_external_id_uq';\n\n/** Partial unique index on `agent (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const AGENT_EXTERNAL_ID_UQ = 'agent_external_id_uq';\n\n/** `(tenant_id, created_by_subject.subject_id)` on agent. */\nexport const AGENT_CREATED_BY_SUBJECT_ID_IDX = 'agent_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on session. */\nexport const SESSION_CREATED_BY_SUBJECT_ID_IDX = 'session_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule. */\nexport const SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = 'schedule_created_by_subject_id_idx';\n\n/** `(tenant_id, agent_id)` on schedule — list schedules for one agent by id. */\nexport const SCHEDULE_AGENT_ID_IDX = 'schedule_agent_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule_run. */\nexport const SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX = 'schedule_run_created_by_subject_id_idx';\n"],"mappings":";AAAA,SAAsB,WAAW;;;ACI1B,IAAM,uBAAuB;;;ADGpC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM,mDAAmD,QAAQ,GAAG;AACpE,UAAM;AAAA,4BACkB,IAAI,IAAI,oBAAoB,CAAC;AAAA;AAAA;AAAA,MAGnD,QAAQ,GAAG;AAAA,EACf,CAAC;AACH;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM,2BAA2B,IAAI,IAAI,oBAAoB,CAAC,GAAG,QAAQ,GAAG;AAC5E,UAAM,+CAA+C,QAAQ,GAAG;AAAA,EAClE,CAAC;AACH;","names":[]}
@@ -0,0 +1,114 @@
1
+ // src/db/sqlite/migrations/20260903_000001_drop_agent_metadata.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var AGENT_EXTERNAL_ID_UQ = "agent_external_id_uq";
6
+
7
+ // src/db/sqlite/migrations/20260903_000001_drop_agent_metadata.ts
8
+ async function up(db) {
9
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
10
+ try {
11
+ await db.transaction().execute(async (trx) => {
12
+ await sql`
13
+ CREATE TABLE agent_new (
14
+ id TEXT NOT NULL,
15
+ tenant_id TEXT NOT NULL,
16
+ name TEXT NOT NULL,
17
+ manifest BLOB NOT NULL,
18
+ external_id TEXT,
19
+ created_at TEXT NOT NULL,
20
+ updated_at TEXT NOT NULL,
21
+ PRIMARY KEY (id),
22
+ UNIQUE (tenant_id, name)
23
+ ) STRICT
24
+ `.execute(trx);
25
+ await sql`
26
+ INSERT INTO agent_new (
27
+ id,
28
+ tenant_id,
29
+ name,
30
+ manifest,
31
+ external_id,
32
+ created_at,
33
+ updated_at
34
+ )
35
+ SELECT
36
+ id,
37
+ tenant_id,
38
+ name,
39
+ manifest,
40
+ external_id,
41
+ created_at,
42
+ updated_at
43
+ FROM agent
44
+ `.execute(trx);
45
+ await sql`DROP TABLE agent`.execute(trx);
46
+ await sql`ALTER TABLE agent_new RENAME TO agent`.execute(trx);
47
+ await sql`
48
+ CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}
49
+ ON agent (tenant_id, external_id)
50
+ WHERE external_id IS NOT NULL
51
+ `.execute(trx);
52
+ });
53
+ } finally {
54
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
55
+ }
56
+ }
57
+ async function down(db) {
58
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
59
+ try {
60
+ await db.transaction().execute(async (trx) => {
61
+ await sql`DROP INDEX IF EXISTS ${sql.raw(AGENT_EXTERNAL_ID_UQ)}`.execute(trx);
62
+ await sql`
63
+ CREATE TABLE agent_old (
64
+ id TEXT NOT NULL,
65
+ tenant_id TEXT NOT NULL,
66
+ name TEXT NOT NULL,
67
+ manifest BLOB NOT NULL,
68
+ metadata BLOB NOT NULL DEFAULT (jsonb('{}')),
69
+ external_id TEXT,
70
+ created_at TEXT NOT NULL,
71
+ updated_at TEXT NOT NULL,
72
+ PRIMARY KEY (id),
73
+ UNIQUE (tenant_id, name)
74
+ ) STRICT
75
+ `.execute(trx);
76
+ await sql`
77
+ INSERT INTO agent_old (
78
+ id,
79
+ tenant_id,
80
+ name,
81
+ manifest,
82
+ metadata,
83
+ external_id,
84
+ created_at,
85
+ updated_at
86
+ )
87
+ SELECT
88
+ id,
89
+ tenant_id,
90
+ name,
91
+ manifest,
92
+ jsonb('{}'),
93
+ external_id,
94
+ created_at,
95
+ updated_at
96
+ FROM agent
97
+ `.execute(trx);
98
+ await sql`DROP TABLE agent`.execute(trx);
99
+ await sql`ALTER TABLE agent_old RENAME TO agent`.execute(trx);
100
+ await sql`
101
+ CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}
102
+ ON agent (tenant_id, external_id)
103
+ WHERE external_id IS NOT NULL
104
+ `.execute(trx);
105
+ });
106
+ } finally {
107
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
108
+ }
109
+ }
110
+ export {
111
+ down,
112
+ up
113
+ };
114
+ //# sourceMappingURL=20260903_000001_drop_agent_metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260903_000001_drop_agent_metadata.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { type Kysely, sql } from 'kysely';\nimport { AGENT_EXTERNAL_ID_UQ } from '../../indexes';\n\n/**\n * Drop agent.metadata. Rebuild: ADD/DROP COLUMN cannot take DEFAULT (jsonb(...)) / STRICT drop.\n * Keeps external_id + partial unique index from 20260902_000002.\n * DROP TABLE agent needs FKs off (`schedule` REFERENCES it).\n * PRAGMA foreign_keys is a no-op inside a txn.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`PRAGMA foreign_keys = OFF`.execute(db);\n try {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE TABLE agent_new (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n external_id TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n UNIQUE (tenant_id, name)\n ) STRICT\n `.execute(trx);\n\n await sql`\n INSERT INTO agent_new (\n id,\n tenant_id,\n name,\n manifest,\n external_id,\n created_at,\n updated_at\n )\n SELECT\n id,\n tenant_id,\n name,\n manifest,\n external_id,\n created_at,\n updated_at\n FROM agent\n `.execute(trx);\n\n await sql`DROP TABLE agent`.execute(trx);\n await sql`ALTER TABLE agent_new RENAME TO agent`.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}\n ON agent (tenant_id, external_id)\n WHERE external_id IS NOT NULL\n `.execute(trx);\n });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`PRAGMA foreign_keys = OFF`.execute(db);\n try {\n await db.transaction().execute(async trx => {\n await sql`DROP INDEX IF EXISTS ${sql.raw(AGENT_EXTERNAL_ID_UQ)}`.execute(trx);\n await sql`\n CREATE TABLE agent_old (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n metadata BLOB NOT NULL DEFAULT (jsonb('{}')),\n external_id TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n UNIQUE (tenant_id, name)\n ) STRICT\n `.execute(trx);\n\n await sql`\n INSERT INTO agent_old (\n id,\n tenant_id,\n name,\n manifest,\n metadata,\n external_id,\n created_at,\n updated_at\n )\n SELECT\n id,\n tenant_id,\n name,\n manifest,\n jsonb('{}'),\n external_id,\n created_at,\n updated_at\n FROM agent\n `.execute(trx);\n\n await sql`DROP TABLE agent`.execute(trx);\n await sql`ALTER TABLE agent_old RENAME TO agent`.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}\n ON agent (tenant_id, external_id)\n WHERE external_id IS NOT NULL\n `.execute(trx);\n });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n","/** Partial unique index on `session (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const SESSION_EXTERNAL_ID_UQ = 'session_external_id_uq';\n\n/** Partial unique index on `agent (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const AGENT_EXTERNAL_ID_UQ = 'agent_external_id_uq';\n\n/** `(tenant_id, created_by_subject.subject_id)` on agent. */\nexport const AGENT_CREATED_BY_SUBJECT_ID_IDX = 'agent_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on session. */\nexport const SESSION_CREATED_BY_SUBJECT_ID_IDX = 'session_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule. */\nexport const SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = 'schedule_created_by_subject_id_idx';\n\n/** `(tenant_id, agent_id)` on schedule — list schedules for one agent by id. */\nexport const SCHEDULE_AGENT_ID_IDX = 'schedule_agent_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule_run. */\nexport const SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX = 'schedule_run_created_by_subject_id_idx';\n"],"mappings":";AAAA,SAAsB,WAAW;;;ACI1B,IAAM,uBAAuB;;;ADKpC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,+BAA+B,QAAQ,EAAE;AAC/C,MAAI;AACF,UAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYJ,QAAQ,GAAG;AAEb,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAmBJ,QAAQ,GAAG;AAEb,YAAM,sBAAsB,QAAQ,GAAG;AACvC,YAAM,2CAA2C,QAAQ,GAAG;AAC5D,YAAM;AAAA,8BACkB,IAAI,IAAI,oBAAoB,CAAC;AAAA;AAAA;AAAA,QAGnD,QAAQ,GAAG;AAAA,IACf,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,+BAA+B,QAAQ,EAAE;AAC/C,MAAI;AACF,UAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,YAAM,2BAA2B,IAAI,IAAI,oBAAoB,CAAC,GAAG,QAAQ,GAAG;AAC5E,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAaJ,QAAQ,GAAG;AAEb,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAqBJ,QAAQ,GAAG;AAEb,YAAM,sBAAsB,QAAQ,GAAG;AACvC,YAAM,2CAA2C,QAAQ,GAAG;AAC5D,YAAM;AAAA,8BACkB,IAAI,IAAI,oBAAoB,CAAC;AAAA;AAAA;AAAA,QAGnD,QAAQ,GAAG;AAAA,IACf,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;","names":[]}
@@ -0,0 +1,496 @@
1
+ // src/db/sqlite/migrations/20260903_000002_created_by_subject.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var SESSION_EXTERNAL_ID_UQ = "session_external_id_uq";
6
+ var AGENT_EXTERNAL_ID_UQ = "agent_external_id_uq";
7
+ var AGENT_CREATED_BY_SUBJECT_ID_IDX = "agent_created_by_subject_id_idx";
8
+ var SESSION_CREATED_BY_SUBJECT_ID_IDX = "session_created_by_subject_id_idx";
9
+ var SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = "schedule_created_by_subject_id_idx";
10
+ var SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX = "schedule_run_created_by_subject_id_idx";
11
+
12
+ // src/db/sqlite/migrations/20260903_000002_created_by_subject.ts
13
+ async function up(db) {
14
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
15
+ try {
16
+ await db.transaction().execute(async (trx) => {
17
+ await sql`
18
+ CREATE TABLE session_new (
19
+ tenant_id TEXT NOT NULL,
20
+ session_id TEXT NOT NULL,
21
+ created_by_subject BLOB NOT NULL,
22
+ agent_id TEXT,
23
+ agent_name TEXT,
24
+ agent_spec BLOB,
25
+ title TEXT,
26
+ last_turn_id TEXT,
27
+ external_id TEXT,
28
+ custom BLOB,
29
+ metadata BLOB NOT NULL DEFAULT (jsonb('{}')),
30
+ metrics BLOB NOT NULL DEFAULT (jsonb('{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}')),
31
+ last_activity_timestamp_ms INTEGER NOT NULL,
32
+ created_at TEXT NOT NULL,
33
+ updated_at TEXT NOT NULL,
34
+ PRIMARY KEY (session_id),
35
+ CHECK (
36
+ (agent_id IS NOT NULL AND agent_spec IS NULL)
37
+ OR (agent_id IS NULL AND agent_spec IS NOT NULL)
38
+ )
39
+ ) STRICT
40
+ `.execute(trx);
41
+ await sql`
42
+ INSERT INTO session_new (
43
+ tenant_id,
44
+ session_id,
45
+ created_by_subject,
46
+ agent_id,
47
+ agent_name,
48
+ agent_spec,
49
+ title,
50
+ last_turn_id,
51
+ external_id,
52
+ custom,
53
+ metadata,
54
+ metrics,
55
+ last_activity_timestamp_ms,
56
+ created_at,
57
+ updated_at
58
+ )
59
+ SELECT
60
+ tenant_id,
61
+ session_id,
62
+ jsonb(json_object(
63
+ 'subject_id', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END,
64
+ 'subject_type', 'user',
65
+ 'subject_display_name', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END
66
+ )),
67
+ agent_id,
68
+ agent_name,
69
+ agent_spec,
70
+ title,
71
+ last_turn_id,
72
+ external_id,
73
+ custom,
74
+ metadata,
75
+ metrics,
76
+ last_activity_timestamp_ms,
77
+ created_at,
78
+ updated_at
79
+ FROM session
80
+ `.execute(trx);
81
+ await sql`DROP TABLE session`.execute(trx);
82
+ await sql`ALTER TABLE session_new RENAME TO session`.execute(trx);
83
+ await sql`
84
+ CREATE INDEX session_list_idx
85
+ ON session (tenant_id, created_at, session_id)
86
+ `.execute(trx);
87
+ await sql`
88
+ CREATE INDEX session_agent_id_idx
89
+ ON session (tenant_id, agent_id)
90
+ WHERE agent_id IS NOT NULL
91
+ `.execute(trx);
92
+ await sql`
93
+ CREATE INDEX session_list_updated_at_idx
94
+ ON session (tenant_id, updated_at, session_id)
95
+ `.execute(trx);
96
+ await sql`
97
+ CREATE INDEX session_agent_created_at_idx
98
+ ON session (tenant_id, agent_id, created_at)
99
+ WHERE agent_id IS NOT NULL
100
+ `.execute(trx);
101
+ await sql`
102
+ CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}
103
+ ON session (tenant_id, external_id)
104
+ WHERE external_id IS NOT NULL
105
+ `.execute(trx);
106
+ await sql`
107
+ CREATE INDEX ${sql.raw(SESSION_CREATED_BY_SUBJECT_ID_IDX)}
108
+ ON session (tenant_id, json_extract(created_by_subject, '$.subject_id'))
109
+ `.execute(trx);
110
+ await sql`
111
+ CREATE TABLE agent_new (
112
+ id TEXT NOT NULL,
113
+ tenant_id TEXT NOT NULL,
114
+ name TEXT NOT NULL,
115
+ manifest BLOB NOT NULL,
116
+ external_id TEXT,
117
+ created_by_subject BLOB NOT NULL,
118
+ created_at TEXT NOT NULL,
119
+ updated_at TEXT NOT NULL,
120
+ PRIMARY KEY (id),
121
+ UNIQUE (tenant_id, name)
122
+ ) STRICT
123
+ `.execute(trx);
124
+ await sql`
125
+ INSERT INTO agent_new (
126
+ id, tenant_id, name, manifest, external_id, created_by_subject, created_at, updated_at
127
+ )
128
+ SELECT
129
+ a.id,
130
+ a.tenant_id,
131
+ a.name,
132
+ a.manifest,
133
+ a.external_id,
134
+ COALESCE(
135
+ (
136
+ SELECT s.created_by_subject
137
+ FROM session AS s
138
+ WHERE s.tenant_id = a.tenant_id
139
+ AND (s.agent_id = a.id OR (s.agent_id IS NULL AND s.agent_name = a.name))
140
+ ORDER BY s.created_at ASC
141
+ LIMIT 1
142
+ ),
143
+ jsonb('{"subject_id":"trueforge-default","subject_type":"user","subject_display_name":"trueforge-default"}')
144
+ ),
145
+ a.created_at,
146
+ a.updated_at
147
+ FROM agent AS a
148
+ `.execute(trx);
149
+ await sql`DROP TABLE agent`.execute(trx);
150
+ await sql`ALTER TABLE agent_new RENAME TO agent`.execute(trx);
151
+ await sql`
152
+ CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}
153
+ ON agent (tenant_id, external_id)
154
+ WHERE external_id IS NOT NULL
155
+ `.execute(trx);
156
+ await sql`
157
+ CREATE INDEX ${sql.raw(AGENT_CREATED_BY_SUBJECT_ID_IDX)}
158
+ ON agent (tenant_id, json_extract(created_by_subject, '$.subject_id'))
159
+ `.execute(trx);
160
+ await sql`
161
+ CREATE TABLE schedule_new (
162
+ id TEXT NOT NULL,
163
+ tenant_id TEXT NOT NULL,
164
+ agent_name TEXT NOT NULL,
165
+ name TEXT NOT NULL,
166
+ manifest BLOB NOT NULL,
167
+ status TEXT NOT NULL CHECK (length(status) <= 16),
168
+ created_by_subject BLOB NOT NULL,
169
+ created_at TEXT NOT NULL,
170
+ updated_at TEXT NOT NULL,
171
+ PRIMARY KEY (id),
172
+ FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE
173
+ ) STRICT
174
+ `.execute(trx);
175
+ await sql`
176
+ INSERT INTO schedule_new (
177
+ id, tenant_id, agent_name, name, manifest, status, created_by_subject, created_at, updated_at
178
+ )
179
+ SELECT
180
+ id,
181
+ tenant_id,
182
+ agent_name,
183
+ name,
184
+ manifest,
185
+ status,
186
+ jsonb(json_object(
187
+ 'subject_id', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END,
188
+ 'subject_type', 'user',
189
+ 'subject_display_name', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END
190
+ )),
191
+ created_at,
192
+ updated_at
193
+ FROM schedule
194
+ `.execute(trx);
195
+ await sql`
196
+ CREATE TABLE schedule_run_new (
197
+ id TEXT NOT NULL,
198
+ tenant_id TEXT NOT NULL,
199
+ schedule_id TEXT NOT NULL REFERENCES schedule_new (id) ON DELETE CASCADE,
200
+ name TEXT NOT NULL,
201
+ scheduled_for TEXT NOT NULL,
202
+ status TEXT NOT NULL CHECK (length(status) <= 16),
203
+ created_by_subject BLOB NOT NULL,
204
+ triggered_at TEXT,
205
+ created_at TEXT NOT NULL,
206
+ updated_at TEXT NOT NULL,
207
+ PRIMARY KEY (id)
208
+ ) STRICT
209
+ `.execute(trx);
210
+ await sql`
211
+ INSERT INTO schedule_run_new (
212
+ id,
213
+ tenant_id,
214
+ schedule_id,
215
+ name,
216
+ scheduled_for,
217
+ status,
218
+ created_by_subject,
219
+ triggered_at,
220
+ created_at,
221
+ updated_at
222
+ )
223
+ SELECT
224
+ id,
225
+ tenant_id,
226
+ schedule_id,
227
+ name,
228
+ scheduled_for,
229
+ status,
230
+ jsonb(json_object(
231
+ 'subject_id', CASE WHEN triggered_by = '' THEN 'trueforge-default' ELSE triggered_by END,
232
+ 'subject_type', 'user',
233
+ 'subject_display_name', CASE WHEN triggered_by = '' THEN 'trueforge-default' ELSE triggered_by END
234
+ )),
235
+ triggered_at,
236
+ created_at,
237
+ updated_at
238
+ FROM schedule_run
239
+ `.execute(trx);
240
+ await sql`DROP TABLE schedule_run`.execute(trx);
241
+ await sql`DROP TABLE schedule`.execute(trx);
242
+ await sql`ALTER TABLE schedule_new RENAME TO schedule`.execute(trx);
243
+ await sql`ALTER TABLE schedule_run_new RENAME TO schedule_run`.execute(trx);
244
+ await sql`
245
+ CREATE INDEX schedule_agent_idx
246
+ ON schedule (tenant_id, agent_name)
247
+ `.execute(trx);
248
+ await sql`
249
+ CREATE UNIQUE INDEX schedule_name_uq
250
+ ON schedule (tenant_id, agent_name, name)
251
+ `.execute(trx);
252
+ await sql`
253
+ CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}
254
+ ON schedule (tenant_id, json_extract(created_by_subject, '$.subject_id'))
255
+ `.execute(trx);
256
+ await sql`
257
+ CREATE UNIQUE INDEX schedule_run_name_idx
258
+ ON schedule_run (tenant_id, schedule_id, name)
259
+ `.execute(trx);
260
+ await sql`
261
+ CREATE INDEX schedule_run_scheduled_for_idx
262
+ ON schedule_run (scheduled_for)
263
+ WHERE status = 'scheduled'
264
+ `.execute(trx);
265
+ await sql`
266
+ CREATE UNIQUE INDEX schedule_run_pending_uq
267
+ ON schedule_run (schedule_id)
268
+ WHERE status = 'scheduled'
269
+ `.execute(trx);
270
+ await sql`
271
+ CREATE INDEX schedule_run_list_idx
272
+ ON schedule_run (schedule_id, scheduled_for DESC)
273
+ `.execute(trx);
274
+ await sql`
275
+ CREATE INDEX ${sql.raw(SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX)}
276
+ ON schedule_run (tenant_id, json_extract(created_by_subject, '$.subject_id'))
277
+ `.execute(trx);
278
+ });
279
+ } finally {
280
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
281
+ }
282
+ }
283
+ async function down(db) {
284
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
285
+ try {
286
+ await db.transaction().execute(async (trx) => {
287
+ await sql`
288
+ CREATE TABLE schedule_old (
289
+ id TEXT NOT NULL,
290
+ tenant_id TEXT NOT NULL,
291
+ agent_name TEXT NOT NULL,
292
+ name TEXT NOT NULL,
293
+ manifest BLOB NOT NULL,
294
+ status TEXT NOT NULL CHECK (length(status) <= 16),
295
+ created_by TEXT NOT NULL,
296
+ created_at TEXT NOT NULL,
297
+ updated_at TEXT NOT NULL,
298
+ PRIMARY KEY (id),
299
+ FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE
300
+ ) STRICT
301
+ `.execute(trx);
302
+ await sql`
303
+ INSERT INTO schedule_old (
304
+ id, tenant_id, agent_name, name, manifest, status, created_by, created_at, updated_at
305
+ )
306
+ SELECT
307
+ id,
308
+ tenant_id,
309
+ agent_name,
310
+ name,
311
+ manifest,
312
+ status,
313
+ COALESCE(json_extract(created_by_subject, '$.subject_id'), ''),
314
+ created_at,
315
+ updated_at
316
+ FROM schedule
317
+ `.execute(trx);
318
+ await sql`
319
+ CREATE TABLE schedule_run_old (
320
+ id TEXT NOT NULL,
321
+ tenant_id TEXT NOT NULL,
322
+ schedule_id TEXT NOT NULL REFERENCES schedule_old (id) ON DELETE CASCADE,
323
+ name TEXT NOT NULL,
324
+ scheduled_for TEXT NOT NULL,
325
+ status TEXT NOT NULL CHECK (length(status) <= 16),
326
+ triggered_by TEXT NOT NULL,
327
+ triggered_at TEXT,
328
+ created_at TEXT NOT NULL,
329
+ updated_at TEXT NOT NULL,
330
+ PRIMARY KEY (id)
331
+ ) STRICT
332
+ `.execute(trx);
333
+ await sql`
334
+ INSERT INTO schedule_run_old (
335
+ id,
336
+ tenant_id,
337
+ schedule_id,
338
+ name,
339
+ scheduled_for,
340
+ status,
341
+ triggered_by,
342
+ triggered_at,
343
+ created_at,
344
+ updated_at
345
+ )
346
+ SELECT
347
+ id,
348
+ tenant_id,
349
+ schedule_id,
350
+ name,
351
+ scheduled_for,
352
+ status,
353
+ COALESCE(json_extract(created_by_subject, '$.subject_id'), ''),
354
+ triggered_at,
355
+ created_at,
356
+ updated_at
357
+ FROM schedule_run
358
+ `.execute(trx);
359
+ await sql`DROP TABLE schedule_run`.execute(trx);
360
+ await sql`DROP TABLE schedule`.execute(trx);
361
+ await sql`ALTER TABLE schedule_old RENAME TO schedule`.execute(trx);
362
+ await sql`ALTER TABLE schedule_run_old RENAME TO schedule_run`.execute(trx);
363
+ await sql`
364
+ CREATE INDEX schedule_agent_idx ON schedule (tenant_id, agent_name)
365
+ `.execute(trx);
366
+ await sql`
367
+ CREATE UNIQUE INDEX schedule_name_uq ON schedule (tenant_id, agent_name, name)
368
+ `.execute(trx);
369
+ await sql`
370
+ CREATE UNIQUE INDEX schedule_run_name_idx ON schedule_run (tenant_id, schedule_id, name)
371
+ `.execute(trx);
372
+ await sql`
373
+ CREATE INDEX schedule_run_scheduled_for_idx
374
+ ON schedule_run (scheduled_for) WHERE status = 'scheduled'
375
+ `.execute(trx);
376
+ await sql`
377
+ CREATE UNIQUE INDEX schedule_run_pending_uq
378
+ ON schedule_run (schedule_id) WHERE status = 'scheduled'
379
+ `.execute(trx);
380
+ await sql`
381
+ CREATE INDEX schedule_run_list_idx ON schedule_run (schedule_id, scheduled_for DESC)
382
+ `.execute(trx);
383
+ await sql`
384
+ CREATE TABLE agent_old (
385
+ id TEXT NOT NULL,
386
+ tenant_id TEXT NOT NULL,
387
+ name TEXT NOT NULL,
388
+ manifest BLOB NOT NULL,
389
+ external_id TEXT,
390
+ created_at TEXT NOT NULL,
391
+ updated_at TEXT NOT NULL,
392
+ PRIMARY KEY (id),
393
+ UNIQUE (tenant_id, name)
394
+ ) STRICT
395
+ `.execute(trx);
396
+ await sql`
397
+ INSERT INTO agent_old (id, tenant_id, name, manifest, external_id, created_at, updated_at)
398
+ SELECT id, tenant_id, name, manifest, external_id, created_at, updated_at
399
+ FROM agent
400
+ `.execute(trx);
401
+ await sql`DROP TABLE agent`.execute(trx);
402
+ await sql`ALTER TABLE agent_old RENAME TO agent`.execute(trx);
403
+ await sql`
404
+ CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}
405
+ ON agent (tenant_id, external_id) WHERE external_id IS NOT NULL
406
+ `.execute(trx);
407
+ await sql`
408
+ CREATE TABLE session_old (
409
+ tenant_id TEXT NOT NULL,
410
+ session_id TEXT NOT NULL,
411
+ created_by TEXT NOT NULL DEFAULT '',
412
+ agent_id TEXT,
413
+ agent_name TEXT,
414
+ agent_spec BLOB,
415
+ title TEXT,
416
+ last_turn_id TEXT,
417
+ external_id TEXT,
418
+ custom BLOB,
419
+ metadata BLOB NOT NULL DEFAULT (jsonb('{}')),
420
+ metrics BLOB NOT NULL DEFAULT (jsonb('{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}')),
421
+ last_activity_timestamp_ms INTEGER NOT NULL,
422
+ created_at TEXT NOT NULL,
423
+ updated_at TEXT NOT NULL,
424
+ PRIMARY KEY (session_id),
425
+ CHECK (
426
+ (agent_id IS NOT NULL AND agent_spec IS NULL)
427
+ OR (agent_id IS NULL AND agent_spec IS NOT NULL)
428
+ )
429
+ ) STRICT
430
+ `.execute(trx);
431
+ await sql`
432
+ INSERT INTO session_old (
433
+ tenant_id,
434
+ session_id,
435
+ created_by,
436
+ agent_id,
437
+ agent_name,
438
+ agent_spec,
439
+ title,
440
+ last_turn_id,
441
+ external_id,
442
+ custom,
443
+ metadata,
444
+ metrics,
445
+ last_activity_timestamp_ms,
446
+ created_at,
447
+ updated_at
448
+ )
449
+ SELECT
450
+ tenant_id,
451
+ session_id,
452
+ COALESCE(json_extract(created_by_subject, '$.subject_id'), ''),
453
+ agent_id,
454
+ agent_name,
455
+ agent_spec,
456
+ title,
457
+ last_turn_id,
458
+ external_id,
459
+ custom,
460
+ metadata,
461
+ metrics,
462
+ last_activity_timestamp_ms,
463
+ created_at,
464
+ updated_at
465
+ FROM session
466
+ `.execute(trx);
467
+ await sql`DROP TABLE session`.execute(trx);
468
+ await sql`ALTER TABLE session_old RENAME TO session`.execute(trx);
469
+ await sql`
470
+ CREATE INDEX session_list_idx ON session (tenant_id, created_at, session_id)
471
+ `.execute(trx);
472
+ await sql`
473
+ CREATE INDEX session_agent_id_idx
474
+ ON session (tenant_id, agent_id) WHERE agent_id IS NOT NULL
475
+ `.execute(trx);
476
+ await sql`
477
+ CREATE INDEX session_list_updated_at_idx ON session (tenant_id, updated_at, session_id)
478
+ `.execute(trx);
479
+ await sql`
480
+ CREATE INDEX session_agent_created_at_idx
481
+ ON session (tenant_id, agent_id, created_at) WHERE agent_id IS NOT NULL
482
+ `.execute(trx);
483
+ await sql`
484
+ CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}
485
+ ON session (tenant_id, external_id) WHERE external_id IS NOT NULL
486
+ `.execute(trx);
487
+ });
488
+ } finally {
489
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
490
+ }
491
+ }
492
+ export {
493
+ down,
494
+ up
495
+ };
496
+ //# sourceMappingURL=20260903_000002_created_by_subject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260903_000002_created_by_subject.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\nimport {\n AGENT_CREATED_BY_SUBJECT_ID_IDX,\n AGENT_EXTERNAL_ID_UQ,\n SCHEDULE_CREATED_BY_SUBJECT_ID_IDX,\n SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX,\n SESSION_CREATED_BY_SUBJECT_ID_IDX,\n SESSION_EXTERNAL_ID_UQ,\n} from '../../indexes';\n\n/**\n * Add `created_by_subject` on agent, session, schedule, and schedule_run.\n * STRICT rebuilds (cannot ADD NOT NULL with expression default / DROP DEFAULT).\n * Backfills session/schedule/schedule_run from created_by/triggered_by;\n * agent backfills best-effort from its first created session (fallback: trueforge-default).\n * Agent has no metadata (dropped in 20260903_000001). FKs off for agent/schedule swaps.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`PRAGMA foreign_keys = OFF`.execute(db);\n try {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE TABLE session_new (\n tenant_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n created_by_subject BLOB NOT NULL,\n agent_id TEXT,\n agent_name TEXT,\n agent_spec BLOB,\n title TEXT,\n last_turn_id TEXT,\n external_id TEXT,\n custom BLOB,\n metadata BLOB NOT NULL DEFAULT (jsonb('{}')),\n metrics BLOB NOT NULL DEFAULT (jsonb('{\"total_cost_in_usd\":0,\"total_duration_ms\":0,\"total_turns\":0}')),\n last_activity_timestamp_ms INTEGER NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (session_id),\n CHECK (\n (agent_id IS NOT NULL AND agent_spec IS NULL)\n OR (agent_id IS NULL AND agent_spec IS NOT NULL)\n )\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO session_new (\n tenant_id,\n session_id,\n created_by_subject,\n agent_id,\n agent_name,\n agent_spec,\n title,\n last_turn_id,\n external_id,\n custom,\n metadata,\n metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n )\n SELECT\n tenant_id,\n session_id,\n jsonb(json_object(\n 'subject_id', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END,\n 'subject_type', 'user',\n 'subject_display_name', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END\n )),\n agent_id,\n agent_name,\n agent_spec,\n title,\n last_turn_id,\n external_id,\n custom,\n metadata,\n metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n FROM session\n `.execute(trx);\n await sql`DROP TABLE session`.execute(trx);\n await sql`ALTER TABLE session_new RENAME TO session`.execute(trx);\n await sql`\n CREATE INDEX session_list_idx\n ON session (tenant_id, created_at, session_id)\n `.execute(trx);\n await sql`\n CREATE INDEX session_agent_id_idx\n ON session (tenant_id, agent_id)\n WHERE agent_id IS NOT NULL\n `.execute(trx);\n await sql`\n CREATE INDEX session_list_updated_at_idx\n ON session (tenant_id, updated_at, session_id)\n `.execute(trx);\n await sql`\n CREATE INDEX session_agent_created_at_idx\n ON session (tenant_id, agent_id, created_at)\n WHERE agent_id IS NOT NULL\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}\n ON session (tenant_id, external_id)\n WHERE external_id IS NOT NULL\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(SESSION_CREATED_BY_SUBJECT_ID_IDX)}\n ON session (tenant_id, json_extract(created_by_subject, '$.subject_id'))\n `.execute(trx);\n\n await sql`\n CREATE TABLE agent_new (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n external_id TEXT,\n created_by_subject BLOB NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n UNIQUE (tenant_id, name)\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO agent_new (\n id, tenant_id, name, manifest, external_id, created_by_subject, created_at, updated_at\n )\n SELECT\n a.id,\n a.tenant_id,\n a.name,\n a.manifest,\n a.external_id,\n COALESCE(\n (\n SELECT s.created_by_subject\n FROM session AS s\n WHERE s.tenant_id = a.tenant_id\n AND (s.agent_id = a.id OR (s.agent_id IS NULL AND s.agent_name = a.name))\n ORDER BY s.created_at ASC\n LIMIT 1\n ),\n jsonb('{\"subject_id\":\"trueforge-default\",\"subject_type\":\"user\",\"subject_display_name\":\"trueforge-default\"}')\n ),\n a.created_at,\n a.updated_at\n FROM agent AS a\n `.execute(trx);\n await sql`DROP TABLE agent`.execute(trx);\n await sql`ALTER TABLE agent_new RENAME TO agent`.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}\n ON agent (tenant_id, external_id)\n WHERE external_id IS NOT NULL\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(AGENT_CREATED_BY_SUBJECT_ID_IDX)}\n ON agent (tenant_id, json_extract(created_by_subject, '$.subject_id'))\n `.execute(trx);\n\n await sql`\n CREATE TABLE schedule_new (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n agent_name TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n status TEXT NOT NULL CHECK (length(status) <= 16),\n created_by_subject BLOB NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO schedule_new (\n id, tenant_id, agent_name, name, manifest, status, created_by_subject, created_at, updated_at\n )\n SELECT\n id,\n tenant_id,\n agent_name,\n name,\n manifest,\n status,\n jsonb(json_object(\n 'subject_id', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END,\n 'subject_type', 'user',\n 'subject_display_name', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END\n )),\n created_at,\n updated_at\n FROM schedule\n `.execute(trx);\n\n await sql`\n CREATE TABLE schedule_run_new (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n schedule_id TEXT NOT NULL REFERENCES schedule_new (id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n scheduled_for TEXT NOT NULL,\n status TEXT NOT NULL CHECK (length(status) <= 16),\n created_by_subject BLOB NOT NULL,\n triggered_at TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id)\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO schedule_run_new (\n id,\n tenant_id,\n schedule_id,\n name,\n scheduled_for,\n status,\n created_by_subject,\n triggered_at,\n created_at,\n updated_at\n )\n SELECT\n id,\n tenant_id,\n schedule_id,\n name,\n scheduled_for,\n status,\n jsonb(json_object(\n 'subject_id', CASE WHEN triggered_by = '' THEN 'trueforge-default' ELSE triggered_by END,\n 'subject_type', 'user',\n 'subject_display_name', CASE WHEN triggered_by = '' THEN 'trueforge-default' ELSE triggered_by END\n )),\n triggered_at,\n created_at,\n updated_at\n FROM schedule_run\n `.execute(trx);\n\n await sql`DROP TABLE schedule_run`.execute(trx);\n await sql`DROP TABLE schedule`.execute(trx);\n await sql`ALTER TABLE schedule_new RENAME TO schedule`.execute(trx);\n await sql`ALTER TABLE schedule_run_new RENAME TO schedule_run`.execute(trx);\n\n await sql`\n CREATE INDEX schedule_agent_idx\n ON schedule (tenant_id, agent_name)\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_name_uq\n ON schedule (tenant_id, agent_name, name)\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}\n ON schedule (tenant_id, json_extract(created_by_subject, '$.subject_id'))\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_run_name_idx\n ON schedule_run (tenant_id, schedule_id, name)\n `.execute(trx);\n await sql`\n CREATE INDEX schedule_run_scheduled_for_idx\n ON schedule_run (scheduled_for)\n WHERE status = 'scheduled'\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_run_pending_uq\n ON schedule_run (schedule_id)\n WHERE status = 'scheduled'\n `.execute(trx);\n await sql`\n CREATE INDEX schedule_run_list_idx\n ON schedule_run (schedule_id, scheduled_for DESC)\n `.execute(trx);\n await sql`\n CREATE INDEX ${sql.raw(SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX)}\n ON schedule_run (tenant_id, json_extract(created_by_subject, '$.subject_id'))\n `.execute(trx);\n });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`PRAGMA foreign_keys = OFF`.execute(db);\n try {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE TABLE schedule_old (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n agent_name TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n status TEXT NOT NULL CHECK (length(status) <= 16),\n created_by TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO schedule_old (\n id, tenant_id, agent_name, name, manifest, status, created_by, created_at, updated_at\n )\n SELECT\n id,\n tenant_id,\n agent_name,\n name,\n manifest,\n status,\n COALESCE(json_extract(created_by_subject, '$.subject_id'), ''),\n created_at,\n updated_at\n FROM schedule\n `.execute(trx);\n\n await sql`\n CREATE TABLE schedule_run_old (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n schedule_id TEXT NOT NULL REFERENCES schedule_old (id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n scheduled_for TEXT NOT NULL,\n status TEXT NOT NULL CHECK (length(status) <= 16),\n triggered_by TEXT NOT NULL,\n triggered_at TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id)\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO schedule_run_old (\n id,\n tenant_id,\n schedule_id,\n name,\n scheduled_for,\n status,\n triggered_by,\n triggered_at,\n created_at,\n updated_at\n )\n SELECT\n id,\n tenant_id,\n schedule_id,\n name,\n scheduled_for,\n status,\n COALESCE(json_extract(created_by_subject, '$.subject_id'), ''),\n triggered_at,\n created_at,\n updated_at\n FROM schedule_run\n `.execute(trx);\n\n await sql`DROP TABLE schedule_run`.execute(trx);\n await sql`DROP TABLE schedule`.execute(trx);\n await sql`ALTER TABLE schedule_old RENAME TO schedule`.execute(trx);\n await sql`ALTER TABLE schedule_run_old RENAME TO schedule_run`.execute(trx);\n await sql`\n CREATE INDEX schedule_agent_idx ON schedule (tenant_id, agent_name)\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_name_uq ON schedule (tenant_id, agent_name, name)\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_run_name_idx ON schedule_run (tenant_id, schedule_id, name)\n `.execute(trx);\n await sql`\n CREATE INDEX schedule_run_scheduled_for_idx\n ON schedule_run (scheduled_for) WHERE status = 'scheduled'\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX schedule_run_pending_uq\n ON schedule_run (schedule_id) WHERE status = 'scheduled'\n `.execute(trx);\n await sql`\n CREATE INDEX schedule_run_list_idx ON schedule_run (schedule_id, scheduled_for DESC)\n `.execute(trx);\n\n await sql`\n CREATE TABLE agent_old (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest BLOB NOT NULL,\n external_id TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (id),\n UNIQUE (tenant_id, name)\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO agent_old (id, tenant_id, name, manifest, external_id, created_at, updated_at)\n SELECT id, tenant_id, name, manifest, external_id, created_at, updated_at\n FROM agent\n `.execute(trx);\n await sql`DROP TABLE agent`.execute(trx);\n await sql`ALTER TABLE agent_old RENAME TO agent`.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}\n ON agent (tenant_id, external_id) WHERE external_id IS NOT NULL\n `.execute(trx);\n\n await sql`\n CREATE TABLE session_old (\n tenant_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n created_by TEXT NOT NULL DEFAULT '',\n agent_id TEXT,\n agent_name TEXT,\n agent_spec BLOB,\n title TEXT,\n last_turn_id TEXT,\n external_id TEXT,\n custom BLOB,\n metadata BLOB NOT NULL DEFAULT (jsonb('{}')),\n metrics BLOB NOT NULL DEFAULT (jsonb('{\"total_cost_in_usd\":0,\"total_duration_ms\":0,\"total_turns\":0}')),\n last_activity_timestamp_ms INTEGER NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (session_id),\n CHECK (\n (agent_id IS NOT NULL AND agent_spec IS NULL)\n OR (agent_id IS NULL AND agent_spec IS NOT NULL)\n )\n ) STRICT\n `.execute(trx);\n await sql`\n INSERT INTO session_old (\n tenant_id,\n session_id,\n created_by,\n agent_id,\n agent_name,\n agent_spec,\n title,\n last_turn_id,\n external_id,\n custom,\n metadata,\n metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n )\n SELECT\n tenant_id,\n session_id,\n COALESCE(json_extract(created_by_subject, '$.subject_id'), ''),\n agent_id,\n agent_name,\n agent_spec,\n title,\n last_turn_id,\n external_id,\n custom,\n metadata,\n metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n FROM session\n `.execute(trx);\n await sql`DROP TABLE session`.execute(trx);\n await sql`ALTER TABLE session_old RENAME TO session`.execute(trx);\n await sql`\n CREATE INDEX session_list_idx ON session (tenant_id, created_at, session_id)\n `.execute(trx);\n await sql`\n CREATE INDEX session_agent_id_idx\n ON session (tenant_id, agent_id) WHERE agent_id IS NOT NULL\n `.execute(trx);\n await sql`\n CREATE INDEX session_list_updated_at_idx ON session (tenant_id, updated_at, session_id)\n `.execute(trx);\n await sql`\n CREATE INDEX session_agent_created_at_idx\n ON session (tenant_id, agent_id, created_at) WHERE agent_id IS NOT NULL\n `.execute(trx);\n await sql`\n CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}\n ON session (tenant_id, external_id) WHERE external_id IS NOT NULL\n `.execute(trx);\n });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n","/** Partial unique index on `session (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const SESSION_EXTERNAL_ID_UQ = 'session_external_id_uq';\n\n/** Partial unique index on `agent (tenant_id, external_id) WHERE external_id IS NOT NULL`. */\nexport const AGENT_EXTERNAL_ID_UQ = 'agent_external_id_uq';\n\n/** `(tenant_id, created_by_subject.subject_id)` on agent. */\nexport const AGENT_CREATED_BY_SUBJECT_ID_IDX = 'agent_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on session. */\nexport const SESSION_CREATED_BY_SUBJECT_ID_IDX = 'session_created_by_subject_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule. */\nexport const SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = 'schedule_created_by_subject_id_idx';\n\n/** `(tenant_id, agent_id)` on schedule — list schedules for one agent by id. */\nexport const SCHEDULE_AGENT_ID_IDX = 'schedule_agent_id_idx';\n\n/** `(tenant_id, created_by_subject.subject_id)` on schedule_run. */\nexport const SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX = 'schedule_run_created_by_subject_id_idx';\n"],"mappings":"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","names":[]}