@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,69 @@
1
+ // src/db/sqlite/migrations/20260827_000001_schedule.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await db.transaction().execute(async (trx) => {
5
+ await sql`
6
+ CREATE TABLE schedule (
7
+ id TEXT NOT NULL,
8
+ tenant_id TEXT NOT NULL,
9
+ agent_name TEXT NOT NULL,
10
+ name TEXT NOT NULL,
11
+ manifest BLOB NOT NULL,
12
+ status TEXT NOT NULL CHECK (length(status) <= 16),
13
+ created_by TEXT NOT NULL,
14
+ created_at TEXT NOT NULL,
15
+ updated_at TEXT NOT NULL,
16
+ PRIMARY KEY (id),
17
+ FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE
18
+ ) STRICT
19
+ `.execute(trx);
20
+ await sql`
21
+ CREATE INDEX schedule_agent_idx
22
+ ON schedule (tenant_id, agent_name)
23
+ `.execute(trx);
24
+ await sql`
25
+ CREATE TABLE schedule_run (
26
+ id TEXT NOT NULL,
27
+ tenant_id TEXT NOT NULL,
28
+ schedule_id TEXT NOT NULL REFERENCES schedule (id) ON DELETE CASCADE,
29
+ name TEXT NOT NULL,
30
+ scheduled_for TEXT NOT NULL,
31
+ status TEXT NOT NULL CHECK (length(status) <= 16),
32
+ triggered_by TEXT NOT NULL,
33
+ triggered_at TEXT,
34
+ created_at TEXT NOT NULL,
35
+ updated_at TEXT NOT NULL,
36
+ PRIMARY KEY (id)
37
+ ) STRICT
38
+ `.execute(trx);
39
+ await sql`
40
+ CREATE UNIQUE INDEX schedule_run_name_idx
41
+ ON schedule_run (tenant_id, schedule_id, name)
42
+ `.execute(trx);
43
+ await sql`
44
+ CREATE INDEX schedule_run_scheduled_for_idx
45
+ ON schedule_run (scheduled_for)
46
+ WHERE status = 'scheduled'
47
+ `.execute(trx);
48
+ await sql`
49
+ CREATE UNIQUE INDEX schedule_run_pending_uq
50
+ ON schedule_run (schedule_id)
51
+ WHERE status = 'scheduled'
52
+ `.execute(trx);
53
+ await sql`
54
+ CREATE INDEX schedule_run_list_idx
55
+ ON schedule_run (schedule_id, scheduled_for DESC)
56
+ `.execute(trx);
57
+ });
58
+ }
59
+ async function down(db) {
60
+ await db.transaction().execute(async (trx) => {
61
+ await sql`DROP TABLE IF EXISTS schedule_run`.execute(trx);
62
+ await sql`DROP TABLE IF EXISTS schedule`.execute(trx);
63
+ });
64
+ }
65
+ export {
66
+ down,
67
+ up
68
+ };
69
+ //# sourceMappingURL=20260827_000001_schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260827_000001_schedule.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Scheduled agents for SQLite — mirrors\n * db/postgres/migrations/20260827_000001_schedule.ts, including the composite\n * FK to `agent(tenant_id, name)` and both partial indexes.\n *\n * SQLite differences: `manifest` is BLOB JSONB, timestamps are ISO TEXT, tables\n * are STRICT. No parent table is rebuilt here, so no `PRAGMA foreign_keys`\n * toggle is needed — the migration owns its own transaction because Kysely's\n * Migrator does not wrap SQLite migrations.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE TABLE schedule (\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\n await sql`\n CREATE INDEX schedule_agent_idx\n ON schedule (tenant_id, agent_name)\n `.execute(trx);\n\n await sql`\n CREATE TABLE schedule_run (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n schedule_id TEXT NOT NULL REFERENCES schedule (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\n await sql`\n CREATE UNIQUE INDEX schedule_run_name_idx\n ON schedule_run (tenant_id, schedule_id, name)\n `.execute(trx);\n\n // Partial: the table is overwhelmingly terminal rows.\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\n // At most one pending run per schedule — the resume-vs-trigger race as a constraint.\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\n // Run history: newest first within one schedule.\n await sql`\n CREATE INDEX schedule_run_list_idx\n ON schedule_run (schedule_id, scheduled_for DESC)\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 TABLE IF EXISTS schedule_run`.execute(trx);\n await sql`DROP TABLE IF EXISTS schedule`.execute(trx);\n });\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAYjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcJ,QAAQ,GAAG;AAEb,UAAM;AAAA;AAAA;AAAA,MAGJ,QAAQ,GAAG;AAEb,UAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcJ,QAAQ,GAAG;AAEb,UAAM;AAAA;AAAA;AAAA,MAGJ,QAAQ,GAAG;AAGb,UAAM;AAAA;AAAA;AAAA;AAAA,MAIJ,QAAQ,GAAG;AAGb,UAAM;AAAA;AAAA;AAAA;AAAA,MAIJ,QAAQ,GAAG;AAGb,UAAM;AAAA;AAAA;AAAA,MAGJ,QAAQ,GAAG;AAAA,EACf,CAAC;AACH;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM,uCAAuC,QAAQ,GAAG;AACxD,UAAM,mCAAmC,QAAQ,GAAG;AAAA,EACtD,CAAC;AACH;","names":[]}
@@ -0,0 +1,165 @@
1
+ // src/db/sqlite/migrations/20260827_000001_session_metrics.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
5
+ try {
6
+ await db.transaction().execute(async (trx) => {
7
+ await sql`
8
+ CREATE TABLE session_new (
9
+ tenant_id TEXT NOT NULL,
10
+ session_id TEXT NOT NULL,
11
+ created_by TEXT NOT NULL DEFAULT '',
12
+ agent_id TEXT,
13
+ agent_name TEXT,
14
+ agent_spec BLOB,
15
+ title TEXT,
16
+ last_turn_id TEXT,
17
+ custom BLOB,
18
+ metrics BLOB NOT NULL DEFAULT (jsonb('{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}')),
19
+ last_activity_timestamp_ms INTEGER NOT NULL,
20
+ created_at TEXT NOT NULL,
21
+ updated_at TEXT NOT NULL,
22
+ PRIMARY KEY (session_id),
23
+ CHECK (
24
+ (agent_id IS NOT NULL AND agent_spec IS NULL)
25
+ OR (agent_id IS NULL AND agent_spec IS NOT NULL)
26
+ )
27
+ ) STRICT
28
+ `.execute(trx);
29
+ await sql`
30
+ INSERT INTO session_new (
31
+ tenant_id,
32
+ session_id,
33
+ created_by,
34
+ agent_id,
35
+ agent_name,
36
+ agent_spec,
37
+ title,
38
+ last_turn_id,
39
+ custom,
40
+ metrics,
41
+ last_activity_timestamp_ms,
42
+ created_at,
43
+ updated_at
44
+ )
45
+ SELECT
46
+ tenant_id,
47
+ session_id,
48
+ created_by,
49
+ agent_id,
50
+ agent_name,
51
+ agent_spec,
52
+ title,
53
+ last_turn_id,
54
+ custom,
55
+ jsonb('{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}'),
56
+ last_activity_timestamp_ms,
57
+ created_at,
58
+ updated_at
59
+ FROM session
60
+ `.execute(trx);
61
+ await sql`DROP TABLE session`.execute(trx);
62
+ await sql`ALTER TABLE session_new RENAME TO session`.execute(trx);
63
+ await sql`
64
+ CREATE INDEX session_list_idx
65
+ ON session (tenant_id, created_at, session_id)
66
+ `.execute(trx);
67
+ await sql`
68
+ CREATE INDEX session_agent_id_idx
69
+ ON session (tenant_id, agent_id)
70
+ WHERE agent_id IS NOT NULL
71
+ `.execute(trx);
72
+ await sql`
73
+ CREATE INDEX session_list_updated_at_idx
74
+ ON session (tenant_id, updated_at, session_id)
75
+ `.execute(trx);
76
+ await sql`
77
+ CREATE INDEX session_agent_created_at_idx
78
+ ON session (tenant_id, agent_id, created_at)
79
+ WHERE agent_id IS NOT NULL
80
+ `.execute(trx);
81
+ });
82
+ } finally {
83
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
84
+ }
85
+ }
86
+ async function down(db) {
87
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
88
+ try {
89
+ await db.transaction().execute(async (trx) => {
90
+ await sql`
91
+ CREATE TABLE session_old (
92
+ tenant_id TEXT NOT NULL,
93
+ session_id TEXT NOT NULL,
94
+ created_by TEXT NOT NULL DEFAULT '',
95
+ agent_id TEXT,
96
+ agent_name TEXT,
97
+ agent_spec BLOB,
98
+ title TEXT,
99
+ last_turn_id TEXT,
100
+ custom BLOB,
101
+ last_activity_timestamp_ms INTEGER NOT NULL,
102
+ created_at TEXT NOT NULL,
103
+ updated_at TEXT NOT NULL,
104
+ PRIMARY KEY (session_id),
105
+ CHECK (
106
+ (agent_id IS NOT NULL AND agent_spec IS NULL)
107
+ OR (agent_id IS NULL AND agent_spec IS NOT NULL)
108
+ )
109
+ ) STRICT
110
+ `.execute(trx);
111
+ await sql`
112
+ INSERT INTO session_old (
113
+ tenant_id,
114
+ session_id,
115
+ created_by,
116
+ agent_id,
117
+ agent_name,
118
+ agent_spec,
119
+ title,
120
+ last_turn_id,
121
+ custom,
122
+ last_activity_timestamp_ms,
123
+ created_at,
124
+ updated_at
125
+ )
126
+ SELECT
127
+ tenant_id,
128
+ session_id,
129
+ created_by,
130
+ agent_id,
131
+ agent_name,
132
+ agent_spec,
133
+ title,
134
+ last_turn_id,
135
+ custom,
136
+ last_activity_timestamp_ms,
137
+ created_at,
138
+ updated_at
139
+ FROM session
140
+ `.execute(trx);
141
+ await sql`DROP TABLE session`.execute(trx);
142
+ await sql`ALTER TABLE session_old RENAME TO session`.execute(trx);
143
+ await sql`
144
+ CREATE INDEX session_list_idx
145
+ ON session (tenant_id, created_at, session_id)
146
+ `.execute(trx);
147
+ await sql`
148
+ CREATE INDEX session_agent_id_idx
149
+ ON session (tenant_id, agent_id)
150
+ WHERE agent_id IS NOT NULL
151
+ `.execute(trx);
152
+ await sql`
153
+ CREATE INDEX session_list_updated_at_idx
154
+ ON session (tenant_id, updated_at, session_id)
155
+ `.execute(trx);
156
+ });
157
+ } finally {
158
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
159
+ }
160
+ }
161
+ export {
162
+ down,
163
+ up
164
+ };
165
+ //# sourceMappingURL=20260827_000001_session_metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260827_000001_session_metrics.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Rebuild `session`: ADD COLUMN cannot take DEFAULT (jsonb(...)) (expression default).\n * DROP TABLE session needs FKs off; PRAGMA foreign_keys is a no-op inside a txn.\n * down also rebuilds — DROP COLUMN rewrites STRICT parents and can CASCADE children.\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 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 custom BLOB,\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\n await sql`\n INSERT INTO session_new (\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 custom,\n metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n )\n SELECT\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 custom,\n jsonb('{\"total_cost_in_usd\":0,\"total_duration_ms\":0,\"total_turns\":0}'),\n last_activity_timestamp_ms,\n created_at,\n updated_at\n FROM session\n `.execute(trx);\n\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 });\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 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 custom BLOB,\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\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 custom,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n )\n SELECT\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 custom,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n FROM session\n `.execute(trx);\n\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\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 });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAOjC,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAqBJ,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA+BJ,QAAQ,GAAG;AAEb,YAAM,wBAAwB,QAAQ,GAAG;AACzC,YAAM,+CAA+C,QAAQ,GAAG;AAChE,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAoBJ,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA6BJ,QAAQ,GAAG;AAEb,YAAM,wBAAwB,QAAQ,GAAG;AACzC,YAAM,+CAA+C,QAAQ,GAAG;AAChE,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AAAA,IACf,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;","names":[]}
@@ -0,0 +1,20 @@
1
+ // src/db/sqlite/migrations/20260828_000001_schedule_name_uq.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await db.transaction().execute(async (trx) => {
5
+ await sql`
6
+ CREATE UNIQUE INDEX schedule_name_uq
7
+ ON schedule (tenant_id, agent_name, name)
8
+ `.execute(trx);
9
+ });
10
+ }
11
+ async function down(db) {
12
+ await db.transaction().execute(async (trx) => {
13
+ await sql`DROP INDEX IF EXISTS schedule_name_uq`.execute(trx);
14
+ });
15
+ }
16
+ export {
17
+ down,
18
+ up
19
+ };
20
+ //# sourceMappingURL=20260828_000001_schedule_name_uq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260828_000001_schedule_name_uq.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Names a schedule uniquely within its agent: UNIQUE (tenant_id, agent_name, name).\n * Mirrors db/postgres/migrations/20260828_000001_schedule_name_uq.ts.\n *\n * A plain CREATE INDEX needs no table rebuild, so no `PRAGMA foreign_keys` toggle.\n * Kysely's SQLite migrator does not wrap migrations, so schema-touching steps\n * run inside `db.transaction()`.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await db.transaction().execute(async trx => {\n await sql`\n CREATE UNIQUE INDEX schedule_name_uq\n ON schedule (tenant_id, agent_name, name)\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 schedule_name_uq`.execute(trx);\n });\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAUjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM;AAAA;AAAA;AAAA,MAGJ,QAAQ,GAAG;AAAA,EACf,CAAC;AACH;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM,2CAA2C,QAAQ,GAAG;AAAA,EAC9D,CAAC;AACH;","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/db/sqlite/migrations/20260831_000001_session_external_id.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var SESSION_EXTERNAL_ID_UQ = "session_external_id_uq";
6
+
7
+ // src/db/sqlite/migrations/20260831_000001_session_external_id.ts
8
+ async function up(db) {
9
+ await db.transaction().execute(async (trx) => {
10
+ await sql`ALTER TABLE session ADD COLUMN external_id TEXT`.execute(trx);
11
+ await sql`
12
+ CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}
13
+ ON session (tenant_id, external_id)
14
+ WHERE external_id IS NOT NULL
15
+ `.execute(trx);
16
+ });
17
+ }
18
+ async function down(db) {
19
+ await db.transaction().execute(async (trx) => {
20
+ await sql`DROP INDEX IF EXISTS ${sql.raw(SESSION_EXTERNAL_ID_UQ)}`.execute(trx);
21
+ await sql`ALTER TABLE session DROP COLUMN external_id`.execute(trx);
22
+ });
23
+ }
24
+ export {
25
+ down,
26
+ up
27
+ };
28
+ //# sourceMappingURL=20260831_000001_session_external_id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260831_000001_session_external_id.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { type Kysely, sql } from 'kysely';\nimport { SESSION_EXTERNAL_ID_UQ } from '../../indexes';\n\n/**\n * Optional session `external_id`, unique within a tenant when set.\n * NULLs are excluded so sessions 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 session ADD COLUMN external_id TEXT`.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 });\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(SESSION_EXTERNAL_ID_UQ)}`.execute(trx);\n await sql`ALTER TABLE session 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;;;ACC1B,IAAM,yBAAyB;;;ADMtC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM,qDAAqD,QAAQ,GAAG;AACtE,UAAM;AAAA,4BACkB,IAAI,IAAI,sBAAsB,CAAC;AAAA;AAAA;AAAA,MAGrD,QAAQ,GAAG;AAAA,EACf,CAAC;AACH;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,QAAO;AAC1C,UAAM,2BAA2B,IAAI,IAAI,sBAAsB,CAAC,GAAG,QAAQ,GAAG;AAC9E,UAAM,iDAAiD,QAAQ,GAAG;AAAA,EACpE,CAAC;AACH;","names":[]}
@@ -0,0 +1,92 @@
1
+ // src/db/sqlite/migrations/20260901_000001_agent_metadata.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
5
+ try {
6
+ await db.transaction().execute(async (trx) => {
7
+ await sql`
8
+ CREATE TABLE agent_new (
9
+ id TEXT NOT NULL,
10
+ tenant_id TEXT NOT NULL,
11
+ name TEXT NOT NULL,
12
+ manifest BLOB NOT NULL,
13
+ metadata BLOB NOT NULL DEFAULT (jsonb('{}')),
14
+ created_at TEXT NOT NULL,
15
+ updated_at TEXT NOT NULL,
16
+ PRIMARY KEY (id),
17
+ UNIQUE (tenant_id, name)
18
+ ) STRICT
19
+ `.execute(trx);
20
+ await sql`
21
+ INSERT INTO agent_new (
22
+ id,
23
+ tenant_id,
24
+ name,
25
+ manifest,
26
+ metadata,
27
+ created_at,
28
+ updated_at
29
+ )
30
+ SELECT
31
+ id,
32
+ tenant_id,
33
+ name,
34
+ manifest,
35
+ jsonb('{}'),
36
+ created_at,
37
+ updated_at
38
+ FROM agent
39
+ `.execute(trx);
40
+ await sql`DROP TABLE agent`.execute(trx);
41
+ await sql`ALTER TABLE agent_new RENAME TO agent`.execute(trx);
42
+ });
43
+ } finally {
44
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
45
+ }
46
+ }
47
+ async function down(db) {
48
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
49
+ try {
50
+ await db.transaction().execute(async (trx) => {
51
+ await sql`
52
+ CREATE TABLE agent_old (
53
+ id TEXT NOT NULL,
54
+ tenant_id TEXT NOT NULL,
55
+ name TEXT NOT NULL,
56
+ manifest BLOB NOT NULL,
57
+ created_at TEXT NOT NULL,
58
+ updated_at TEXT NOT NULL,
59
+ PRIMARY KEY (id),
60
+ UNIQUE (tenant_id, name)
61
+ ) STRICT
62
+ `.execute(trx);
63
+ await sql`
64
+ INSERT INTO agent_old (
65
+ id,
66
+ tenant_id,
67
+ name,
68
+ manifest,
69
+ created_at,
70
+ updated_at
71
+ )
72
+ SELECT
73
+ id,
74
+ tenant_id,
75
+ name,
76
+ manifest,
77
+ created_at,
78
+ updated_at
79
+ FROM agent
80
+ `.execute(trx);
81
+ await sql`DROP TABLE agent`.execute(trx);
82
+ await sql`ALTER TABLE agent_old RENAME TO agent`.execute(trx);
83
+ });
84
+ } finally {
85
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
86
+ }
87
+ }
88
+ export {
89
+ down,
90
+ up
91
+ };
92
+ //# sourceMappingURL=20260901_000001_agent_metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260901_000001_agent_metadata.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Agent registry metadata jsonb column. Mirrors Postgres.\n * Rebuild: ADD/DROP COLUMN cannot take DEFAULT (jsonb(...)) / STRICT drop.\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 metadata BLOB NOT NULL DEFAULT (jsonb('{}')),\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 metadata,\n created_at,\n updated_at\n )\n SELECT\n id,\n tenant_id,\n name,\n manifest,\n jsonb('{}'),\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 });\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 agent_old (\n id TEXT NOT NULL,\n tenant_id TEXT NOT NULL,\n name TEXT NOT NULL,\n manifest 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\n await sql`\n INSERT INTO agent_old (\n id,\n tenant_id,\n name,\n manifest,\n created_at,\n updated_at\n )\n SELECT\n id,\n tenant_id,\n name,\n manifest,\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 });\n } finally {\n await sql`PRAGMA foreign_keys = ON`.execute(db);\n }\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAQjC,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;AAAA,IAC9D,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWJ,QAAQ,GAAG;AAEb,YAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAiBJ,QAAQ,GAAG;AAEb,YAAM,sBAAsB,QAAQ,GAAG;AACvC,YAAM,2CAA2C,QAAQ,GAAG;AAAA,IAC9D,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;","names":[]}
@@ -0,0 +1,197 @@
1
+ // src/db/sqlite/migrations/20260902_000001_session_metadata.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var SESSION_EXTERNAL_ID_UQ = "session_external_id_uq";
6
+
7
+ // src/db/sqlite/migrations/20260902_000001_session_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 session_new (
14
+ tenant_id TEXT NOT NULL,
15
+ session_id TEXT NOT NULL,
16
+ created_by TEXT NOT NULL DEFAULT '',
17
+ agent_id TEXT,
18
+ agent_name TEXT,
19
+ agent_spec BLOB,
20
+ title TEXT,
21
+ last_turn_id TEXT,
22
+ external_id TEXT,
23
+ custom BLOB,
24
+ metadata BLOB NOT NULL DEFAULT (jsonb('{}')),
25
+ metrics BLOB NOT NULL DEFAULT (jsonb('{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}')),
26
+ last_activity_timestamp_ms INTEGER NOT NULL,
27
+ created_at TEXT NOT NULL,
28
+ updated_at TEXT NOT NULL,
29
+ PRIMARY KEY (session_id),
30
+ CHECK (
31
+ (agent_id IS NOT NULL AND agent_spec IS NULL)
32
+ OR (agent_id IS NULL AND agent_spec IS NOT NULL)
33
+ )
34
+ ) STRICT
35
+ `.execute(trx);
36
+ await sql`
37
+ INSERT INTO session_new (
38
+ tenant_id,
39
+ session_id,
40
+ created_by,
41
+ agent_id,
42
+ agent_name,
43
+ agent_spec,
44
+ title,
45
+ last_turn_id,
46
+ external_id,
47
+ custom,
48
+ metadata,
49
+ metrics,
50
+ last_activity_timestamp_ms,
51
+ created_at,
52
+ updated_at
53
+ )
54
+ SELECT
55
+ tenant_id,
56
+ session_id,
57
+ created_by,
58
+ agent_id,
59
+ agent_name,
60
+ agent_spec,
61
+ title,
62
+ last_turn_id,
63
+ external_id,
64
+ custom,
65
+ jsonb('{}'),
66
+ metrics,
67
+ last_activity_timestamp_ms,
68
+ created_at,
69
+ updated_at
70
+ FROM session
71
+ `.execute(trx);
72
+ await sql`DROP TABLE session`.execute(trx);
73
+ await sql`ALTER TABLE session_new RENAME TO session`.execute(trx);
74
+ await sql`
75
+ CREATE INDEX session_list_idx
76
+ ON session (tenant_id, created_at, session_id)
77
+ `.execute(trx);
78
+ await sql`
79
+ CREATE INDEX session_agent_id_idx
80
+ ON session (tenant_id, agent_id)
81
+ WHERE agent_id IS NOT NULL
82
+ `.execute(trx);
83
+ await sql`
84
+ CREATE INDEX session_list_updated_at_idx
85
+ ON session (tenant_id, updated_at, session_id)
86
+ `.execute(trx);
87
+ await sql`
88
+ CREATE INDEX session_agent_created_at_idx
89
+ ON session (tenant_id, agent_id, created_at)
90
+ WHERE agent_id IS NOT NULL
91
+ `.execute(trx);
92
+ await sql`
93
+ CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}
94
+ ON session (tenant_id, external_id)
95
+ WHERE external_id IS NOT NULL
96
+ `.execute(trx);
97
+ });
98
+ } finally {
99
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
100
+ }
101
+ }
102
+ async function down(db) {
103
+ await sql`PRAGMA foreign_keys = OFF`.execute(db);
104
+ try {
105
+ await db.transaction().execute(async (trx) => {
106
+ await sql`
107
+ CREATE TABLE session_old (
108
+ tenant_id TEXT NOT NULL,
109
+ session_id TEXT NOT NULL,
110
+ created_by TEXT NOT NULL DEFAULT '',
111
+ agent_id TEXT,
112
+ agent_name TEXT,
113
+ agent_spec BLOB,
114
+ title TEXT,
115
+ last_turn_id TEXT,
116
+ external_id TEXT,
117
+ custom BLOB,
118
+ metrics BLOB NOT NULL DEFAULT (jsonb('{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}')),
119
+ last_activity_timestamp_ms INTEGER NOT NULL,
120
+ created_at TEXT NOT NULL,
121
+ updated_at TEXT NOT NULL,
122
+ PRIMARY KEY (session_id),
123
+ CHECK (
124
+ (agent_id IS NOT NULL AND agent_spec IS NULL)
125
+ OR (agent_id IS NULL AND agent_spec IS NOT NULL)
126
+ )
127
+ ) STRICT
128
+ `.execute(trx);
129
+ await sql`
130
+ INSERT INTO session_old (
131
+ tenant_id,
132
+ session_id,
133
+ created_by,
134
+ agent_id,
135
+ agent_name,
136
+ agent_spec,
137
+ title,
138
+ last_turn_id,
139
+ external_id,
140
+ custom,
141
+ metrics,
142
+ last_activity_timestamp_ms,
143
+ created_at,
144
+ updated_at
145
+ )
146
+ SELECT
147
+ tenant_id,
148
+ session_id,
149
+ created_by,
150
+ agent_id,
151
+ agent_name,
152
+ agent_spec,
153
+ title,
154
+ last_turn_id,
155
+ external_id,
156
+ custom,
157
+ metrics,
158
+ last_activity_timestamp_ms,
159
+ created_at,
160
+ updated_at
161
+ FROM session
162
+ `.execute(trx);
163
+ await sql`DROP TABLE session`.execute(trx);
164
+ await sql`ALTER TABLE session_old RENAME TO session`.execute(trx);
165
+ await sql`
166
+ CREATE INDEX session_list_idx
167
+ ON session (tenant_id, created_at, session_id)
168
+ `.execute(trx);
169
+ await sql`
170
+ CREATE INDEX session_agent_id_idx
171
+ ON session (tenant_id, agent_id)
172
+ WHERE agent_id IS NOT NULL
173
+ `.execute(trx);
174
+ await sql`
175
+ CREATE INDEX session_list_updated_at_idx
176
+ ON session (tenant_id, updated_at, session_id)
177
+ `.execute(trx);
178
+ await sql`
179
+ CREATE INDEX session_agent_created_at_idx
180
+ ON session (tenant_id, agent_id, created_at)
181
+ WHERE agent_id IS NOT NULL
182
+ `.execute(trx);
183
+ await sql`
184
+ CREATE UNIQUE INDEX ${sql.raw(SESSION_EXTERNAL_ID_UQ)}
185
+ ON session (tenant_id, external_id)
186
+ WHERE external_id IS NOT NULL
187
+ `.execute(trx);
188
+ });
189
+ } finally {
190
+ await sql`PRAGMA foreign_keys = ON`.execute(db);
191
+ }
192
+ }
193
+ export {
194
+ down,
195
+ up
196
+ };
197
+ //# sourceMappingURL=20260902_000001_session_metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260902_000001_session_metadata.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\nimport { SESSION_EXTERNAL_ID_UQ } from '../../indexes';\n\n/**\n * Caller-owned session metadata. Rebuilds `session` because ADD COLUMN cannot\n * take DEFAULT (jsonb('{}')) (expression default). Keeps `custom` unchanged.\n * DROP TABLE session needs FKs off; 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 session_new (\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\n await sql`\n INSERT INTO session_new (\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 created_by,\n agent_id,\n agent_name,\n agent_spec,\n title,\n last_turn_id,\n external_id,\n custom,\n jsonb('{}'),\n metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n FROM session\n `.execute(trx);\n\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 });\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 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 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\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 metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n )\n SELECT\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 metrics,\n last_activity_timestamp_ms,\n created_at,\n updated_at\n FROM session\n `.execute(trx);\n\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\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 });\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,SAAS,WAAwB;;;ACC1B,IAAM,yBAAyB;;;ADOtC,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAuBJ,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAmCJ,QAAQ,GAAG;AAEb,YAAM,wBAAwB,QAAQ,GAAG;AACzC,YAAM,+CAA+C,QAAQ,GAAG;AAChE,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,QAAQ,GAAG;AACb,YAAM;AAAA,8BACkB,IAAI,IAAI,sBAAsB,CAAC;AAAA;AAAA;AAAA,QAGrD,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAsBJ,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAiCJ,QAAQ,GAAG;AAEb,YAAM,wBAAwB,QAAQ,GAAG;AACzC,YAAM,+CAA+C,QAAQ,GAAG;AAChE,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA,QAGJ,QAAQ,GAAG;AACb,YAAM;AAAA;AAAA;AAAA;AAAA,QAIJ,QAAQ,GAAG;AACb,YAAM;AAAA,8BACkB,IAAI,IAAI,sBAAsB,CAAC;AAAA;AAAA;AAAA,QAGrD,QAAQ,GAAG;AAAA,IACf,CAAC;AAAA,EACH,UAAE;AACA,UAAM,8BAA8B,QAAQ,EAAE;AAAA,EAChD;AACF;","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/db/sqlite/migrations/20260902_000002_agent_external_id.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/20260902_000002_agent_external_id.ts
8
+ async function up(db) {
9
+ await db.transaction().execute(async (trx) => {
10
+ await sql`ALTER TABLE agent ADD COLUMN external_id TEXT`.execute(trx);
11
+ await sql`
12
+ CREATE UNIQUE INDEX ${sql.raw(AGENT_EXTERNAL_ID_UQ)}
13
+ ON agent (tenant_id, external_id)
14
+ WHERE external_id IS NOT NULL
15
+ `.execute(trx);
16
+ });
17
+ }
18
+ async function down(db) {
19
+ await db.transaction().execute(async (trx) => {
20
+ await sql`DROP INDEX IF EXISTS ${sql.raw(AGENT_EXTERNAL_ID_UQ)}`.execute(trx);
21
+ await sql`ALTER TABLE agent DROP COLUMN external_id`.execute(trx);
22
+ });
23
+ }
24
+ export {
25
+ down,
26
+ up
27
+ };
28
+ //# sourceMappingURL=20260902_000002_agent_external_id.js.map