@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.
- package/README.md +1 -1
- package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js +1 -0
- package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.br +0 -0
- package/dist/_frontend/assets/AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js.gz +0 -0
- package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js +1 -0
- package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.br +0 -0
- package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.gz +0 -0
- package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js +1 -0
- package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.br +0 -0
- package/dist/_frontend/assets/AgentOverview-EEBHJC32-Bn4qidnv.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js +1 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-26Z6IB3B-D_yCZz1m.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js +1 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-CGCU7WBK-JGwv6e5T.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js +1 -0
- package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.br +0 -0
- package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.gz +0 -0
- package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js +1 -0
- package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.br +0 -0
- package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js.gz +0 -0
- package/dist/_frontend/assets/{DockLayout-2RWDSUKE-eKoTN8R3.js → DockLayout-LM4AFMFY-DoBwJ3-e.js} +1 -1
- package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js +2 -0
- package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.br +0 -0
- package/dist/_frontend/assets/DrawerLayout-JR3O6RRB-BZ9sffvm.js.gz +0 -0
- package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js +1 -0
- package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.br +0 -0
- package/dist/_frontend/assets/ModelSettings-G7IFNC2Y-DxVYHG2m.js.gz +0 -0
- package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js +1 -0
- package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.br +0 -0
- package/dist/_frontend/assets/SandboxSettings-NXAANMAX-DhC28qE6.js.gz +0 -0
- package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js +1 -0
- package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.br +0 -0
- package/dist/_frontend/assets/SchedulesPage-KKLUDO6B-CWdrd7KY.js.gz +0 -0
- package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js +2 -0
- package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.br +0 -0
- package/dist/_frontend/assets/SettingsBuilder-L34IQ56S-BQuxGH5w.js.gz +0 -0
- package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js +1 -0
- package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.br +0 -0
- package/dist/_frontend/assets/ShellRouteSync-CEBETGEJ-C4NOyyck.js.gz +0 -0
- package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js +2 -0
- package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.br +0 -0
- package/dist/_frontend/assets/SidebarLayout-A2HJPPHS-kusjDx4J.js.gz +0 -0
- package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js +1 -0
- package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.br +0 -0
- package/dist/_frontend/assets/SkillSettings-FGGMSUNO-CjrGBX5J.js.gz +0 -0
- package/dist/_frontend/assets/TrueForgeUIWithRouter-MZVJWJMB-CZ8BOF1k.js +1 -0
- package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js +1 -0
- package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.br +0 -0
- package/dist/_frontend/assets/WidgetLayout-6QM45OQQ-Bp0tde9v.js.gz +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js +12 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.gz +0 -0
- package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js +1 -0
- package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.br +0 -0
- package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js.gz +0 -0
- package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js +2 -0
- package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.br +0 -0
- package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.gz +0 -0
- package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js +1 -0
- package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.br +0 -0
- package/dist/_frontend/assets/chunk-WVE3F724-CL71bP7s.js.gz +0 -0
- package/dist/_frontend/assets/{cssMode-CvKwYh_L.js → cssMode-CVefs5W-.js} +1 -1
- package/dist/_frontend/assets/cssMode-CVefs5W-.js.br +0 -0
- package/dist/_frontend/assets/cssMode-CVefs5W-.js.gz +0 -0
- package/dist/_frontend/assets/{freemarker2-Bb2yOpT3.js → freemarker2-mt8l8QVE.js} +1 -1
- package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.br +0 -0
- package/dist/_frontend/assets/freemarker2-mt8l8QVE.js.gz +0 -0
- package/dist/_frontend/assets/{handlebars-FL3wsxe0.js → handlebars-C97jT8Zn.js} +1 -1
- package/dist/_frontend/assets/handlebars-C97jT8Zn.js.br +0 -0
- package/dist/_frontend/assets/handlebars-C97jT8Zn.js.gz +0 -0
- package/dist/_frontend/assets/{html-Cb3v_ZRD.js → html-DKtvlaWU.js} +1 -1
- package/dist/_frontend/assets/html-DKtvlaWU.js.br +0 -0
- package/dist/_frontend/assets/html-DKtvlaWU.js.gz +0 -0
- package/dist/_frontend/assets/{htmlMode-JQDvK0Qf.js → htmlMode-BHsrcqlc.js} +1 -1
- package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.gz +0 -0
- package/dist/_frontend/assets/{index-DRjgykCE.js → index-BW-oaxAt.js} +3 -3
- package/dist/_frontend/assets/index-BW-oaxAt.js.br +0 -0
- package/dist/_frontend/assets/index-BW-oaxAt.js.gz +0 -0
- package/dist/_frontend/assets/{index-DEKCw40W.css → index-D8eVAzN5.css} +1 -1
- package/dist/_frontend/assets/index-D8eVAzN5.css.br +0 -0
- package/dist/_frontend/assets/index-D8eVAzN5.css.gz +0 -0
- package/dist/_frontend/assets/index-DVCxCjDg.js +923 -0
- package/dist/_frontend/assets/index-DVCxCjDg.js.br +0 -0
- package/dist/_frontend/assets/index-DVCxCjDg.js.gz +0 -0
- package/dist/_frontend/assets/index-DuKoX4ct.js +18 -0
- package/dist/_frontend/assets/index-DuKoX4ct.js.br +0 -0
- package/dist/_frontend/assets/index-DuKoX4ct.js.gz +0 -0
- package/dist/_frontend/assets/{javascript-2WsgEpYV.js → javascript-Cs0N3w-s.js} +1 -1
- package/dist/_frontend/assets/{jsonMode-DnbseMlM.js → jsonMode-CqrfFSVA.js} +1 -1
- package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.br +0 -0
- package/dist/_frontend/assets/jsonMode-CqrfFSVA.js.gz +0 -0
- package/dist/_frontend/assets/{liquid-DeE37I1e.js → liquid-C11lKF6J.js} +1 -1
- package/dist/_frontend/assets/liquid-C11lKF6J.js.br +0 -0
- package/dist/_frontend/assets/liquid-C11lKF6J.js.gz +0 -0
- package/dist/_frontend/assets/{lspLanguageFeatures-Bty8j9di.js → lspLanguageFeatures-DBZtnSMo.js} +1 -1
- package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.br +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-DBZtnSMo.js.gz +0 -0
- package/dist/_frontend/assets/{mdx-DfKPZX1Z.js → mdx-CCo4oKJJ.js} +1 -1
- package/dist/_frontend/assets/mdx-CCo4oKJJ.js.br +0 -0
- package/dist/_frontend/assets/mdx-CCo4oKJJ.js.gz +0 -0
- package/dist/_frontend/assets/{python-2i3Kiv75.js → python-627g_SSG.js} +1 -1
- package/dist/_frontend/assets/python-627g_SSG.js.br +0 -0
- package/dist/_frontend/assets/python-627g_SSG.js.gz +0 -0
- package/dist/_frontend/assets/{razor-B0N4vZnc.js → razor-BGDxoA7p.js} +1 -1
- package/dist/_frontend/assets/razor-BGDxoA7p.js.br +0 -0
- package/dist/_frontend/assets/razor-BGDxoA7p.js.gz +0 -0
- package/dist/_frontend/assets/{tsMode-D1Y8xh-o.js → tsMode-gPT7Bbjh.js} +1 -1
- package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.br +0 -0
- package/dist/_frontend/assets/tsMode-gPT7Bbjh.js.gz +0 -0
- package/dist/_frontend/assets/{typescript-2nhip0PT.js → typescript-Cb0PzreF.js} +1 -1
- package/dist/_frontend/assets/typescript-Cb0PzreF.js.br +0 -0
- package/dist/_frontend/assets/typescript-Cb0PzreF.js.gz +0 -0
- package/dist/_frontend/assets/{workers-DSmTvA39.js → workers-BAgwFgJ0.js} +1 -1
- package/dist/_frontend/assets/workers-BAgwFgJ0.js.br +0 -0
- package/dist/_frontend/assets/workers-BAgwFgJ0.js.gz +0 -0
- package/dist/_frontend/assets/{xml-CA4M6Pks.js → xml-BpvCCHF9.js} +1 -1
- package/dist/_frontend/assets/xml-BpvCCHF9.js.br +0 -0
- package/dist/_frontend/assets/xml-BpvCCHF9.js.gz +0 -0
- package/dist/_frontend/assets/{yaml-D5KNk7Ji.js → yaml-f3XKmHoH.js} +1 -1
- package/dist/_frontend/assets/yaml-f3XKmHoH.js.br +0 -0
- package/dist/_frontend/assets/yaml-f3XKmHoH.js.gz +0 -0
- package/dist/_frontend/index.html +2 -31
- package/dist/controller-main.js +1259 -0
- package/dist/controller-main.js.map +1 -0
- package/dist/main.js +10419 -5343
- package/dist/main.js.map +1 -1
- package/dist/postgres/migrations/20260821_000001_agent_compaction.js +63 -0
- package/dist/postgres/migrations/20260821_000001_agent_compaction.js.map +1 -0
- package/dist/postgres/migrations/20260827_000001_schedule.js +40 -0
- package/dist/postgres/migrations/20260827_000001_schedule.js.map +1 -0
- package/dist/postgres/migrations/20260827_000001_session_metrics.js +25 -0
- package/dist/postgres/migrations/20260827_000001_session_metrics.js.map +1 -0
- package/dist/postgres/migrations/20260828_000001_schedule_name_uq.js +15 -0
- package/dist/postgres/migrations/20260828_000001_schedule_name_uq.js.map +1 -0
- package/dist/postgres/migrations/20260831_000001_session_external_id.js +26 -0
- package/dist/postgres/migrations/20260831_000001_session_external_id.js.map +1 -0
- package/dist/postgres/migrations/20260901_000001_agent_metadata.js +18 -0
- package/dist/postgres/migrations/20260901_000001_agent_metadata.js.map +1 -0
- package/dist/postgres/migrations/20260902_000001_session_metadata.js +15 -0
- package/dist/postgres/migrations/20260902_000001_session_metadata.js.map +1 -0
- package/dist/postgres/migrations/20260902_000002_agent_external_id.js +26 -0
- package/dist/postgres/migrations/20260902_000002_agent_external_id.js.map +1 -0
- package/dist/postgres/migrations/20260903_000001_drop_agent_metadata.js +18 -0
- package/dist/postgres/migrations/20260903_000001_drop_agent_metadata.js.map +1 -0
- package/dist/postgres/migrations/20260903_000002_created_by_subject.js +110 -0
- package/dist/postgres/migrations/20260903_000002_created_by_subject.js.map +1 -0
- package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js +48 -0
- package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js.map +1 -0
- package/dist/sqlite/migrations/20260821_000001_agent_compaction.js +69 -0
- package/dist/sqlite/migrations/20260821_000001_agent_compaction.js.map +1 -0
- package/dist/sqlite/migrations/20260827_000001_schedule.js +69 -0
- package/dist/sqlite/migrations/20260827_000001_schedule.js.map +1 -0
- package/dist/sqlite/migrations/20260827_000001_session_metrics.js +165 -0
- package/dist/sqlite/migrations/20260827_000001_session_metrics.js.map +1 -0
- package/dist/sqlite/migrations/20260828_000001_schedule_name_uq.js +20 -0
- package/dist/sqlite/migrations/20260828_000001_schedule_name_uq.js.map +1 -0
- package/dist/sqlite/migrations/20260831_000001_session_external_id.js +28 -0
- package/dist/sqlite/migrations/20260831_000001_session_external_id.js.map +1 -0
- package/dist/sqlite/migrations/20260901_000001_agent_metadata.js +92 -0
- package/dist/sqlite/migrations/20260901_000001_agent_metadata.js.map +1 -0
- package/dist/sqlite/migrations/20260902_000001_session_metadata.js +197 -0
- package/dist/sqlite/migrations/20260902_000001_session_metadata.js.map +1 -0
- package/dist/sqlite/migrations/20260902_000002_agent_external_id.js +28 -0
- package/dist/sqlite/migrations/20260902_000002_agent_external_id.js.map +1 -0
- package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js +114 -0
- package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js.map +1 -0
- package/dist/sqlite/migrations/20260903_000002_created_by_subject.js +496 -0
- package/dist/sqlite/migrations/20260903_000002_created_by_subject.js.map +1 -0
- package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js +131 -0
- package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js.map +1 -0
- package/package.json +31 -24
- package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js +0 -1
- package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js.br +0 -0
- package/dist/_frontend/assets/ConnectorSettings-ODC3LVHN-CAU9MgGN.js.gz +0 -0
- package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js +0 -2
- package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js.br +0 -0
- package/dist/_frontend/assets/DrawerLayout-CZLJYMIN-DWPAdLZz.js.gz +0 -0
- package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js +0 -1
- package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js.br +0 -0
- package/dist/_frontend/assets/ModelSettings-CKQ5CVAC-UBz_ch6T.js.gz +0 -0
- package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js +0 -1
- package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js.br +0 -0
- package/dist/_frontend/assets/SandboxSettings-HSCPYUOC-Csl-nC9h.js.gz +0 -0
- package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js +0 -2
- package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js.br +0 -0
- package/dist/_frontend/assets/SettingsBuilder-MYWRFXRI-Ce3OWfa1.js.gz +0 -0
- package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js +0 -1
- package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js.br +0 -0
- package/dist/_frontend/assets/ShellRouteSync-T4WLY57Q-B5lyCu4o.js.gz +0 -0
- package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js +0 -2
- package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js.br +0 -0
- package/dist/_frontend/assets/SidebarLayout-WVY54TGZ-CIx5jQIC.js.gz +0 -0
- package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js +0 -1
- package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js.br +0 -0
- package/dist/_frontend/assets/SkillSettings-ECH6SHZ7-CKWEzdO_.js.gz +0 -0
- package/dist/_frontend/assets/TrueForgeUIWithRouter-RKZ2E7PV-CoVbEgto.js +0 -1
- package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js +0 -1
- package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js.br +0 -0
- package/dist/_frontend/assets/WidgetLayout-NWWB2SXI-cUmY1p2v.js.gz +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js +0 -12
- package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-BftTGWZl.js.gz +0 -0
- package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js +0 -4
- package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js.br +0 -0
- package/dist/_frontend/assets/chunk-OZTNBS6V-CLmmFX7d.js.gz +0 -0
- package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js +0 -2
- package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js.br +0 -0
- package/dist/_frontend/assets/chunk-TCAVLWYL-DVhtkE3q.js.gz +0 -0
- package/dist/_frontend/assets/cssMode-CvKwYh_L.js.br +0 -0
- package/dist/_frontend/assets/cssMode-CvKwYh_L.js.gz +0 -0
- package/dist/_frontend/assets/freemarker2-Bb2yOpT3.js.br +0 -0
- package/dist/_frontend/assets/freemarker2-Bb2yOpT3.js.gz +0 -0
- package/dist/_frontend/assets/handlebars-FL3wsxe0.js.br +0 -0
- package/dist/_frontend/assets/handlebars-FL3wsxe0.js.gz +0 -0
- package/dist/_frontend/assets/html-Cb3v_ZRD.js.br +0 -0
- package/dist/_frontend/assets/html-Cb3v_ZRD.js.gz +0 -0
- package/dist/_frontend/assets/htmlMode-JQDvK0Qf.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-JQDvK0Qf.js.gz +0 -0
- package/dist/_frontend/assets/index-DEKCw40W.css.br +0 -0
- package/dist/_frontend/assets/index-DEKCw40W.css.gz +0 -0
- package/dist/_frontend/assets/index-DJ1uWGdt.js +0 -859
- package/dist/_frontend/assets/index-DJ1uWGdt.js.br +0 -0
- package/dist/_frontend/assets/index-DJ1uWGdt.js.gz +0 -0
- package/dist/_frontend/assets/index-DRjgykCE.js.br +0 -0
- package/dist/_frontend/assets/index-DRjgykCE.js.gz +0 -0
- package/dist/_frontend/assets/jsonMode-DnbseMlM.js.br +0 -0
- package/dist/_frontend/assets/jsonMode-DnbseMlM.js.gz +0 -0
- package/dist/_frontend/assets/liquid-DeE37I1e.js.br +0 -0
- package/dist/_frontend/assets/liquid-DeE37I1e.js.gz +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-Bty8j9di.js.br +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-Bty8j9di.js.gz +0 -0
- package/dist/_frontend/assets/mdx-DfKPZX1Z.js.br +0 -0
- package/dist/_frontend/assets/mdx-DfKPZX1Z.js.gz +0 -0
- package/dist/_frontend/assets/python-2i3Kiv75.js.br +0 -0
- package/dist/_frontend/assets/python-2i3Kiv75.js.gz +0 -0
- package/dist/_frontend/assets/razor-B0N4vZnc.js.br +0 -0
- package/dist/_frontend/assets/razor-B0N4vZnc.js.gz +0 -0
- package/dist/_frontend/assets/tsMode-D1Y8xh-o.js.br +0 -0
- package/dist/_frontend/assets/tsMode-D1Y8xh-o.js.gz +0 -0
- package/dist/_frontend/assets/typescript-2nhip0PT.js.br +0 -0
- package/dist/_frontend/assets/typescript-2nhip0PT.js.gz +0 -0
- package/dist/_frontend/assets/workers-DSmTvA39.js.br +0 -0
- package/dist/_frontend/assets/workers-DSmTvA39.js.gz +0 -0
- package/dist/_frontend/assets/xml-CA4M6Pks.js.br +0 -0
- package/dist/_frontend/assets/xml-CA4M6Pks.js.gz +0 -0
- package/dist/_frontend/assets/yaml-D5KNk7Ji.js.br +0 -0
- package/dist/_frontend/assets/yaml-D5KNk7Ji.js.gz +0 -0
- package/dist/_frontend/index.html.br +0 -0
- 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
|