@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,63 @@
1
+ // src/db/postgres/migrations/20260821_000001_agent_compaction.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await sql`
6
+ UPDATE agent
7
+ SET manifest = jsonb_set(
8
+ manifest #- '{config,context_management,compaction,compaction_threshold_tokens}',
9
+ '{config,context_management,compaction,trigger}',
10
+ coalesce(
11
+ manifest #> '{config,context_management,compaction,trigger}',
12
+ jsonb_build_object(
13
+ 'type', 'input_tokens',
14
+ 'value', (manifest #>> '{config,context_management,compaction,compaction_threshold_tokens}')::numeric
15
+ )
16
+ )
17
+ )
18
+ WHERE manifest #>> '{config,context_management,compaction,compaction_threshold_tokens}' IS NOT NULL
19
+ `.execute(db);
20
+ await sql`
21
+ UPDATE session
22
+ SET agent_spec = jsonb_set(
23
+ agent_spec #- '{config,context_management,compaction,compaction_threshold_tokens}',
24
+ '{config,context_management,compaction,trigger}',
25
+ coalesce(
26
+ agent_spec #> '{config,context_management,compaction,trigger}',
27
+ jsonb_build_object(
28
+ 'type', 'input_tokens',
29
+ 'value', (agent_spec #>> '{config,context_management,compaction,compaction_threshold_tokens}')::numeric
30
+ )
31
+ )
32
+ )
33
+ WHERE agent_spec #>> '{config,context_management,compaction,compaction_threshold_tokens}' IS NOT NULL
34
+ `.execute(db);
35
+ }
36
+ async function down(db) {
37
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
38
+ await sql`
39
+ UPDATE agent
40
+ SET manifest = jsonb_set(
41
+ manifest #- '{config,context_management,compaction,trigger}',
42
+ '{config,context_management,compaction,compaction_threshold_tokens}',
43
+ to_jsonb((manifest #>> '{config,context_management,compaction,trigger,value}')::numeric)
44
+ )
45
+ WHERE manifest #>> '{config,context_management,compaction,trigger,type}' = 'input_tokens'
46
+ AND manifest #>> '{config,context_management,compaction,trigger,value}' IS NOT NULL
47
+ `.execute(db);
48
+ await sql`
49
+ UPDATE session
50
+ SET agent_spec = jsonb_set(
51
+ agent_spec #- '{config,context_management,compaction,trigger}',
52
+ '{config,context_management,compaction,compaction_threshold_tokens}',
53
+ to_jsonb((agent_spec #>> '{config,context_management,compaction,trigger,value}')::numeric)
54
+ )
55
+ WHERE agent_spec #>> '{config,context_management,compaction,trigger,type}' = 'input_tokens'
56
+ AND agent_spec #>> '{config,context_management,compaction,trigger,value}' IS NOT NULL
57
+ `.execute(db);
58
+ }
59
+ export {
60
+ down,
61
+ up
62
+ };
63
+ //# sourceMappingURL=20260821_000001_agent_compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260821_000001_agent_compaction.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/** Replace the legacy compaction token threshold with an input-token trigger. */\nexport async function up<TDatabase>(db: Kysely<TDatabase>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`\n UPDATE agent\n SET manifest = jsonb_set(\n manifest #- '{config,context_management,compaction,compaction_threshold_tokens}',\n '{config,context_management,compaction,trigger}',\n coalesce(\n manifest #> '{config,context_management,compaction,trigger}',\n jsonb_build_object(\n 'type', 'input_tokens',\n 'value', (manifest #>> '{config,context_management,compaction,compaction_threshold_tokens}')::numeric\n )\n )\n )\n WHERE manifest #>> '{config,context_management,compaction,compaction_threshold_tokens}' IS NOT NULL\n `.execute(db);\n await sql`\n UPDATE session\n SET agent_spec = jsonb_set(\n agent_spec #- '{config,context_management,compaction,compaction_threshold_tokens}',\n '{config,context_management,compaction,trigger}',\n coalesce(\n agent_spec #> '{config,context_management,compaction,trigger}',\n jsonb_build_object(\n 'type', 'input_tokens',\n 'value', (agent_spec #>> '{config,context_management,compaction,compaction_threshold_tokens}')::numeric\n )\n )\n )\n WHERE agent_spec #>> '{config,context_management,compaction,compaction_threshold_tokens}' IS NOT NULL\n `.execute(db);\n}\n\n/** Restore the legacy token threshold for rollback compatibility. */\nexport async function down<TDatabase>(db: Kysely<TDatabase>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`\n UPDATE agent\n SET manifest = jsonb_set(\n manifest #- '{config,context_management,compaction,trigger}',\n '{config,context_management,compaction,compaction_threshold_tokens}',\n to_jsonb((manifest #>> '{config,context_management,compaction,trigger,value}')::numeric)\n )\n WHERE manifest #>> '{config,context_management,compaction,trigger,type}' = 'input_tokens'\n AND manifest #>> '{config,context_management,compaction,trigger,value}' IS NOT NULL\n `.execute(db);\n await sql`\n UPDATE session\n SET agent_spec = jsonb_set(\n agent_spec #- '{config,context_management,compaction,trigger}',\n '{config,context_management,compaction,compaction_threshold_tokens}',\n to_jsonb((agent_spec #>> '{config,context_management,compaction,trigger,value}')::numeric)\n )\n WHERE agent_spec #>> '{config,context_management,compaction,trigger,type}' = 'input_tokens'\n AND agent_spec #>> '{config,context_management,compaction,trigger,value}' IS NOT NULL\n `.execute(db);\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAGjC,eAAsB,GAAc,IAAsC;AACxE,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcJ,QAAQ,EAAE;AACZ,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcJ,QAAQ,EAAE;AACd;AAGA,eAAsB,KAAgB,IAAsC;AAC1E,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ,QAAQ,EAAE;AACZ,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASJ,QAAQ,EAAE;AACd;","names":[]}
@@ -0,0 +1,40 @@
1
+ // src/db/postgres/migrations/20260827_000001_schedule.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await db.schema.createTable("schedule").addColumn("id", "text", (col) => col.notNull()).addColumn("tenant_id", "text", (col) => col.notNull()).addColumn("agent_name", "text", (col) => col.notNull()).addColumn("name", "text", (col) => col.notNull()).addColumn("manifest", "jsonb", (col) => col.notNull()).addColumn("status", "text", (col) => col.notNull()).addColumn("created_by", "text", (col) => col.notNull()).addColumn("created_at", "timestamptz", (col) => col.notNull()).addColumn("updated_at", "timestamptz", (col) => col.notNull()).addPrimaryKeyConstraint("schedule_pkey", ["id"]).addForeignKeyConstraint(
6
+ "schedule_agent_name_fk",
7
+ ["tenant_id", "agent_name"],
8
+ "agent",
9
+ ["tenant_id", "name"],
10
+ (cb) => cb.onDelete("cascade")
11
+ ).execute();
12
+ await db.schema.createIndex("schedule_agent_idx").on("schedule").columns(["tenant_id", "agent_name"]).execute();
13
+ await db.schema.createTable("schedule_run").addColumn("id", "text", (col) => col.notNull()).addColumn("tenant_id", "text", (col) => col.notNull()).addColumn("schedule_id", "text", (col) => col.notNull().references("schedule.id").onDelete("cascade")).addColumn("name", "text", (col) => col.notNull()).addColumn("scheduled_for", "timestamptz", (col) => col.notNull()).addColumn("status", sql`varchar(16)`, (col) => col.notNull()).addColumn("triggered_by", "text", (col) => col.notNull()).addColumn("triggered_at", "timestamptz").addColumn("created_at", "timestamptz", (col) => col.notNull()).addColumn("updated_at", "timestamptz", (col) => col.notNull()).addPrimaryKeyConstraint("schedule_run_pkey", ["id"]).execute();
14
+ await sql`ALTER TABLE schedule_run SET (fillfactor = 85)`.execute(db);
15
+ await db.schema.createIndex("schedule_run_name_idx").on("schedule_run").columns(["tenant_id", "schedule_id", "name"]).unique().execute();
16
+ await sql`
17
+ CREATE INDEX schedule_run_scheduled_for_idx
18
+ ON schedule_run (scheduled_for)
19
+ WHERE status = 'scheduled'
20
+ `.execute(db);
21
+ await sql`
22
+ CREATE UNIQUE INDEX schedule_run_pending_uq
23
+ ON schedule_run (schedule_id)
24
+ WHERE status = 'scheduled'
25
+ `.execute(db);
26
+ await sql`
27
+ CREATE INDEX schedule_run_list_idx
28
+ ON schedule_run (schedule_id, scheduled_for DESC)
29
+ `.execute(db);
30
+ }
31
+ async function down(db) {
32
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
33
+ await db.schema.dropTable("schedule_run").ifExists().cascade().execute();
34
+ await db.schema.dropTable("schedule").ifExists().cascade().execute();
35
+ }
36
+ export {
37
+ down,
38
+ up
39
+ };
40
+ //# sourceMappingURL=20260827_000001_schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260827_000001_schedule.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Scheduled agents: `schedule` + `schedule_run`.\n *\n * - `schedule`: immutable application-generated `id` (ULID) as PK. Spec lives in\n * Zod-validated `manifest` jsonb (same pattern as `agent`). Bound by agent\n * name: FK `(tenant_id, agent_name)` → `agent(tenant_id, name)` ON DELETE CASCADE\n * (agent names are unique and immutable within a tenant).\n * - `schedule_run`: one row per run, past or pending. The single pending run is a\n * row like any other (`status = 'scheduled'`), which is what makes \"next trigger\n * time\" a plain query instead of a computation.\n *\n * Three deliberate index choices:\n * - `schedule_run_scheduled_for_idx` is PARTIAL on `status = 'scheduled'`. The table is\n * overwhelmingly terminal rows, so an unfiltered scheduled_for index would get steadily\n * more expensive as history grows, for no benefit.\n * - `schedule_run_pending_uq` enforces AT MOST ONE pending run per schedule. This\n * is the resume-vs-trigger race expressed as a constraint instead of code.\n * - `schedule_run_name_idx` makes a repeated trigger idempotent: one trigger time maps to\n * exactly one row (`sched-<unixSeconds>`), so a duplicated dispatch cannot\n * double-insert.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n\n await db.schema\n .createTable('schedule')\n .addColumn('id', 'text', col => col.notNull())\n .addColumn('tenant_id', 'text', col => col.notNull())\n .addColumn('agent_name', 'text', col => col.notNull())\n .addColumn('name', 'text', col => col.notNull())\n .addColumn('manifest', 'jsonb', col => col.notNull())\n .addColumn('status', 'text', col => col.notNull())\n .addColumn('created_by', 'text', col => col.notNull())\n .addColumn('created_at', 'timestamptz', col => col.notNull())\n .addColumn('updated_at', 'timestamptz', col => col.notNull())\n .addPrimaryKeyConstraint('schedule_pkey', ['id'])\n .addForeignKeyConstraint(\n 'schedule_agent_name_fk',\n ['tenant_id', 'agent_name'],\n 'agent',\n ['tenant_id', 'name'],\n cb => cb.onDelete('cascade'),\n )\n .execute();\n\n // Schedules are listed per agent (the agent detail page) far more than globally.\n await db.schema.createIndex('schedule_agent_idx').on('schedule').columns(['tenant_id', 'agent_name']).execute();\n\n await db.schema\n .createTable('schedule_run')\n .addColumn('id', 'text', col => col.notNull())\n .addColumn('tenant_id', 'text', col => col.notNull())\n .addColumn('schedule_id', 'text', col => col.notNull().references('schedule.id').onDelete('cascade'))\n .addColumn('name', 'text', col => col.notNull())\n .addColumn('scheduled_for', 'timestamptz', col => col.notNull())\n .addColumn('status', sql`varchar(16)`, col => col.notNull())\n .addColumn('triggered_by', 'text', col => col.notNull())\n .addColumn('triggered_at', 'timestamptz')\n .addColumn('created_at', 'timestamptz', col => col.notNull())\n .addColumn('updated_at', 'timestamptz', col => col.notNull())\n .addPrimaryKeyConstraint('schedule_run_pkey', ['id'])\n .execute();\n\n // A run row takes two or three small bounded updates in its life\n // (scheduled -> triggered -> terminal); leave HOT headroom for them.\n await sql`ALTER TABLE schedule_run SET (fillfactor = 85)`.execute(db);\n\n await db.schema\n .createIndex('schedule_run_name_idx')\n .on('schedule_run')\n .columns(['tenant_id', 'schedule_id', 'name'])\n .unique()\n .execute();\n\n await sql`\n CREATE INDEX schedule_run_scheduled_for_idx\n ON schedule_run (scheduled_for)\n WHERE status = 'scheduled'\n `.execute(db);\n\n await sql`\n CREATE UNIQUE INDEX schedule_run_pending_uq\n ON schedule_run (schedule_id)\n WHERE status = 'scheduled'\n `.execute(db);\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(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema.dropTable('schedule_run').ifExists().cascade().execute();\n await db.schema.dropTable('schedule').ifExists().cascade().execute();\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAuBjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AAEnD,QAAM,GAAG,OACN,YAAY,UAAU,EACtB,UAAU,MAAM,QAAQ,SAAO,IAAI,QAAQ,CAAC,EAC5C,UAAU,aAAa,QAAQ,SAAO,IAAI,QAAQ,CAAC,EACnD,UAAU,cAAc,QAAQ,SAAO,IAAI,QAAQ,CAAC,EACpD,UAAU,QAAQ,QAAQ,SAAO,IAAI,QAAQ,CAAC,EAC9C,UAAU,YAAY,SAAS,SAAO,IAAI,QAAQ,CAAC,EACnD,UAAU,UAAU,QAAQ,SAAO,IAAI,QAAQ,CAAC,EAChD,UAAU,cAAc,QAAQ,SAAO,IAAI,QAAQ,CAAC,EACpD,UAAU,cAAc,eAAe,SAAO,IAAI,QAAQ,CAAC,EAC3D,UAAU,cAAc,eAAe,SAAO,IAAI,QAAQ,CAAC,EAC3D,wBAAwB,iBAAiB,CAAC,IAAI,CAAC,EAC/C;AAAA,IACC;AAAA,IACA,CAAC,aAAa,YAAY;AAAA,IAC1B;AAAA,IACA,CAAC,aAAa,MAAM;AAAA,IACpB,QAAM,GAAG,SAAS,SAAS;AAAA,EAC7B,EACC,QAAQ;AAGX,QAAM,GAAG,OAAO,YAAY,oBAAoB,EAAE,GAAG,UAAU,EAAE,QAAQ,CAAC,aAAa,YAAY,CAAC,EAAE,QAAQ;AAE9G,QAAM,GAAG,OACN,YAAY,cAAc,EAC1B,UAAU,MAAM,QAAQ,SAAO,IAAI,QAAQ,CAAC,EAC5C,UAAU,aAAa,QAAQ,SAAO,IAAI,QAAQ,CAAC,EACnD,UAAU,eAAe,QAAQ,SAAO,IAAI,QAAQ,EAAE,WAAW,aAAa,EAAE,SAAS,SAAS,CAAC,EACnG,UAAU,QAAQ,QAAQ,SAAO,IAAI,QAAQ,CAAC,EAC9C,UAAU,iBAAiB,eAAe,SAAO,IAAI,QAAQ,CAAC,EAC9D,UAAU,UAAU,kBAAkB,SAAO,IAAI,QAAQ,CAAC,EAC1D,UAAU,gBAAgB,QAAQ,SAAO,IAAI,QAAQ,CAAC,EACtD,UAAU,gBAAgB,aAAa,EACvC,UAAU,cAAc,eAAe,SAAO,IAAI,QAAQ,CAAC,EAC3D,UAAU,cAAc,eAAe,SAAO,IAAI,QAAQ,CAAC,EAC3D,wBAAwB,qBAAqB,CAAC,IAAI,CAAC,EACnD,QAAQ;AAIX,QAAM,oDAAoD,QAAQ,EAAE;AAEpE,QAAM,GAAG,OACN,YAAY,uBAAuB,EACnC,GAAG,cAAc,EACjB,QAAQ,CAAC,aAAa,eAAe,MAAM,CAAC,EAC5C,OAAO,EACP,QAAQ;AAEX,QAAM;AAAA;AAAA;AAAA;AAAA,IAIJ,QAAQ,EAAE;AAEZ,QAAM;AAAA;AAAA;AAAA;AAAA,IAIJ,QAAQ,EAAE;AAGZ,QAAM;AAAA;AAAA;AAAA,IAGJ,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OAAO,UAAU,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;AACvE,QAAM,GAAG,OAAO,UAAU,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;AACrE;","names":[]}
@@ -0,0 +1,25 @@
1
+ // src/db/postgres/migrations/20260827_000001_session_metrics.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await db.schema.alterTable("session").addColumn(
6
+ "metrics",
7
+ "jsonb",
8
+ (col) => col.notNull().defaultTo(sql`'{"total_cost_in_usd":0,"total_duration_ms":0,"total_turns":0}'::jsonb`)
9
+ ).execute();
10
+ await sql`
11
+ CREATE INDEX session_agent_created_at_idx
12
+ ON session (tenant_id, agent_id, created_at)
13
+ WHERE agent_id IS NOT NULL
14
+ `.execute(db);
15
+ }
16
+ async function down(db) {
17
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
18
+ await sql`DROP INDEX IF EXISTS session_agent_created_at_idx`.execute(db);
19
+ await db.schema.alterTable("session").dropColumn("metrics").execute();
20
+ }
21
+ export {
22
+ down,
23
+ up
24
+ };
25
+ //# sourceMappingURL=20260827_000001_session_metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260827_000001_session_metrics.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema\n .alterTable('session')\n .addColumn('metrics', 'jsonb', col =>\n col.notNull().defaultTo(sql`'{\"total_cost_in_usd\":0,\"total_duration_ms\":0,\"total_turns\":0}'::jsonb`),\n )\n .execute();\n // Serves GET /sessions/metrics (named agent + created_at window).\n // session_agent_id_idx cannot range on created_at; partial skips inline sessions.\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(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`DROP INDEX IF EXISTS session_agent_created_at_idx`.execute(db);\n await db.schema.alterTable('session').dropColumn('metrics').execute();\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAEjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OACN,WAAW,SAAS,EACpB;AAAA,IAAU;AAAA,IAAW;AAAA,IAAS,SAC7B,IAAI,QAAQ,EAAE,UAAU,2EAA2E;AAAA,EACrG,EACC,QAAQ;AAGX,QAAM;AAAA;AAAA;AAAA;AAAA,IAIJ,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,uDAAuD,QAAQ,EAAE;AACvE,QAAM,GAAG,OAAO,WAAW,SAAS,EAAE,WAAW,SAAS,EAAE,QAAQ;AACtE;","names":[]}
@@ -0,0 +1,15 @@
1
+ // src/db/postgres/migrations/20260828_000001_schedule_name_uq.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await db.schema.createIndex("schedule_name_uq").on("schedule").columns(["tenant_id", "agent_name", "name"]).unique().execute();
6
+ }
7
+ async function down(db) {
8
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
9
+ await sql`DROP INDEX IF EXISTS schedule_name_uq`.execute(db);
10
+ }
11
+ export {
12
+ down,
13
+ up
14
+ };
15
+ //# sourceMappingURL=20260828_000001_schedule_name_uq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/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 *\n * `schedule.name` is a slug-shaped identifier (same `NameSchema` as agents), so it\n * behaves like an addressable key rather than a free-text label. Uniqueness is scoped\n * per agent — two agents may each own a `daily-report`, one agent may not own two.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema\n .createIndex('schedule_name_uq')\n .on('schedule')\n .columns(['tenant_id', 'agent_name', 'name'])\n .unique()\n .execute();\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`DROP INDEX IF EXISTS schedule_name_uq`.execute(db);\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AASjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OACN,YAAY,kBAAkB,EAC9B,GAAG,UAAU,EACb,QAAQ,CAAC,aAAa,cAAc,MAAM,CAAC,EAC3C,OAAO,EACP,QAAQ;AACb;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,2CAA2C,QAAQ,EAAE;AAC7D;","names":[]}
@@ -0,0 +1,26 @@
1
+ // src/db/postgres/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/postgres/migrations/20260831_000001_session_external_id.ts
8
+ async function up(db) {
9
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
10
+ await db.schema.alterTable("session").addColumn("external_id", "text").execute();
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(db);
16
+ }
17
+ async function down(db) {
18
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
19
+ await sql`DROP INDEX IF EXISTS ${sql.raw(SESSION_EXTERNAL_ID_UQ)}`.execute(db);
20
+ await db.schema.alterTable("session").dropColumn("external_id").execute();
21
+ }
22
+ export {
23
+ down,
24
+ up
25
+ };
26
+ //# sourceMappingURL=20260831_000001_session_external_id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260831_000001_session_external_id.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { sql, type Kysely } 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 sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema.alterTable('session').addColumn('external_id', 'text').execute();\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(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`DROP INDEX IF EXISTS ${sql.raw(SESSION_EXTERNAL_ID_UQ)}`.execute(db);\n await db.schema.alterTable('session').dropColumn('external_id').execute();\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;;;ADMtC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OAAO,WAAW,SAAS,EAAE,UAAU,eAAe,MAAM,EAAE,QAAQ;AAC/E,QAAM;AAAA,0BACkB,IAAI,IAAI,sBAAsB,CAAC;AAAA;AAAA;AAAA,IAGrD,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,2BAA2B,IAAI,IAAI,sBAAsB,CAAC,GAAG,QAAQ,EAAE;AAC7E,QAAM,GAAG,OAAO,WAAW,SAAS,EAAE,WAAW,aAAa,EAAE,QAAQ;AAC1E;","names":[]}
@@ -0,0 +1,18 @@
1
+ // src/db/postgres/migrations/20260901_000001_agent_metadata.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await sql`
6
+ ALTER TABLE agent
7
+ ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}'::jsonb
8
+ `.execute(db);
9
+ }
10
+ async function down(db) {
11
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
12
+ await sql`ALTER TABLE agent DROP COLUMN IF EXISTS metadata`.execute(db);
13
+ }
14
+ export {
15
+ down,
16
+ up
17
+ };
18
+ //# sourceMappingURL=20260901_000001_agent_metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260901_000001_agent_metadata.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Agent registry metadata jsonb column.\n * Default `{}` for existing rows.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`\n ALTER TABLE agent\n ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}'::jsonb\n `.execute(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`ALTER TABLE agent DROP COLUMN IF EXISTS metadata`.execute(db);\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAMjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM;AAAA;AAAA;AAAA,IAGJ,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,sDAAsD,QAAQ,EAAE;AACxE;","names":[]}
@@ -0,0 +1,15 @@
1
+ // src/db/postgres/migrations/20260902_000001_session_metadata.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await db.schema.alterTable("session").addColumn("metadata", "jsonb", (col) => col.notNull().defaultTo(sql`'{}'::jsonb`)).execute();
6
+ }
7
+ async function down(db) {
8
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
9
+ await db.schema.alterTable("session").dropColumn("metadata").execute();
10
+ }
11
+ export {
12
+ down,
13
+ up
14
+ };
15
+ //# sourceMappingURL=20260902_000001_session_metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260902_000001_session_metadata.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Caller-owned session metadata (`Record<string, string>`).\n * Keeps `custom` for a later purpose; does not rename or drop it.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema\n .alterTable('session')\n .addColumn('metadata', 'jsonb', col => col.notNull().defaultTo(sql`'{}'::jsonb`))\n .execute();\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema.alterTable('session').dropColumn('metadata').execute();\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAMjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OACN,WAAW,SAAS,EACpB,UAAU,YAAY,SAAS,SAAO,IAAI,QAAQ,EAAE,UAAU,gBAAgB,CAAC,EAC/E,QAAQ;AACb;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OAAO,WAAW,SAAS,EAAE,WAAW,UAAU,EAAE,QAAQ;AACvE;","names":[]}
@@ -0,0 +1,26 @@
1
+ // src/db/postgres/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/postgres/migrations/20260902_000002_agent_external_id.ts
8
+ async function up(db) {
9
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
10
+ await db.schema.alterTable("agent").addColumn("external_id", "text").execute();
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(db);
16
+ }
17
+ async function down(db) {
18
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
19
+ await sql`DROP INDEX IF EXISTS ${sql.raw(AGENT_EXTERNAL_ID_UQ)}`.execute(db);
20
+ await db.schema.alterTable("agent").dropColumn("external_id").execute();
21
+ }
22
+ export {
23
+ down,
24
+ up
25
+ };
26
+ //# sourceMappingURL=20260902_000002_agent_external_id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260902_000002_agent_external_id.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { sql, type Kysely } 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 sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await db.schema.alterTable('agent').addColumn('external_id', 'text').execute();\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(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`DROP INDEX IF EXISTS ${sql.raw(AGENT_EXTERNAL_ID_UQ)}`.execute(db);\n await db.schema.alterTable('agent').dropColumn('external_id').execute();\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;;;ACI1B,IAAM,uBAAuB;;;ADGpC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,GAAG,OAAO,WAAW,OAAO,EAAE,UAAU,eAAe,MAAM,EAAE,QAAQ;AAC7E,QAAM;AAAA,0BACkB,IAAI,IAAI,oBAAoB,CAAC;AAAA;AAAA;AAAA,IAGnD,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,2BAA2B,IAAI,IAAI,oBAAoB,CAAC,GAAG,QAAQ,EAAE;AAC3E,QAAM,GAAG,OAAO,WAAW,OAAO,EAAE,WAAW,aAAa,EAAE,QAAQ;AACxE;","names":[]}
@@ -0,0 +1,18 @@
1
+ // src/db/postgres/migrations/20260903_000001_drop_agent_metadata.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
5
+ await sql`ALTER TABLE agent DROP COLUMN IF EXISTS metadata`.execute(db);
6
+ }
7
+ async function down(db) {
8
+ await sql`SET LOCAL lock_timeout = '5s'`.execute(db);
9
+ await sql`
10
+ ALTER TABLE agent
11
+ ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}'::jsonb
12
+ `.execute(db);
13
+ }
14
+ export {
15
+ down,
16
+ up
17
+ };
18
+ //# sourceMappingURL=20260903_000001_drop_agent_metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260903_000001_drop_agent_metadata.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\n\n/**\n * Drop agent.metadata — identity lives in external_id; column was never on the public Agent API.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`ALTER TABLE agent DROP COLUMN IF EXISTS metadata`.execute(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`SET LOCAL lock_timeout = '5s'`.execute(db);\n await sql`\n ALTER TABLE agent\n ADD COLUMN metadata jsonb NOT NULL DEFAULT '{}'::jsonb\n `.execute(db);\n}\n"],"mappings":";AAAA,SAAS,WAAwB;AAKjC,eAAsB,GAAG,IAAoC;AAC3D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM,sDAAsD,QAAQ,EAAE;AACxE;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM,mCAAmC,QAAQ,EAAE;AACnD,QAAM;AAAA;AAAA;AAAA,IAGJ,QAAQ,EAAE;AACd;","names":[]}
@@ -0,0 +1,110 @@
1
+ // src/db/postgres/migrations/20260903_000002_created_by_subject.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var AGENT_CREATED_BY_SUBJECT_ID_IDX = "agent_created_by_subject_id_idx";
6
+ var SESSION_CREATED_BY_SUBJECT_ID_IDX = "session_created_by_subject_id_idx";
7
+ var SCHEDULE_CREATED_BY_SUBJECT_ID_IDX = "schedule_created_by_subject_id_idx";
8
+ var SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX = "schedule_run_created_by_subject_id_idx";
9
+
10
+ // src/db/postgres/migrations/20260903_000002_created_by_subject.ts
11
+ async function up(db) {
12
+ await sql`
13
+ SET LOCAL lock_timeout = '5s';
14
+
15
+ ALTER TABLE session
16
+ ADD COLUMN created_by_subject jsonb;
17
+ UPDATE session
18
+ SET created_by_subject = jsonb_build_object(
19
+ 'subject_id', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END,
20
+ 'subject_type', 'user',
21
+ 'subject_display_name', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END
22
+ );
23
+ ALTER TABLE session
24
+ ALTER COLUMN created_by_subject SET NOT NULL;
25
+ ALTER TABLE session DROP COLUMN created_by;
26
+ CREATE INDEX ${sql.raw(SESSION_CREATED_BY_SUBJECT_ID_IDX)}
27
+ ON session (tenant_id, (created_by_subject->>'subject_id'));
28
+
29
+ ALTER TABLE agent
30
+ ADD COLUMN created_by_subject jsonb;
31
+ UPDATE agent AS a
32
+ SET created_by_subject = COALESCE(
33
+ (
34
+ SELECT s.created_by_subject
35
+ FROM session AS s
36
+ WHERE s.tenant_id = a.tenant_id
37
+ AND (s.agent_id = a.id OR (s.agent_id IS NULL AND s.agent_name = a.name))
38
+ ORDER BY s.created_at ASC
39
+ LIMIT 1
40
+ ),
41
+ '{"subject_id":"trueforge-default","subject_type":"user","subject_display_name":"trueforge-default"}'::jsonb
42
+ );
43
+ ALTER TABLE agent
44
+ ALTER COLUMN created_by_subject SET NOT NULL;
45
+ CREATE INDEX ${sql.raw(AGENT_CREATED_BY_SUBJECT_ID_IDX)}
46
+ ON agent (tenant_id, (created_by_subject->>'subject_id'));
47
+
48
+ ALTER TABLE schedule
49
+ ADD COLUMN created_by_subject jsonb;
50
+ UPDATE schedule
51
+ SET created_by_subject = jsonb_build_object(
52
+ 'subject_id', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END,
53
+ 'subject_type', 'user',
54
+ 'subject_display_name', CASE WHEN created_by = '' THEN 'trueforge-default' ELSE created_by END
55
+ );
56
+ ALTER TABLE schedule
57
+ ALTER COLUMN created_by_subject SET NOT NULL;
58
+ ALTER TABLE schedule DROP COLUMN created_by;
59
+ CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}
60
+ ON schedule (tenant_id, (created_by_subject->>'subject_id'));
61
+
62
+ ALTER TABLE schedule_run
63
+ ADD COLUMN created_by_subject jsonb;
64
+ UPDATE schedule_run
65
+ SET created_by_subject = jsonb_build_object(
66
+ 'subject_id', CASE WHEN triggered_by = '' THEN 'trueforge-default' ELSE triggered_by END,
67
+ 'subject_type', 'user',
68
+ 'subject_display_name', CASE WHEN triggered_by = '' THEN 'trueforge-default' ELSE triggered_by END
69
+ );
70
+ ALTER TABLE schedule_run
71
+ ALTER COLUMN created_by_subject SET NOT NULL;
72
+ ALTER TABLE schedule_run DROP COLUMN triggered_by;
73
+ CREATE INDEX ${sql.raw(SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX)}
74
+ ON schedule_run (tenant_id, (created_by_subject->>'subject_id'));
75
+ `.execute(db);
76
+ }
77
+ async function down(db) {
78
+ await sql`
79
+ SET LOCAL lock_timeout = '5s';
80
+
81
+ DROP INDEX IF EXISTS ${sql.raw(SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX)};
82
+ ALTER TABLE schedule_run
83
+ ADD COLUMN triggered_by text NOT NULL DEFAULT '';
84
+ UPDATE schedule_run
85
+ SET triggered_by = COALESCE(created_by_subject->>'subject_id', '');
86
+ ALTER TABLE schedule_run DROP COLUMN created_by_subject;
87
+
88
+ DROP INDEX IF EXISTS ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)};
89
+ ALTER TABLE schedule
90
+ ADD COLUMN created_by text NOT NULL DEFAULT '';
91
+ UPDATE schedule
92
+ SET created_by = COALESCE(created_by_subject->>'subject_id', '');
93
+ ALTER TABLE schedule DROP COLUMN created_by_subject;
94
+
95
+ DROP INDEX IF EXISTS ${sql.raw(AGENT_CREATED_BY_SUBJECT_ID_IDX)};
96
+ ALTER TABLE agent DROP COLUMN IF EXISTS created_by_subject;
97
+
98
+ DROP INDEX IF EXISTS ${sql.raw(SESSION_CREATED_BY_SUBJECT_ID_IDX)};
99
+ ALTER TABLE session
100
+ ADD COLUMN created_by text NOT NULL DEFAULT '';
101
+ UPDATE session
102
+ SET created_by = COALESCE(created_by_subject->>'subject_id', '');
103
+ ALTER TABLE session DROP COLUMN created_by_subject;
104
+ `.execute(db);
105
+ }
106
+ export {
107
+ down,
108
+ up
109
+ };
110
+ //# sourceMappingURL=20260903_000002_created_by_subject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/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 SCHEDULE_CREATED_BY_SUBJECT_ID_IDX,\n SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX,\n SESSION_CREATED_BY_SUBJECT_ID_IDX,\n} from '../../indexes';\n\n/**\n * Add `created_by_subject` jsonb on agent, session, schedule, and schedule_run.\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 * Runs inside the Migrator's transaction — do not nest `db.transaction()`.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`\n SET LOCAL lock_timeout = '5s';\n\n ALTER TABLE session\n ADD COLUMN created_by_subject jsonb;\n UPDATE session\n SET created_by_subject = jsonb_build_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 ALTER TABLE session\n ALTER COLUMN created_by_subject SET NOT NULL;\n ALTER TABLE session DROP COLUMN created_by;\n CREATE INDEX ${sql.raw(SESSION_CREATED_BY_SUBJECT_ID_IDX)}\n ON session (tenant_id, (created_by_subject->>'subject_id'));\n\n ALTER TABLE agent\n ADD COLUMN created_by_subject jsonb;\n UPDATE agent AS a\n SET created_by_subject = 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 '{\"subject_id\":\"trueforge-default\",\"subject_type\":\"user\",\"subject_display_name\":\"trueforge-default\"}'::jsonb\n );\n ALTER TABLE agent\n ALTER COLUMN created_by_subject SET NOT NULL;\n CREATE INDEX ${sql.raw(AGENT_CREATED_BY_SUBJECT_ID_IDX)}\n ON agent (tenant_id, (created_by_subject->>'subject_id'));\n\n ALTER TABLE schedule\n ADD COLUMN created_by_subject jsonb;\n UPDATE schedule\n SET created_by_subject = jsonb_build_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 ALTER TABLE schedule\n ALTER COLUMN created_by_subject SET NOT NULL;\n ALTER TABLE schedule DROP COLUMN created_by;\n CREATE INDEX ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)}\n ON schedule (tenant_id, (created_by_subject->>'subject_id'));\n\n ALTER TABLE schedule_run\n ADD COLUMN created_by_subject jsonb;\n UPDATE schedule_run\n SET created_by_subject = jsonb_build_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 ALTER TABLE schedule_run\n ALTER COLUMN created_by_subject SET NOT NULL;\n ALTER TABLE schedule_run DROP COLUMN triggered_by;\n CREATE INDEX ${sql.raw(SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX)}\n ON schedule_run (tenant_id, (created_by_subject->>'subject_id'));\n `.execute(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`\n SET LOCAL lock_timeout = '5s';\n\n DROP INDEX IF EXISTS ${sql.raw(SCHEDULE_RUN_CREATED_BY_SUBJECT_ID_IDX)};\n ALTER TABLE schedule_run\n ADD COLUMN triggered_by text NOT NULL DEFAULT '';\n UPDATE schedule_run\n SET triggered_by = COALESCE(created_by_subject->>'subject_id', '');\n ALTER TABLE schedule_run DROP COLUMN created_by_subject;\n\n DROP INDEX IF EXISTS ${sql.raw(SCHEDULE_CREATED_BY_SUBJECT_ID_IDX)};\n ALTER TABLE schedule\n ADD COLUMN created_by text NOT NULL DEFAULT '';\n UPDATE schedule\n SET created_by = COALESCE(created_by_subject->>'subject_id', '');\n ALTER TABLE schedule DROP COLUMN created_by_subject;\n\n DROP INDEX IF EXISTS ${sql.raw(AGENT_CREATED_BY_SUBJECT_ID_IDX)};\n ALTER TABLE agent DROP COLUMN IF EXISTS created_by_subject;\n\n DROP INDEX IF EXISTS ${sql.raw(SESSION_CREATED_BY_SUBJECT_ID_IDX)};\n ALTER TABLE session\n ADD COLUMN created_by text NOT NULL DEFAULT '';\n UPDATE session\n SET created_by = COALESCE(created_by_subject->>'subject_id', '');\n ALTER TABLE session DROP COLUMN created_by_subject;\n `.execute(db);\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;;;ACO1B,IAAM,kCAAkC;AAGxC,IAAM,oCAAoC;AAG1C,IAAM,qCAAqC;AAM3C,IAAM,yCAAyC;;;ADLtD,eAAsB,GAAG,IAAoC;AAC3D,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAcW,IAAI,IAAI,iCAAiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAmB1C,IAAI,IAAI,+BAA+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAcxC,IAAI,IAAI,kCAAkC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAc3C,IAAI,IAAI,sCAAsC,CAAC;AAAA;AAAA,IAE9D,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM;AAAA;AAAA;AAAA,2BAGmB,IAAI,IAAI,sCAAsC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAO/C,IAAI,IAAI,kCAAkC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAO3C,IAAI,IAAI,+BAA+B,CAAC;AAAA;AAAA;AAAA,2BAGxC,IAAI,IAAI,iCAAiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMjE,QAAQ,EAAE;AACd;","names":[]}
@@ -0,0 +1,48 @@
1
+ // src/db/postgres/migrations/20260904_000001_schedule_agent_id.ts
2
+ import { sql } from "kysely";
3
+
4
+ // src/db/indexes.ts
5
+ var SCHEDULE_AGENT_ID_IDX = "schedule_agent_id_idx";
6
+
7
+ // src/db/postgres/migrations/20260904_000001_schedule_agent_id.ts
8
+ async function up(db) {
9
+ await sql`
10
+ SET LOCAL lock_timeout = '5s';
11
+
12
+ ALTER TABLE schedule
13
+ ADD COLUMN agent_id text;
14
+ UPDATE schedule AS s
15
+ SET agent_id = a.id
16
+ FROM agent AS a
17
+ WHERE s.tenant_id = a.tenant_id
18
+ AND s.agent_name = a.name;
19
+ ALTER TABLE schedule
20
+ ALTER COLUMN agent_id SET NOT NULL;
21
+ ALTER TABLE schedule
22
+ DROP CONSTRAINT schedule_agent_name_fk;
23
+ ALTER TABLE schedule
24
+ ADD CONSTRAINT schedule_agent_id_fk
25
+ FOREIGN KEY (agent_id) REFERENCES agent (id) ON DELETE CASCADE;
26
+ CREATE INDEX ${sql.raw(SCHEDULE_AGENT_ID_IDX)}
27
+ ON schedule (tenant_id, agent_id);
28
+ `.execute(db);
29
+ }
30
+ async function down(db) {
31
+ await sql`
32
+ SET LOCAL lock_timeout = '5s';
33
+
34
+ DROP INDEX IF EXISTS ${sql.raw(SCHEDULE_AGENT_ID_IDX)};
35
+ ALTER TABLE schedule
36
+ DROP CONSTRAINT IF EXISTS schedule_agent_id_fk;
37
+ ALTER TABLE schedule
38
+ ADD CONSTRAINT schedule_agent_name_fk
39
+ FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE;
40
+ ALTER TABLE schedule
41
+ DROP COLUMN agent_id;
42
+ `.execute(db);
43
+ }
44
+ export {
45
+ down,
46
+ up
47
+ };
48
+ //# sourceMappingURL=20260904_000001_schedule_agent_id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/postgres/migrations/20260904_000001_schedule_agent_id.ts","../../../src/db/indexes.ts"],"sourcesContent":["import { sql, type Kysely } from 'kysely';\nimport { SCHEDULE_AGENT_ID_IDX } from '../../indexes';\n\n/**\n * Add `agent_id` on schedule (stable ULID binding). Backfills from `agent` via\n * `(tenant_id, agent_name)`, then drops the name FK in favor of `agent(id)`.\n * Index mirrors `session_agent_id_idx` for per-agent schedule lists.\n * Runs inside the Migrator's transaction — do not nest `db.transaction()`.\n */\nexport async function up(db: Kysely<unknown>): Promise<void> {\n await sql`\n SET LOCAL lock_timeout = '5s';\n\n ALTER TABLE schedule\n ADD COLUMN agent_id text;\n UPDATE schedule AS s\n SET agent_id = a.id\n FROM agent AS a\n WHERE s.tenant_id = a.tenant_id\n AND s.agent_name = a.name;\n ALTER TABLE schedule\n ALTER COLUMN agent_id SET NOT NULL;\n ALTER TABLE schedule\n DROP CONSTRAINT schedule_agent_name_fk;\n ALTER TABLE schedule\n ADD CONSTRAINT schedule_agent_id_fk\n FOREIGN KEY (agent_id) REFERENCES agent (id) ON DELETE CASCADE;\n CREATE INDEX ${sql.raw(SCHEDULE_AGENT_ID_IDX)}\n ON schedule (tenant_id, agent_id);\n `.execute(db);\n}\n\nexport async function down(db: Kysely<unknown>): Promise<void> {\n await sql`\n SET LOCAL lock_timeout = '5s';\n\n DROP INDEX IF EXISTS ${sql.raw(SCHEDULE_AGENT_ID_IDX)};\n ALTER TABLE schedule\n DROP CONSTRAINT IF EXISTS schedule_agent_id_fk;\n ALTER TABLE schedule\n ADD CONSTRAINT schedule_agent_name_fk\n FOREIGN KEY (tenant_id, agent_name) REFERENCES agent (tenant_id, name) ON DELETE CASCADE;\n ALTER TABLE schedule\n DROP COLUMN agent_id;\n `.execute(db);\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;;;ACgB1B,IAAM,wBAAwB;;;ADPrC,eAAsB,GAAG,IAAoC;AAC3D,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAiBW,IAAI,IAAI,qBAAqB,CAAC;AAAA;AAAA,IAE7C,QAAQ,EAAE;AACd;AAEA,eAAsB,KAAK,IAAoC;AAC7D,QAAM;AAAA;AAAA;AAAA,2BAGmB,IAAI,IAAI,qBAAqB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQrD,QAAQ,EAAE;AACd;","names":[]}
@@ -0,0 +1,69 @@
1
+ // src/db/sqlite/migrations/20260821_000001_agent_compaction.ts
2
+ import { sql } from "kysely";
3
+ async function up(db) {
4
+ await db.transaction().execute(async (transaction) => {
5
+ await sql`
6
+ UPDATE agent
7
+ SET manifest = jsonb_set(
8
+ jsonb_remove(manifest, '$.config.context_management.compaction.compaction_threshold_tokens'),
9
+ '$.config.context_management.compaction.trigger',
10
+ coalesce(
11
+ jsonb_extract(manifest, '$.config.context_management.compaction.trigger'),
12
+ jsonb(json_object(
13
+ 'type', 'input_tokens',
14
+ 'value', cast(
15
+ json_extract(manifest, '$.config.context_management.compaction.compaction_threshold_tokens') AS INTEGER
16
+ )
17
+ ))
18
+ )
19
+ )
20
+ WHERE json_extract(manifest, '$.config.context_management.compaction.compaction_threshold_tokens') IS NOT NULL
21
+ `.execute(transaction);
22
+ await sql`
23
+ UPDATE session
24
+ SET agent_spec = jsonb_set(
25
+ jsonb_remove(agent_spec, '$.config.context_management.compaction.compaction_threshold_tokens'),
26
+ '$.config.context_management.compaction.trigger',
27
+ coalesce(
28
+ jsonb_extract(agent_spec, '$.config.context_management.compaction.trigger'),
29
+ jsonb(json_object(
30
+ 'type', 'input_tokens',
31
+ 'value', cast(
32
+ json_extract(agent_spec, '$.config.context_management.compaction.compaction_threshold_tokens') AS INTEGER
33
+ )
34
+ ))
35
+ )
36
+ )
37
+ WHERE json_extract(agent_spec, '$.config.context_management.compaction.compaction_threshold_tokens') IS NOT NULL
38
+ `.execute(transaction);
39
+ });
40
+ }
41
+ async function down(db) {
42
+ await db.transaction().execute(async (transaction) => {
43
+ await sql`
44
+ UPDATE agent
45
+ SET manifest = jsonb_set(
46
+ jsonb_remove(manifest, '$.config.context_management.compaction.trigger'),
47
+ '$.config.context_management.compaction.compaction_threshold_tokens',
48
+ cast(json_extract(manifest, '$.config.context_management.compaction.trigger.value') AS INTEGER)
49
+ )
50
+ WHERE json_extract(manifest, '$.config.context_management.compaction.trigger.type') = 'input_tokens'
51
+ AND json_extract(manifest, '$.config.context_management.compaction.trigger.value') IS NOT NULL
52
+ `.execute(transaction);
53
+ await sql`
54
+ UPDATE session
55
+ SET agent_spec = jsonb_set(
56
+ jsonb_remove(agent_spec, '$.config.context_management.compaction.trigger'),
57
+ '$.config.context_management.compaction.compaction_threshold_tokens',
58
+ cast(json_extract(agent_spec, '$.config.context_management.compaction.trigger.value') AS INTEGER)
59
+ )
60
+ WHERE json_extract(agent_spec, '$.config.context_management.compaction.trigger.type') = 'input_tokens'
61
+ AND json_extract(agent_spec, '$.config.context_management.compaction.trigger.value') IS NOT NULL
62
+ `.execute(transaction);
63
+ });
64
+ }
65
+ export {
66
+ down,
67
+ up
68
+ };
69
+ //# sourceMappingURL=20260821_000001_agent_compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/db/sqlite/migrations/20260821_000001_agent_compaction.ts"],"sourcesContent":["import { type Kysely, sql } from 'kysely';\n\n/**\n * Replace the legacy compaction token threshold with an input-token trigger.\n * Mirrors db/postgres/migrations/20260821_000001_agent_compaction.ts.\n */\nexport async function up<TDatabase>(db: Kysely<TDatabase>): Promise<void> {\n await db.transaction().execute(async transaction => {\n await sql`\n UPDATE agent\n SET manifest = jsonb_set(\n jsonb_remove(manifest, '$.config.context_management.compaction.compaction_threshold_tokens'),\n '$.config.context_management.compaction.trigger',\n coalesce(\n jsonb_extract(manifest, '$.config.context_management.compaction.trigger'),\n jsonb(json_object(\n 'type', 'input_tokens',\n 'value', cast(\n json_extract(manifest, '$.config.context_management.compaction.compaction_threshold_tokens') AS INTEGER\n )\n ))\n )\n )\n WHERE json_extract(manifest, '$.config.context_management.compaction.compaction_threshold_tokens') IS NOT NULL\n `.execute(transaction);\n await sql`\n UPDATE session\n SET agent_spec = jsonb_set(\n jsonb_remove(agent_spec, '$.config.context_management.compaction.compaction_threshold_tokens'),\n '$.config.context_management.compaction.trigger',\n coalesce(\n jsonb_extract(agent_spec, '$.config.context_management.compaction.trigger'),\n jsonb(json_object(\n 'type', 'input_tokens',\n 'value', cast(\n json_extract(agent_spec, '$.config.context_management.compaction.compaction_threshold_tokens') AS INTEGER\n )\n ))\n )\n )\n WHERE json_extract(agent_spec, '$.config.context_management.compaction.compaction_threshold_tokens') IS NOT NULL\n `.execute(transaction);\n });\n}\n\n/** Restore the legacy token threshold for rollback compatibility. */\nexport async function down<TDatabase>(db: Kysely<TDatabase>): Promise<void> {\n await db.transaction().execute(async transaction => {\n await sql`\n UPDATE agent\n SET manifest = jsonb_set(\n jsonb_remove(manifest, '$.config.context_management.compaction.trigger'),\n '$.config.context_management.compaction.compaction_threshold_tokens',\n cast(json_extract(manifest, '$.config.context_management.compaction.trigger.value') AS INTEGER)\n )\n WHERE json_extract(manifest, '$.config.context_management.compaction.trigger.type') = 'input_tokens'\n AND json_extract(manifest, '$.config.context_management.compaction.trigger.value') IS NOT NULL\n `.execute(transaction);\n await sql`\n UPDATE session\n SET agent_spec = jsonb_set(\n jsonb_remove(agent_spec, '$.config.context_management.compaction.trigger'),\n '$.config.context_management.compaction.compaction_threshold_tokens',\n cast(json_extract(agent_spec, '$.config.context_management.compaction.trigger.value') AS INTEGER)\n )\n WHERE json_extract(agent_spec, '$.config.context_management.compaction.trigger.type') = 'input_tokens'\n AND json_extract(agent_spec, '$.config.context_management.compaction.trigger.value') IS NOT NULL\n `.execute(transaction);\n });\n}\n"],"mappings":";AAAA,SAAsB,WAAW;AAMjC,eAAsB,GAAc,IAAsC;AACxE,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,gBAAe;AAClD,UAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBN,QAAQ,WAAW;AACnB,UAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBN,QAAQ,WAAW;AAAA,EACrB,CAAC;AACH;AAGA,eAAsB,KAAgB,IAAsC;AAC1E,QAAM,GAAG,YAAY,EAAE,QAAQ,OAAM,gBAAe;AAClD,UAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASN,QAAQ,WAAW;AACnB,UAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASN,QAAQ,WAAW;AAAA,EACrB,CAAC;AACH;","names":[]}