@truefoundry/trueforge 0.2.0-rc.1 → 0.2.0-rc.2
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/dist/_frontend/assets/{AgentCodeSnippets-NZOFJE57-Bn94i1Ie.js → AgentCodeSnippets-637HQUXD-C5c8zg9J.js} +1 -1
- package/dist/_frontend/assets/AgentCodeSnippets-637HQUXD-C5c8zg9J.js.br +0 -0
- package/dist/_frontend/assets/AgentCodeSnippets-637HQUXD-C5c8zg9J.js.gz +0 -0
- package/dist/_frontend/assets/{AgentMetricChart-JPU3MFQ2-pn-oatgo.js → AgentMetricChart-4FYECRIN-BN07l9mr.js} +1 -1
- package/dist/_frontend/assets/AgentMetricChart-4FYECRIN-BN07l9mr.js.br +0 -0
- package/dist/_frontend/assets/AgentMetricChart-4FYECRIN-BN07l9mr.js.gz +0 -0
- package/dist/_frontend/assets/{AgentOverview-EEBHJC32-Bn4qidnv.js → AgentOverview-3FJ5EE6N-D1pX5Emq.js} +1 -1
- package/dist/_frontend/assets/AgentOverview-3FJ5EE6N-D1pX5Emq.js.br +0 -0
- package/dist/_frontend/assets/AgentOverview-3FJ5EE6N-D1pX5Emq.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-VELWUYPR-S1LS04B9.js +1 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-VELWUYPR-S1LS04B9.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-VELWUYPR-S1LS04B9.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-CUKETHWM-D4LvjUpF.js +1 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-CUKETHWM-D4LvjUpF.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-CUKETHWM-D4LvjUpF.js.gz +0 -0
- package/dist/_frontend/assets/{AgentSessions-3MPDZASK-Dp6vYfGN.js → AgentSessions-T7MOGOTZ-wppcDkIn.js} +1 -1
- package/dist/_frontend/assets/AgentSessions-T7MOGOTZ-wppcDkIn.js.br +0 -0
- package/dist/_frontend/assets/AgentSessions-T7MOGOTZ-wppcDkIn.js.gz +0 -0
- package/dist/_frontend/assets/ConnectorSettings-ESZ2RSRG-DLxrylX3.js +1 -0
- package/dist/_frontend/assets/ConnectorSettings-ESZ2RSRG-DLxrylX3.js.br +0 -0
- package/dist/_frontend/assets/ConnectorSettings-ESZ2RSRG-DLxrylX3.js.gz +0 -0
- package/dist/_frontend/assets/{DockLayout-LM4AFMFY-DoBwJ3-e.js → DockLayout-NLFNU6F2-BGJvqqVS.js} +1 -1
- package/dist/_frontend/assets/DrawerLayout-PR3SMKA6-C13frtIA.js +2 -0
- package/dist/_frontend/assets/DrawerLayout-PR3SMKA6-C13frtIA.js.br +0 -0
- package/dist/_frontend/assets/DrawerLayout-PR3SMKA6-C13frtIA.js.gz +0 -0
- package/dist/_frontend/assets/ModelSettings-LYW64IRR-BLLhCXsR.js +1 -0
- package/dist/_frontend/assets/ModelSettings-LYW64IRR-BLLhCXsR.js.br +0 -0
- package/dist/_frontend/assets/ModelSettings-LYW64IRR-BLLhCXsR.js.gz +0 -0
- package/dist/_frontend/assets/SandboxSettings-DF64LHYI-7AeygCju.js +1 -0
- package/dist/_frontend/assets/SandboxSettings-DF64LHYI-7AeygCju.js.br +0 -0
- package/dist/_frontend/assets/SandboxSettings-DF64LHYI-7AeygCju.js.gz +0 -0
- package/dist/_frontend/assets/SchedulesPage-WQU4H25F-BGlu6WXG.js +1 -0
- package/dist/_frontend/assets/SchedulesPage-WQU4H25F-BGlu6WXG.js.br +0 -0
- package/dist/_frontend/assets/SchedulesPage-WQU4H25F-BGlu6WXG.js.gz +0 -0
- package/dist/_frontend/assets/SettingsBuilder-LSXK2VN4-B0Y9JGuK.js +2 -0
- package/dist/_frontend/assets/SettingsBuilder-LSXK2VN4-B0Y9JGuK.js.br +0 -0
- package/dist/_frontend/assets/SettingsBuilder-LSXK2VN4-B0Y9JGuK.js.gz +0 -0
- package/dist/_frontend/assets/ShellRouteSync-B22IAV2W-leIgCXVi.js +1 -0
- package/dist/_frontend/assets/ShellRouteSync-B22IAV2W-leIgCXVi.js.br +0 -0
- package/dist/_frontend/assets/ShellRouteSync-B22IAV2W-leIgCXVi.js.gz +0 -0
- package/dist/_frontend/assets/SidebarLayout-XW6LXB7R-Cfmnvl3i.js +2 -0
- package/dist/_frontend/assets/SidebarLayout-XW6LXB7R-Cfmnvl3i.js.br +0 -0
- package/dist/_frontend/assets/SidebarLayout-XW6LXB7R-Cfmnvl3i.js.gz +0 -0
- package/dist/_frontend/assets/SkillSettings-64VXUO6J-CeuMawWX.js +1 -0
- package/dist/_frontend/assets/SkillSettings-64VXUO6J-CeuMawWX.js.br +0 -0
- package/dist/_frontend/assets/SkillSettings-64VXUO6J-CeuMawWX.js.gz +0 -0
- package/dist/_frontend/assets/TrueForgeUIWithRouter-3TSLV22Q-BiR4AwMi.js +1 -0
- package/dist/_frontend/assets/{WidgetLayout-6QM45OQQ-Bp0tde9v.js → WidgetLayout-Q5P7PYSJ-D-NJInrA.js} +1 -1
- package/dist/_frontend/assets/WidgetLayout-Q5P7PYSJ-D-NJInrA.js.br +0 -0
- package/dist/_frontend/assets/WidgetLayout-Q5P7PYSJ-D-NJInrA.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-62JRHF6Z-BLb_tkPU.js → chunk-62JRHF6Z-gAUkEAjv.js} +1 -1
- package/dist/_frontend/assets/chunk-62JRHF6Z-gAUkEAjv.js.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-gAUkEAjv.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-FJW36PD7-R_XSoO50.js → chunk-I3AL54MA--fCRbraS.js} +2 -2
- package/dist/_frontend/assets/chunk-I3AL54MA--fCRbraS.js.br +0 -0
- package/dist/_frontend/assets/chunk-I3AL54MA--fCRbraS.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-WVE3F724-CL71bP7s.js → chunk-SQGT43Z3-Di5-vYAQ.js} +1 -1
- package/dist/_frontend/assets/chunk-SQGT43Z3-Di5-vYAQ.js.br +0 -0
- package/dist/_frontend/assets/chunk-SQGT43Z3-Di5-vYAQ.js.gz +0 -0
- package/dist/_frontend/assets/chunk-VUMGMGKZ-CUX2iOMe.js +1 -0
- package/dist/_frontend/assets/chunk-VUMGMGKZ-CUX2iOMe.js.br +0 -0
- package/dist/_frontend/assets/chunk-VUMGMGKZ-CUX2iOMe.js.gz +0 -0
- package/dist/_frontend/assets/{cssMode-CVefs5W-.js → cssMode-Bmk_AUwV.js} +1 -1
- package/dist/_frontend/assets/cssMode-Bmk_AUwV.js.br +0 -0
- package/dist/_frontend/assets/cssMode-Bmk_AUwV.js.gz +0 -0
- package/dist/_frontend/assets/{freemarker2-mt8l8QVE.js → freemarker2-BqULNxdn.js} +1 -1
- package/dist/_frontend/assets/freemarker2-BqULNxdn.js.br +0 -0
- package/dist/_frontend/assets/freemarker2-BqULNxdn.js.gz +0 -0
- package/dist/_frontend/assets/{handlebars-C97jT8Zn.js → handlebars-D-wN_MMv.js} +1 -1
- package/dist/_frontend/assets/handlebars-D-wN_MMv.js.br +0 -0
- package/dist/_frontend/assets/handlebars-D-wN_MMv.js.gz +0 -0
- package/dist/_frontend/assets/{html-DKtvlaWU.js → html-DX_2Eu_G.js} +1 -1
- package/dist/_frontend/assets/html-DX_2Eu_G.js.br +0 -0
- package/dist/_frontend/assets/html-DX_2Eu_G.js.gz +0 -0
- package/dist/_frontend/assets/{htmlMode-BHsrcqlc.js → htmlMode-CqQ0rpq1.js} +1 -1
- package/dist/_frontend/assets/htmlMode-CqQ0rpq1.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-CqQ0rpq1.js.gz +0 -0
- package/dist/_frontend/assets/{index-BW-oaxAt.js → index-CNHFMp3w.js} +3 -3
- package/dist/_frontend/assets/index-CNHFMp3w.js.br +0 -0
- package/dist/_frontend/assets/index-CNHFMp3w.js.gz +0 -0
- package/dist/_frontend/assets/{index-DVCxCjDg.js → index-G4wOqi3O.js} +237 -237
- package/dist/_frontend/assets/index-G4wOqi3O.js.br +0 -0
- package/dist/_frontend/assets/index-G4wOqi3O.js.gz +0 -0
- package/dist/_frontend/assets/index-MPbqVnOf.js +18 -0
- package/dist/_frontend/assets/index-MPbqVnOf.js.br +0 -0
- package/dist/_frontend/assets/index-MPbqVnOf.js.gz +0 -0
- package/dist/_frontend/assets/{index-D8eVAzN5.css → index-SN54UIUh.css} +1 -1
- package/dist/_frontend/assets/index-SN54UIUh.css.br +0 -0
- package/dist/_frontend/assets/index-SN54UIUh.css.gz +0 -0
- package/dist/_frontend/assets/{javascript-Cs0N3w-s.js → javascript-CO_8uS79.js} +1 -1
- package/dist/_frontend/assets/{jsonMode-CqrfFSVA.js → jsonMode-D0kqu8c3.js} +1 -1
- package/dist/_frontend/assets/jsonMode-D0kqu8c3.js.br +0 -0
- package/dist/_frontend/assets/jsonMode-D0kqu8c3.js.gz +0 -0
- package/dist/_frontend/assets/{liquid-C11lKF6J.js → liquid-CB807zJs.js} +1 -1
- package/dist/_frontend/assets/liquid-CB807zJs.js.br +0 -0
- package/dist/_frontend/assets/liquid-CB807zJs.js.gz +0 -0
- package/dist/_frontend/assets/{lspLanguageFeatures-DBZtnSMo.js → lspLanguageFeatures-D0-0mkv4.js} +1 -1
- package/dist/_frontend/assets/lspLanguageFeatures-D0-0mkv4.js.br +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-D0-0mkv4.js.gz +0 -0
- package/dist/_frontend/assets/{mdx-CCo4oKJJ.js → mdx-7_H2_m8y.js} +1 -1
- package/dist/_frontend/assets/mdx-7_H2_m8y.js.br +0 -0
- package/dist/_frontend/assets/mdx-7_H2_m8y.js.gz +0 -0
- package/dist/_frontend/assets/{python-627g_SSG.js → python-DhB7kQ15.js} +1 -1
- package/dist/_frontend/assets/python-DhB7kQ15.js.br +0 -0
- package/dist/_frontend/assets/python-DhB7kQ15.js.gz +0 -0
- package/dist/_frontend/assets/{razor-BGDxoA7p.js → razor-CDzQiIjH.js} +1 -1
- package/dist/_frontend/assets/razor-CDzQiIjH.js.br +0 -0
- package/dist/_frontend/assets/razor-CDzQiIjH.js.gz +0 -0
- package/dist/_frontend/assets/{tsMode-gPT7Bbjh.js → tsMode-CVP7xaF5.js} +1 -1
- package/dist/_frontend/assets/tsMode-CVP7xaF5.js.br +0 -0
- package/dist/_frontend/assets/tsMode-CVP7xaF5.js.gz +0 -0
- package/dist/_frontend/assets/{typescript-Cb0PzreF.js → typescript-BTAuo6jN.js} +1 -1
- package/dist/_frontend/assets/typescript-BTAuo6jN.js.br +0 -0
- package/dist/_frontend/assets/typescript-BTAuo6jN.js.gz +0 -0
- package/dist/_frontend/assets/{workers-BAgwFgJ0.js → workers-Dl5avODY.js} +1 -1
- package/dist/_frontend/assets/workers-Dl5avODY.js.br +0 -0
- package/dist/_frontend/assets/workers-Dl5avODY.js.gz +0 -0
- package/dist/_frontend/assets/{xml-BpvCCHF9.js → xml-CKI7eM7V.js} +1 -1
- package/dist/_frontend/assets/xml-CKI7eM7V.js.br +0 -0
- package/dist/_frontend/assets/xml-CKI7eM7V.js.gz +0 -0
- package/dist/_frontend/assets/{yaml-f3XKmHoH.js → yaml-Czn9FR3r.js} +1 -1
- package/dist/_frontend/assets/yaml-Czn9FR3r.js.br +0 -0
- package/dist/_frontend/assets/yaml-Czn9FR3r.js.gz +0 -0
- package/dist/_frontend/index.html +2 -2
- package/dist/controller-main.js +26 -14
- package/dist/controller-main.js.map +1 -1
- package/dist/main.js +581 -239
- package/dist/main.js.map +1 -1
- package/dist/postgres/migrations/20260831_000001_session_external_id.js.map +1 -1
- package/dist/postgres/migrations/20260902_000002_agent_external_id.js.map +1 -1
- package/dist/postgres/migrations/20260903_000002_created_by_subject.js +1 -1
- package/dist/postgres/migrations/20260903_000002_created_by_subject.js.map +1 -1
- package/dist/postgres/migrations/20260904_000001_schedule_agent_id.js.map +1 -1
- package/dist/postgres/migrations/20260904_000002_session_source.js +31 -0
- package/dist/postgres/migrations/20260904_000002_session_source.js.map +1 -0
- package/dist/postgres/migrations/20260904_000003_session_metadata_gin.js +24 -0
- package/dist/postgres/migrations/20260904_000003_session_metadata_gin.js.map +1 -0
- package/dist/sqlite/migrations/20260831_000001_session_external_id.js.map +1 -1
- package/dist/sqlite/migrations/20260902_000001_session_metadata.js.map +1 -1
- package/dist/sqlite/migrations/20260902_000002_agent_external_id.js.map +1 -1
- package/dist/sqlite/migrations/20260903_000001_drop_agent_metadata.js.map +1 -1
- package/dist/sqlite/migrations/20260903_000002_created_by_subject.js +1 -1
- package/dist/sqlite/migrations/20260903_000002_created_by_subject.js.map +1 -1
- package/dist/sqlite/migrations/20260904_000001_schedule_agent_id.js.map +1 -1
- package/dist/sqlite/migrations/20260904_000002_session_source.js +28 -0
- package/dist/sqlite/migrations/20260904_000002_session_source.js.map +1 -0
- package/package.json +18 -16
- 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.br +0 -0
- package/dist/_frontend/assets/AgentMetricChart-JPU3MFQ2-pn-oatgo.js.gz +0 -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 +0 -1
- 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 +0 -1
- 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.br +0 -0
- package/dist/_frontend/assets/AgentSessions-3MPDZASK-Dp6vYfGN.js.gz +0 -0
- package/dist/_frontend/assets/ConnectorSettings-MXFRWWR6-BEwXZbPM.js +0 -1
- 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/DrawerLayout-JR3O6RRB-BZ9sffvm.js +0 -2
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -2
- 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 +0 -1
- 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 +0 -2
- 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 +0 -1
- 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 +0 -1
- 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.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-BLb_tkPU.js.gz +0 -0
- package/dist/_frontend/assets/chunk-DMMZSZTN-BBNhHida.js +0 -1
- 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.br +0 -0
- package/dist/_frontend/assets/chunk-FJW36PD7-R_XSoO50.js.gz +0 -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-CVefs5W-.js.br +0 -0
- package/dist/_frontend/assets/cssMode-CVefs5W-.js.gz +0 -0
- 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-C97jT8Zn.js.br +0 -0
- package/dist/_frontend/assets/handlebars-C97jT8Zn.js.gz +0 -0
- 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-BHsrcqlc.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-BHsrcqlc.js.gz +0 -0
- 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-D8eVAzN5.css.br +0 -0
- package/dist/_frontend/assets/index-D8eVAzN5.css.gz +0 -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 +0 -18
- package/dist/_frontend/assets/index-DuKoX4ct.js.br +0 -0
- package/dist/_frontend/assets/index-DuKoX4ct.js.gz +0 -0
- 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-C11lKF6J.js.br +0 -0
- package/dist/_frontend/assets/liquid-C11lKF6J.js.gz +0 -0
- 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-CCo4oKJJ.js.br +0 -0
- package/dist/_frontend/assets/mdx-CCo4oKJJ.js.gz +0 -0
- 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-BGDxoA7p.js.br +0 -0
- package/dist/_frontend/assets/razor-BGDxoA7p.js.gz +0 -0
- 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-Cb0PzreF.js.br +0 -0
- package/dist/_frontend/assets/typescript-Cb0PzreF.js.gz +0 -0
- 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-BpvCCHF9.js.br +0 -0
- package/dist/_frontend/assets/xml-BpvCCHF9.js.gz +0 -0
- package/dist/_frontend/assets/yaml-f3XKmHoH.js.br +0 -0
- package/dist/_frontend/assets/yaml-f3XKmHoH.js.gz +0 -0
package/dist/main.js
CHANGED
|
@@ -397,7 +397,14 @@ var init_config = __esm({
|
|
|
397
397
|
raw: getEnv("TRUEFOUNDRY_MTLS_ENABLED"),
|
|
398
398
|
defaultValue: false
|
|
399
399
|
}),
|
|
400
|
-
TRUEFOUNDRY_MTLS_CERTS_DIR: getEnv("TRUEFOUNDRY_MTLS_CERTS_DIR", { defaultValue: "/etc/tls/truefoundry" }) ?? "/etc/tls/truefoundry"
|
|
400
|
+
TRUEFOUNDRY_MTLS_CERTS_DIR: getEnv("TRUEFOUNDRY_MTLS_CERTS_DIR", { defaultValue: "/etc/tls/truefoundry" }) ?? "/etc/tls/truefoundry",
|
|
401
|
+
TRUEFOUNDRY_SANDBOX_ENABLED: parseBoolean({
|
|
402
|
+
envKey: "TRUEFOUNDRY_SANDBOX_ENABLED",
|
|
403
|
+
raw: getEnv("TRUEFOUNDRY_SANDBOX_ENABLED"),
|
|
404
|
+
defaultValue: false
|
|
405
|
+
}),
|
|
406
|
+
TRUEFOUNDRY_SANDBOX_API_KEY: getEnv("TRUEFOUNDRY_SANDBOX_API_KEY", { required: false }),
|
|
407
|
+
TRUEFOUNDRY_SANDBOX_SETTINGS_SERVER_URL: getEnv("TRUEFOUNDRY_SANDBOX_SETTINGS_SERVER_URL", { required: false })
|
|
401
408
|
};
|
|
402
409
|
TrueForgeAuthMode = /* @__PURE__ */ ((TrueForgeAuthMode3) => {
|
|
403
410
|
TrueForgeAuthMode3["Standalone"] = "standalone";
|
|
@@ -405,10 +412,19 @@ var init_config = __esm({
|
|
|
405
412
|
TrueForgeAuthMode3["TrueFoundry"] = "truefoundry";
|
|
406
413
|
return TrueForgeAuthMode3;
|
|
407
414
|
})(TrueForgeAuthMode || {});
|
|
408
|
-
if (isTrueFoundryModeEnabled(configuration)
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
415
|
+
if (isTrueFoundryModeEnabled(configuration)) {
|
|
416
|
+
if (isOidcConfigured(configuration)) {
|
|
417
|
+
throw new Error(
|
|
418
|
+
"TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL (TrueFoundry mode) and OIDC (SSO) cannot both be enabled at once."
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
if (configuration.TRUEFOUNDRY_SANDBOX_ENABLED) {
|
|
422
|
+
if (configuration.TRUEFOUNDRY_SANDBOX_API_KEY === void 0 || configuration.TRUEFOUNDRY_SANDBOX_SETTINGS_SERVER_URL === void 0) {
|
|
423
|
+
throw new Error(
|
|
424
|
+
"TRUEFOUNDRY_SANDBOX_ENABLED is true but no sandbox provider is configured. Set TRUEFOUNDRY_SANDBOX_API_KEY + TRUEFOUNDRY_SANDBOX_SETTINGS_SERVER_URL, or set TRUEFOUNDRY_SANDBOX_ENABLED=false."
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
412
428
|
}
|
|
413
429
|
config_default = configuration;
|
|
414
430
|
}
|
|
@@ -2622,17 +2638,6 @@ var init_skillStore = __esm({
|
|
|
2622
2638
|
}
|
|
2623
2639
|
});
|
|
2624
2640
|
|
|
2625
|
-
// src/db/createdBySubject.ts
|
|
2626
|
-
import { CreatedBySubjectSchema as CreatedBySubjectSchema3 } from "@truefoundry/trueforge-core/agent-session";
|
|
2627
|
-
function parseStoredCreatedBySubject(value) {
|
|
2628
|
-
return CreatedBySubjectSchema3.parse(value);
|
|
2629
|
-
}
|
|
2630
|
-
var init_createdBySubject = __esm({
|
|
2631
|
-
"src/db/createdBySubject.ts"() {
|
|
2632
|
-
"use strict";
|
|
2633
|
-
}
|
|
2634
|
-
});
|
|
2635
|
-
|
|
2636
2641
|
// src/db/indexes.ts
|
|
2637
2642
|
var SESSION_EXTERNAL_ID_UQ, AGENT_EXTERNAL_ID_UQ;
|
|
2638
2643
|
var init_indexes = __esm({
|
|
@@ -2795,6 +2800,7 @@ var PostgresAgentStore_exports = {};
|
|
|
2795
2800
|
__export(PostgresAgentStore_exports, {
|
|
2796
2801
|
PostgresAgentStore: () => PostgresAgentStore
|
|
2797
2802
|
});
|
|
2803
|
+
import { CreatedBySubjectSchema as CreatedBySubjectSchema3 } from "@truefoundry/trueforge-core/agent-session";
|
|
2798
2804
|
function toRecord(row) {
|
|
2799
2805
|
return {
|
|
2800
2806
|
id: row.id,
|
|
@@ -2802,7 +2808,7 @@ function toRecord(row) {
|
|
|
2802
2808
|
name: row.name,
|
|
2803
2809
|
manifest: parseStoredAgentSpec(row.manifest),
|
|
2804
2810
|
external_id: row.external_id,
|
|
2805
|
-
created_by_subject:
|
|
2811
|
+
created_by_subject: CreatedBySubjectSchema3.parse(row.created_by_subject),
|
|
2806
2812
|
created_at: row.created_at.toISOString(),
|
|
2807
2813
|
updated_at: row.updated_at.toISOString()
|
|
2808
2814
|
};
|
|
@@ -2824,7 +2830,6 @@ var init_PostgresAgentStore = __esm({
|
|
|
2824
2830
|
"use strict";
|
|
2825
2831
|
init_id();
|
|
2826
2832
|
init_agentStore();
|
|
2827
|
-
init_createdBySubject();
|
|
2828
2833
|
init_indexes();
|
|
2829
2834
|
init_client();
|
|
2830
2835
|
init_sqlExpressions();
|
|
@@ -3040,11 +3045,26 @@ var init_client2 = __esm({
|
|
|
3040
3045
|
"oauth_client",
|
|
3041
3046
|
"token",
|
|
3042
3047
|
"auth_data",
|
|
3043
|
-
"created_by_subject"
|
|
3048
|
+
"created_by_subject",
|
|
3049
|
+
"source"
|
|
3044
3050
|
]);
|
|
3045
3051
|
}
|
|
3046
3052
|
});
|
|
3047
3053
|
|
|
3054
|
+
// src/util/crossPlatform.ts
|
|
3055
|
+
import { pathToFileURL } from "url";
|
|
3056
|
+
function importAbsoluteModule(filePath) {
|
|
3057
|
+
if (filePath.endsWith(".ts")) {
|
|
3058
|
+
return import(filePath);
|
|
3059
|
+
}
|
|
3060
|
+
return import(pathToFileURL(filePath).href);
|
|
3061
|
+
}
|
|
3062
|
+
var init_crossPlatform = __esm({
|
|
3063
|
+
"src/util/crossPlatform.ts"() {
|
|
3064
|
+
"use strict";
|
|
3065
|
+
}
|
|
3066
|
+
});
|
|
3067
|
+
|
|
3048
3068
|
// src/db/migrateSqlite.ts
|
|
3049
3069
|
var migrateSqlite_exports = {};
|
|
3050
3070
|
__export(migrateSqlite_exports, {
|
|
@@ -3059,6 +3079,7 @@ async function migrateSqliteToLatest(db) {
|
|
|
3059
3079
|
provider: new FileMigrationProvider({
|
|
3060
3080
|
fs: fs2,
|
|
3061
3081
|
path: path4,
|
|
3082
|
+
import: importAbsoluteModule,
|
|
3062
3083
|
migrationFolder: path4.join(import.meta.dirname, "sqlite", "migrations")
|
|
3063
3084
|
})
|
|
3064
3085
|
});
|
|
@@ -3078,6 +3099,7 @@ async function migrateSqliteToLatest(db) {
|
|
|
3078
3099
|
var init_migrateSqlite = __esm({
|
|
3079
3100
|
"src/db/migrateSqlite.ts"() {
|
|
3080
3101
|
"use strict";
|
|
3102
|
+
init_crossPlatform();
|
|
3081
3103
|
}
|
|
3082
3104
|
});
|
|
3083
3105
|
|
|
@@ -3157,14 +3179,19 @@ function parseTurnCustom(value) {
|
|
|
3157
3179
|
}
|
|
3158
3180
|
async function addSessionCostAndDuration(trx, input) {
|
|
3159
3181
|
const elapsed_ms = Date.parse(input.turn_state.completed_at) - input.turn_created_at.getTime();
|
|
3160
|
-
const total_cost_in_usd = input.turn_state.metrics?.total_cost_in_usd ?? 0;
|
|
3161
3182
|
const total_duration_ms = elapsed_ms > 0 ? Math.trunc(elapsed_ms) : 0;
|
|
3183
|
+
const turnCost = input.turn_state.metrics?.total_cost_in_usd;
|
|
3184
|
+
const withDuration = sql5`jsonb_set(
|
|
3185
|
+
metrics,
|
|
3186
|
+
'$.total_duration_ms',
|
|
3187
|
+
jsonb((metrics->>'total_duration_ms') + ${total_duration_ms})
|
|
3188
|
+
)`;
|
|
3162
3189
|
await trx.updateTable("session").set({
|
|
3163
|
-
metrics: sql5`jsonb_set(
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3190
|
+
metrics: turnCost === void 0 ? withDuration : sql5`jsonb_set(
|
|
3191
|
+
${withDuration},
|
|
3192
|
+
'$.total_cost_in_usd',
|
|
3193
|
+
jsonb(COALESCE(metrics->>'total_cost_in_usd', 0) + ${turnCost})
|
|
3194
|
+
)`
|
|
3168
3195
|
}).where("session_id", "=", input.session_id).execute();
|
|
3169
3196
|
}
|
|
3170
3197
|
function terminalTurnState(state, turn_id) {
|
|
@@ -3807,7 +3834,11 @@ var init_sessionAgentColumns = __esm({
|
|
|
3807
3834
|
});
|
|
3808
3835
|
|
|
3809
3836
|
// src/db/sqlite/session-store/queries/sessions.ts
|
|
3810
|
-
import {
|
|
3837
|
+
import {
|
|
3838
|
+
CreatedBySubjectSchema as CreatedBySubjectSchema4,
|
|
3839
|
+
SessionMetadataSchema as SessionMetadataSchema2,
|
|
3840
|
+
SessionSourceSchema
|
|
3841
|
+
} from "@truefoundry/trueforge-core/agent-session";
|
|
3811
3842
|
import {
|
|
3812
3843
|
decodeSessionListPageToken,
|
|
3813
3844
|
paginateSessionListRows
|
|
@@ -3838,7 +3869,8 @@ function mapRowToSessionRecord(row) {
|
|
|
3838
3869
|
return {
|
|
3839
3870
|
tenant_id: row.tenant_id,
|
|
3840
3871
|
session_id: row.session_id,
|
|
3841
|
-
created_by_subject:
|
|
3872
|
+
created_by_subject: CreatedBySubjectSchema4.parse(row.created_by_subject),
|
|
3873
|
+
source: SessionSourceSchema.nullable().parse(row.source),
|
|
3842
3874
|
agent: sessionAgentFromColumns({
|
|
3843
3875
|
session_id: row.session_id,
|
|
3844
3876
|
agent_id: row.agent_id,
|
|
@@ -3861,6 +3893,7 @@ function sessionSelectColumns() {
|
|
|
3861
3893
|
"tenant_id",
|
|
3862
3894
|
"session_id",
|
|
3863
3895
|
jsonText(sql8.ref("created_by_subject")).as("created_by_subject"),
|
|
3896
|
+
jsonText(sql8.ref("source")).as("source"),
|
|
3864
3897
|
"agent_id",
|
|
3865
3898
|
"agent_name",
|
|
3866
3899
|
jsonText(sql8.ref("agent_spec")).as("agent_spec"),
|
|
@@ -3883,6 +3916,7 @@ async function createSession(db, input) {
|
|
|
3883
3916
|
tenant_id: input.tenant_id,
|
|
3884
3917
|
session_id: input.session_id,
|
|
3885
3918
|
created_by_subject: jsonbBind(input.created_by_subject),
|
|
3919
|
+
source: input.source !== null ? jsonbBind(input.source) : null,
|
|
3886
3920
|
agent_id: columns.agent_id,
|
|
3887
3921
|
agent_name: columns.agent_name,
|
|
3888
3922
|
agent_spec: columns.agent_spec !== null ? jsonbBind(columns.agent_spec) : null,
|
|
@@ -3891,7 +3925,6 @@ async function createSession(db, input) {
|
|
|
3891
3925
|
metadata: jsonbBind(input.metadata),
|
|
3892
3926
|
external_id: input.external_id,
|
|
3893
3927
|
metrics: jsonbBind({
|
|
3894
|
-
total_cost_in_usd: 0,
|
|
3895
3928
|
total_duration_ms: 0,
|
|
3896
3929
|
total_turns: 0
|
|
3897
3930
|
}),
|
|
@@ -3973,6 +4006,23 @@ async function listSessions(db, input) {
|
|
|
3973
4006
|
query = query.where("agent_id", "=", input.agent_id);
|
|
3974
4007
|
}
|
|
3975
4008
|
query = whereCreatedByOrAgentIds2(query, input.created_by_or_agent_ids);
|
|
4009
|
+
if (input.metadata !== void 0) {
|
|
4010
|
+
if (Object.keys(input.metadata).length === 0) {
|
|
4011
|
+
query = query.where(sql8`NOT EXISTS (SELECT 1 FROM json_each(metadata))`);
|
|
4012
|
+
} else {
|
|
4013
|
+
for (const [key, value] of Object.entries(input.metadata)) {
|
|
4014
|
+
query = query.where(
|
|
4015
|
+
sql8`EXISTS (SELECT 1 FROM json_each(metadata) WHERE key = ${key} AND atom = ${value})`
|
|
4016
|
+
);
|
|
4017
|
+
}
|
|
4018
|
+
}
|
|
4019
|
+
}
|
|
4020
|
+
if (input.source_type !== void 0) {
|
|
4021
|
+
query = query.where(sql8`json_extract(source, '$.type')`, "=", input.source_type);
|
|
4022
|
+
}
|
|
4023
|
+
if (input.source_id !== void 0) {
|
|
4024
|
+
query = query.where(sql8`json_extract(source, '$.id')`, "=", input.source_id);
|
|
4025
|
+
}
|
|
3976
4026
|
if (input.start_timestamp !== void 0) {
|
|
3977
4027
|
query = query.where("created_at", ">=", input.start_timestamp.toISOString());
|
|
3978
4028
|
}
|
|
@@ -4010,7 +4060,6 @@ async function listSessions(db, input) {
|
|
|
4010
4060
|
var init_sessions = __esm({
|
|
4011
4061
|
"src/db/sqlite/session-store/queries/sessions.ts"() {
|
|
4012
4062
|
"use strict";
|
|
4013
|
-
init_createdBySubject();
|
|
4014
4063
|
init_sessionAgentColumns();
|
|
4015
4064
|
init_client2();
|
|
4016
4065
|
init_sqlExpressions2();
|
|
@@ -4979,6 +5028,9 @@ var SqliteAgentStore_exports = {};
|
|
|
4979
5028
|
__export(SqliteAgentStore_exports, {
|
|
4980
5029
|
SqliteAgentStore: () => SqliteAgentStore
|
|
4981
5030
|
});
|
|
5031
|
+
import {
|
|
5032
|
+
CreatedBySubjectSchema as CreatedBySubjectSchema5
|
|
5033
|
+
} from "@truefoundry/trueforge-core/agent-session";
|
|
4982
5034
|
function recordColumns5(eb) {
|
|
4983
5035
|
return [
|
|
4984
5036
|
"id",
|
|
@@ -4995,7 +5047,7 @@ function toRecord3(row) {
|
|
|
4995
5047
|
return {
|
|
4996
5048
|
...row,
|
|
4997
5049
|
manifest: parseStoredAgentSpec(row.manifest),
|
|
4998
|
-
created_by_subject:
|
|
5050
|
+
created_by_subject: CreatedBySubjectSchema5.parse(row.created_by_subject)
|
|
4999
5051
|
};
|
|
5000
5052
|
}
|
|
5001
5053
|
var SqliteAgentStore;
|
|
@@ -5004,7 +5056,6 @@ var init_SqliteAgentStore = __esm({
|
|
|
5004
5056
|
"use strict";
|
|
5005
5057
|
init_id();
|
|
5006
5058
|
init_agentStore();
|
|
5007
|
-
init_createdBySubject();
|
|
5008
5059
|
init_client2();
|
|
5009
5060
|
init_sqlExpressions2();
|
|
5010
5061
|
SqliteAgentStore = class {
|
|
@@ -5115,6 +5166,9 @@ var SqliteScheduleStore_exports = {};
|
|
|
5115
5166
|
__export(SqliteScheduleStore_exports, {
|
|
5116
5167
|
SqliteScheduleStore: () => SqliteScheduleStore
|
|
5117
5168
|
});
|
|
5169
|
+
import {
|
|
5170
|
+
CreatedBySubjectSchema as CreatedBySubjectSchema6
|
|
5171
|
+
} from "@truefoundry/trueforge-core/agent-session";
|
|
5118
5172
|
import {
|
|
5119
5173
|
decodeOffsetPageToken as decodeOffsetPageToken5,
|
|
5120
5174
|
paginateOffsetRows as paginateOffsetRows4
|
|
@@ -5151,13 +5205,13 @@ function toScheduleRecord(row) {
|
|
|
5151
5205
|
return {
|
|
5152
5206
|
...row,
|
|
5153
5207
|
manifest: parseStoredScheduleManifest(row.manifest),
|
|
5154
|
-
created_by_subject:
|
|
5208
|
+
created_by_subject: CreatedBySubjectSchema6.parse(row.created_by_subject)
|
|
5155
5209
|
};
|
|
5156
5210
|
}
|
|
5157
5211
|
function toRunRecord(row) {
|
|
5158
5212
|
return {
|
|
5159
5213
|
...row,
|
|
5160
|
-
created_by_subject:
|
|
5214
|
+
created_by_subject: CreatedBySubjectSchema6.parse(row.created_by_subject)
|
|
5161
5215
|
};
|
|
5162
5216
|
}
|
|
5163
5217
|
var SqliteScheduleStore;
|
|
@@ -5166,7 +5220,6 @@ var init_SqliteScheduleStore = __esm({
|
|
|
5166
5220
|
"use strict";
|
|
5167
5221
|
init_cron();
|
|
5168
5222
|
init_id();
|
|
5169
|
-
init_createdBySubject();
|
|
5170
5223
|
init_scheduleStore();
|
|
5171
5224
|
init_client2();
|
|
5172
5225
|
init_sqlExpressions2();
|
|
@@ -5364,6 +5417,7 @@ function createMigrator(db) {
|
|
|
5364
5417
|
provider: new FileMigrationProvider2({
|
|
5365
5418
|
fs: fs3,
|
|
5366
5419
|
path: path5,
|
|
5420
|
+
import: importAbsoluteModule,
|
|
5367
5421
|
migrationFolder: path5.join(import.meta.dirname, "postgres", "migrations")
|
|
5368
5422
|
}),
|
|
5369
5423
|
migrationTableSchema: TRUEFORGE_SCHEMA
|
|
@@ -5396,6 +5450,7 @@ async function migrateTo(db, targetMigrationName) {
|
|
|
5396
5450
|
var init_migratePostgres = __esm({
|
|
5397
5451
|
"src/db/migratePostgres.ts"() {
|
|
5398
5452
|
"use strict";
|
|
5453
|
+
init_crossPlatform();
|
|
5399
5454
|
init_schema();
|
|
5400
5455
|
}
|
|
5401
5456
|
});
|
|
@@ -5487,18 +5542,18 @@ function incrementSessionTotalTurns() {
|
|
|
5487
5542
|
}
|
|
5488
5543
|
async function addSessionCostAndDuration2(trx, input) {
|
|
5489
5544
|
const elapsed_ms = Date.parse(input.turn_state.completed_at) - input.turn_created_at.getTime();
|
|
5490
|
-
const total_cost_in_usd = input.turn_state.metrics?.total_cost_in_usd ?? 0;
|
|
5491
5545
|
const total_duration_ms = elapsed_ms > 0 ? Math.trunc(elapsed_ms) : 0;
|
|
5546
|
+
const turnCost = input.turn_state.metrics?.total_cost_in_usd;
|
|
5547
|
+
const withDuration = jsonbSet(
|
|
5548
|
+
sql14`metrics`,
|
|
5549
|
+
sql14`'{total_duration_ms}'`,
|
|
5550
|
+
sql14`to_jsonb((metrics->>'total_duration_ms')::bigint + ${total_duration_ms}::bigint)`
|
|
5551
|
+
);
|
|
5492
5552
|
await trx.updateTable("session").set({
|
|
5493
|
-
metrics: jsonbSet(
|
|
5494
|
-
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
sql14`to_jsonb((metrics->>'total_cost_in_usd')::double precision + ${total_cost_in_usd}::double precision)`
|
|
5498
|
-
),
|
|
5499
|
-
// bigint: ::int overflows at ~24.8 days of summed ms and would roll back the terminal tx.
|
|
5500
|
-
sql14`'{total_duration_ms}'`,
|
|
5501
|
-
sql14`to_jsonb((metrics->>'total_duration_ms')::bigint + ${total_duration_ms}::bigint)`
|
|
5553
|
+
metrics: turnCost === void 0 ? withDuration : jsonbSet(
|
|
5554
|
+
withDuration,
|
|
5555
|
+
sql14`'{total_cost_in_usd}'`,
|
|
5556
|
+
sql14`to_jsonb(COALESCE((metrics->>'total_cost_in_usd')::double precision, 0) + ${turnCost}::double precision)`
|
|
5502
5557
|
)
|
|
5503
5558
|
}).where("session_id", "=", input.session_id).execute();
|
|
5504
5559
|
}
|
|
@@ -6034,7 +6089,11 @@ var init_events2 = __esm({
|
|
|
6034
6089
|
});
|
|
6035
6090
|
|
|
6036
6091
|
// src/db/postgres/session-store/queries/sessions.ts
|
|
6037
|
-
import {
|
|
6092
|
+
import {
|
|
6093
|
+
CreatedBySubjectSchema as CreatedBySubjectSchema7,
|
|
6094
|
+
SessionMetadataSchema as SessionMetadataSchema3,
|
|
6095
|
+
SessionSourceSchema as SessionSourceSchema2
|
|
6096
|
+
} from "@truefoundry/trueforge-core/agent-session";
|
|
6038
6097
|
import {
|
|
6039
6098
|
decodeSessionListPageToken as decodeSessionListPageToken2,
|
|
6040
6099
|
paginateSessionListRows as paginateSessionListRows2
|
|
@@ -6065,7 +6124,8 @@ function mapRowToSessionRecord2(row) {
|
|
|
6065
6124
|
return {
|
|
6066
6125
|
tenant_id: row.tenant_id,
|
|
6067
6126
|
session_id: row.session_id,
|
|
6068
|
-
created_by_subject:
|
|
6127
|
+
created_by_subject: CreatedBySubjectSchema7.parse(row.created_by_subject),
|
|
6128
|
+
source: SessionSourceSchema2.nullable().parse(row.source),
|
|
6069
6129
|
agent: sessionAgentFromColumns({
|
|
6070
6130
|
session_id: row.session_id,
|
|
6071
6131
|
agent_id: row.agent_id,
|
|
@@ -6091,6 +6151,7 @@ async function createSession2(db, input) {
|
|
|
6091
6151
|
tenant_id: input.tenant_id,
|
|
6092
6152
|
session_id: input.session_id,
|
|
6093
6153
|
created_by_subject: json(input.created_by_subject),
|
|
6154
|
+
source: input.source !== null ? json(input.source) : null,
|
|
6094
6155
|
agent_id: columns.agent_id,
|
|
6095
6156
|
agent_name: columns.agent_name,
|
|
6096
6157
|
agent_spec: columns.agent_spec !== null ? json(columns.agent_spec) : null,
|
|
@@ -6099,7 +6160,6 @@ async function createSession2(db, input) {
|
|
|
6099
6160
|
metadata: json(input.metadata),
|
|
6100
6161
|
external_id: input.external_id,
|
|
6101
6162
|
metrics: json({
|
|
6102
|
-
total_cost_in_usd: 0,
|
|
6103
6163
|
total_duration_ms: 0,
|
|
6104
6164
|
total_turns: 0
|
|
6105
6165
|
}),
|
|
@@ -6182,6 +6242,19 @@ async function listSessions2(db, input) {
|
|
|
6182
6242
|
query = query.where("agent_id", "=", input.agent_id);
|
|
6183
6243
|
}
|
|
6184
6244
|
query = whereCreatedByOrAgentIds(query, input.created_by_or_agent_ids);
|
|
6245
|
+
if (input.metadata !== void 0) {
|
|
6246
|
+
if (Object.keys(input.metadata).length === 0) {
|
|
6247
|
+
query = query.where(sql17`metadata = '{}'::jsonb`);
|
|
6248
|
+
} else {
|
|
6249
|
+
query = query.where(sql17`metadata @> ${json(input.metadata)}`);
|
|
6250
|
+
}
|
|
6251
|
+
}
|
|
6252
|
+
if (input.source_type !== void 0) {
|
|
6253
|
+
query = query.where(sql17`source->>'type'`, "=", input.source_type);
|
|
6254
|
+
}
|
|
6255
|
+
if (input.source_id !== void 0) {
|
|
6256
|
+
query = query.where(sql17`source->>'id'`, "=", input.source_id);
|
|
6257
|
+
}
|
|
6185
6258
|
if (input.start_timestamp !== void 0) {
|
|
6186
6259
|
query = query.where("created_at", ">=", input.start_timestamp);
|
|
6187
6260
|
}
|
|
@@ -6219,7 +6292,6 @@ async function listSessions2(db, input) {
|
|
|
6219
6292
|
var init_sessions2 = __esm({
|
|
6220
6293
|
"src/db/postgres/session-store/queries/sessions.ts"() {
|
|
6221
6294
|
"use strict";
|
|
6222
|
-
init_createdBySubject();
|
|
6223
6295
|
init_indexes();
|
|
6224
6296
|
init_sessionAgentColumns();
|
|
6225
6297
|
init_client();
|
|
@@ -7168,6 +7240,7 @@ var PostgresScheduleStore_exports = {};
|
|
|
7168
7240
|
__export(PostgresScheduleStore_exports, {
|
|
7169
7241
|
PostgresScheduleStore: () => PostgresScheduleStore
|
|
7170
7242
|
});
|
|
7243
|
+
import { CreatedBySubjectSchema as CreatedBySubjectSchema8 } from "@truefoundry/trueforge-core/agent-session";
|
|
7171
7244
|
import {
|
|
7172
7245
|
decodeOffsetPageToken as decodeOffsetPageToken9,
|
|
7173
7246
|
paginateOffsetRows as paginateOffsetRows7
|
|
@@ -7181,7 +7254,7 @@ function toScheduleRecord2(row) {
|
|
|
7181
7254
|
name: row.name,
|
|
7182
7255
|
manifest: parseStoredScheduleManifest(row.manifest),
|
|
7183
7256
|
status: row.status,
|
|
7184
|
-
created_by_subject:
|
|
7257
|
+
created_by_subject: CreatedBySubjectSchema8.parse(row.created_by_subject),
|
|
7185
7258
|
created_at: row.created_at.toISOString(),
|
|
7186
7259
|
updated_at: row.updated_at.toISOString()
|
|
7187
7260
|
};
|
|
@@ -7194,7 +7267,7 @@ function toRunRecord2(row) {
|
|
|
7194
7267
|
name: row.name,
|
|
7195
7268
|
scheduled_for: row.scheduled_for.toISOString(),
|
|
7196
7269
|
status: row.status,
|
|
7197
|
-
created_by_subject:
|
|
7270
|
+
created_by_subject: CreatedBySubjectSchema8.parse(row.created_by_subject),
|
|
7198
7271
|
triggered_at: row.triggered_at === null ? null : row.triggered_at.toISOString(),
|
|
7199
7272
|
created_at: row.created_at.toISOString(),
|
|
7200
7273
|
updated_at: row.updated_at.toISOString()
|
|
@@ -7206,7 +7279,6 @@ var init_PostgresScheduleStore = __esm({
|
|
|
7206
7279
|
"use strict";
|
|
7207
7280
|
init_cron();
|
|
7208
7281
|
init_id();
|
|
7209
|
-
init_createdBySubject();
|
|
7210
7282
|
init_scheduleStore();
|
|
7211
7283
|
init_client();
|
|
7212
7284
|
init_sqlExpressions();
|
|
@@ -7380,7 +7452,7 @@ var init_PostgresScheduleStore = __esm({
|
|
|
7380
7452
|
|
|
7381
7453
|
// src/main.ts
|
|
7382
7454
|
import { extractErrorLogFields as extractErrorLogFields10 } from "@truefoundry/trueforge-core/core";
|
|
7383
|
-
import { HTTPException as
|
|
7455
|
+
import { HTTPException as HTTPException17 } from "hono/http-exception";
|
|
7384
7456
|
import { mkdir as mkdir5 } from "fs/promises";
|
|
7385
7457
|
import path6 from "path";
|
|
7386
7458
|
|
|
@@ -7412,6 +7484,9 @@ function getCachedLocalSandboxSupport() {
|
|
|
7412
7484
|
return cachedSupport;
|
|
7413
7485
|
}
|
|
7414
7486
|
function isLocalSandboxFallbackEnabled() {
|
|
7487
|
+
if (isTrueFoundryModeEnabled(config_default)) {
|
|
7488
|
+
return false;
|
|
7489
|
+
}
|
|
7415
7490
|
return config_default.STANDALONE && cachedSupport?.supported === true;
|
|
7416
7491
|
}
|
|
7417
7492
|
|
|
@@ -7425,7 +7500,7 @@ import { RequestReplyExecutor, RequestReplyRouter } from "@truefoundry/trueforge
|
|
|
7425
7500
|
|
|
7426
7501
|
// src/app.ts
|
|
7427
7502
|
import { swaggerUI } from "@hono/swagger-ui";
|
|
7428
|
-
import { OpenAPIHono as OpenAPIHono16, z as
|
|
7503
|
+
import { OpenAPIHono as OpenAPIHono16, z as z30 } from "@hono/zod-openapi";
|
|
7429
7504
|
import { extractErrorLogFields as extractErrorLogFields7 } from "@truefoundry/trueforge-core/core";
|
|
7430
7505
|
import { bodyLimit } from "hono/body-limit";
|
|
7431
7506
|
import { HTTPException as HTTPException6 } from "hono/http-exception";
|
|
@@ -8198,6 +8273,7 @@ async function validateManifest({
|
|
|
8198
8273
|
deps,
|
|
8199
8274
|
modelProviderStore,
|
|
8200
8275
|
mcpServerStore,
|
|
8276
|
+
sandboxProviderStore,
|
|
8201
8277
|
tenant_id
|
|
8202
8278
|
}) {
|
|
8203
8279
|
await validateAgentSpec({
|
|
@@ -8206,7 +8282,7 @@ async function validateManifest({
|
|
|
8206
8282
|
modelProviderStore,
|
|
8207
8283
|
mcpServerStore,
|
|
8208
8284
|
skillStore: deps.skillStore,
|
|
8209
|
-
sandboxProviderStore
|
|
8285
|
+
sandboxProviderStore
|
|
8210
8286
|
});
|
|
8211
8287
|
return spec;
|
|
8212
8288
|
}
|
|
@@ -8229,6 +8305,7 @@ function createAgentsRouter(deps) {
|
|
|
8229
8305
|
deps,
|
|
8230
8306
|
modelProviderStore: deps.resolveModelProviderStore(c),
|
|
8231
8307
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
8308
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c),
|
|
8232
8309
|
tenant_id: requestContext.tenant_id
|
|
8233
8310
|
});
|
|
8234
8311
|
try {
|
|
@@ -8289,7 +8366,7 @@ function createAgentsRouter(deps) {
|
|
|
8289
8366
|
const existing = await agentIfAccessible({
|
|
8290
8367
|
authorizer: deps.authorizer,
|
|
8291
8368
|
context: requestContext,
|
|
8292
|
-
action: "
|
|
8369
|
+
action: "delete",
|
|
8293
8370
|
agent: await deps.resolveAgentStore(c).getAgent({ tenant_id: requestContext.tenant_id, id: agentId })
|
|
8294
8371
|
});
|
|
8295
8372
|
if (existing === void 0) {
|
|
@@ -8316,6 +8393,7 @@ function createAgentsRouter(deps) {
|
|
|
8316
8393
|
deps,
|
|
8317
8394
|
modelProviderStore: deps.resolveModelProviderStore(c),
|
|
8318
8395
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
8396
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c),
|
|
8319
8397
|
tenant_id: requestContext.tenant_id
|
|
8320
8398
|
});
|
|
8321
8399
|
const record = await deps.resolveAgentStore(c).updateAgent({
|
|
@@ -8924,7 +9002,7 @@ function createCapabilitiesRouter(deps) {
|
|
|
8924
9002
|
let status;
|
|
8925
9003
|
try {
|
|
8926
9004
|
const refreshed = await checkSnapshotStatus({
|
|
8927
|
-
store: deps.
|
|
9005
|
+
store: deps.resolveSandboxProviderStore(c),
|
|
8928
9006
|
tenant_id: requestContext.tenant_id,
|
|
8929
9007
|
logger: deps.logger
|
|
8930
9008
|
});
|
|
@@ -10580,7 +10658,8 @@ function executeScheduledRun(client) {
|
|
|
10580
10658
|
return async ({ run, schedule }) => {
|
|
10581
10659
|
const { data: session } = await client.internal.sessions.getOrCreateByExternalId({
|
|
10582
10660
|
externalId: run.id,
|
|
10583
|
-
agent: { name: schedule.agent_name }
|
|
10661
|
+
agent: { name: schedule.agent_name },
|
|
10662
|
+
source: { type: "schedule", id: schedule.id, runId: run.id }
|
|
10584
10663
|
});
|
|
10585
10664
|
const turns = await client.sessions.listTurns(session.id, { limit: 1 });
|
|
10586
10665
|
if (turns.data.length > 0) {
|
|
@@ -10607,7 +10686,8 @@ async function startScheduleRun(params) {
|
|
|
10607
10686
|
tenant_id: schedule.tenant_id,
|
|
10608
10687
|
external_id: run.id,
|
|
10609
10688
|
created_by_subject: schedule.created_by_subject,
|
|
10610
|
-
agent: { type: "reference", id: named.id, name: named.name }
|
|
10689
|
+
agent: { type: "reference", id: named.id, name: named.name },
|
|
10690
|
+
source: { type: "schedule", id: schedule.id, run_id: run.id }
|
|
10611
10691
|
});
|
|
10612
10692
|
const { data: turns } = await session.listTurns({ limit: 1 });
|
|
10613
10693
|
if (turns.length > 0) {
|
|
@@ -10999,7 +11079,7 @@ import { HTTPException as HTTPException5 } from "hono/http-exception";
|
|
|
10999
11079
|
import { streamSSE } from "hono/streaming";
|
|
11000
11080
|
|
|
11001
11081
|
// src/routes/turnRoutes.ts
|
|
11002
|
-
import { createRoute as createRoute10, z as
|
|
11082
|
+
import { createRoute as createRoute10, z as z26 } from "@hono/zod-openapi";
|
|
11003
11083
|
|
|
11004
11084
|
// src/schemas/events.ts
|
|
11005
11085
|
init_common();
|
|
@@ -11095,60 +11175,166 @@ var DownloadSandboxFileRequestQuerySchema = z22.object({
|
|
|
11095
11175
|
}).openapi("DownloadSandboxFileRequestQuery");
|
|
11096
11176
|
|
|
11097
11177
|
// src/routes/sessionRoutes.ts
|
|
11098
|
-
import { createRoute as createRoute9, z as
|
|
11178
|
+
import { createRoute as createRoute9, z as z25 } from "@hono/zod-openapi";
|
|
11099
11179
|
|
|
11100
11180
|
// src/schemas/session.ts
|
|
11101
11181
|
init_common();
|
|
11102
|
-
import { z as
|
|
11182
|
+
import { z as z24 } from "@hono/zod-openapi";
|
|
11103
11183
|
import {
|
|
11104
11184
|
AgentSpecSchema as AgentSpecSchema3,
|
|
11105
11185
|
SessionMetadataSchema,
|
|
11106
11186
|
SessionSchema,
|
|
11187
|
+
SessionSourceScheduleSchema,
|
|
11188
|
+
SessionSourceTypeSchema,
|
|
11107
11189
|
TokenPaginationSchema as TokenPaginationSchema5
|
|
11108
11190
|
} from "@truefoundry/trueforge-core/agent-session";
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11191
|
+
|
|
11192
|
+
// src/schemas/deepObjectQuery.ts
|
|
11193
|
+
import { z as z23 } from "@hono/zod-openapi";
|
|
11194
|
+
function deepObjectQueryIssue({ name, message }) {
|
|
11195
|
+
return new z23.ZodError([
|
|
11196
|
+
{
|
|
11197
|
+
code: "custom",
|
|
11198
|
+
path: [name],
|
|
11199
|
+
message
|
|
11200
|
+
}
|
|
11201
|
+
]);
|
|
11202
|
+
}
|
|
11203
|
+
function requireSingleString({ name, key, value }) {
|
|
11204
|
+
if (typeof value === "string") {
|
|
11205
|
+
return value;
|
|
11206
|
+
}
|
|
11207
|
+
if (Array.isArray(value)) {
|
|
11208
|
+
throw deepObjectQueryIssue({ name, message: `Query parameter "${key}" must appear at most once` });
|
|
11209
|
+
}
|
|
11210
|
+
throw deepObjectQueryIssue({ name, message: `Query parameter "${key}" must be a string` });
|
|
11211
|
+
}
|
|
11212
|
+
function honoQueriesToRecord(queries) {
|
|
11213
|
+
const out = {};
|
|
11214
|
+
for (const [key, values2] of Object.entries(queries)) {
|
|
11215
|
+
out[key] = values2.length === 1 ? values2[0] : values2;
|
|
11216
|
+
}
|
|
11217
|
+
return out;
|
|
11218
|
+
}
|
|
11219
|
+
function foldDeepObjectQueryParam({
|
|
11220
|
+
query,
|
|
11221
|
+
name,
|
|
11222
|
+
maxKeys
|
|
11223
|
+
}) {
|
|
11224
|
+
const equalKey = new RegExp(`^${name}\\[([^\\]]+)\\]$`);
|
|
11225
|
+
const nestedBrackets = new RegExp(`^${name}\\[[^\\]]*\\]\\[[^\\]]+\\]`);
|
|
11226
|
+
const out = {};
|
|
11227
|
+
const folded = {};
|
|
11228
|
+
for (const [key, value] of Object.entries(query)) {
|
|
11229
|
+
if (key === name) {
|
|
11230
|
+
throw deepObjectQueryIssue({
|
|
11231
|
+
name,
|
|
11232
|
+
message: `Use ${name}[key]=value query parameters; bare ${name} is not supported`
|
|
11233
|
+
});
|
|
11234
|
+
}
|
|
11235
|
+
if (nestedBrackets.test(key)) {
|
|
11236
|
+
throw deepObjectQueryIssue({
|
|
11237
|
+
name,
|
|
11238
|
+
message: `Nested ${name} query parameters like ${name}[key][\u2026] are not supported; use ${name}[key]=value`
|
|
11239
|
+
});
|
|
11240
|
+
}
|
|
11241
|
+
const equalMatch = equalKey.exec(key);
|
|
11242
|
+
if (equalMatch) {
|
|
11243
|
+
const mapKey = equalMatch[1];
|
|
11244
|
+
if (mapKey === void 0 || mapKey.length === 0) {
|
|
11245
|
+
throw deepObjectQueryIssue({ name, message: `${name} filter key must be non-empty` });
|
|
11246
|
+
}
|
|
11247
|
+
if (Object.hasOwn(folded, mapKey)) {
|
|
11248
|
+
throw deepObjectQueryIssue({ name, message: `Duplicate ${name} filter key "${mapKey}"` });
|
|
11249
|
+
}
|
|
11250
|
+
folded[mapKey] = requireSingleString({ name, key, value });
|
|
11251
|
+
continue;
|
|
11252
|
+
}
|
|
11253
|
+
if (key.startsWith(`${name}[`)) {
|
|
11254
|
+
throw deepObjectQueryIssue({ name, message: `Invalid ${name} query parameter "${key}"` });
|
|
11255
|
+
}
|
|
11256
|
+
out[key] = value;
|
|
11257
|
+
}
|
|
11258
|
+
const filterKeyCount = Object.keys(folded).length;
|
|
11259
|
+
if (maxKeys !== void 0 && filterKeyCount > maxKeys) {
|
|
11260
|
+
throw deepObjectQueryIssue({ name, message: `at most ${String(maxKeys)} ${name} filter keys` });
|
|
11261
|
+
}
|
|
11262
|
+
if (filterKeyCount > 0) {
|
|
11263
|
+
out[name] = folded;
|
|
11264
|
+
}
|
|
11265
|
+
return out;
|
|
11266
|
+
}
|
|
11267
|
+
|
|
11268
|
+
// src/schemas/session.ts
|
|
11269
|
+
var SessionAgentNameRefSchema = z24.object({ name: NameSchema }).strict().openapi("SessionAgentNameRef");
|
|
11270
|
+
var SessionAgentSpecBodySchema = z24.object({ spec: AgentSpecSchema3 }).strict().openapi("SessionAgentSpecBody");
|
|
11271
|
+
var CreateSessionAgentSchema = z24.union([SessionAgentNameRefSchema, SessionAgentSpecBodySchema]).openapi("CreateSessionAgent");
|
|
11112
11272
|
function isSessionAgentNameRef(agent) {
|
|
11113
11273
|
return SessionAgentNameRefSchema.safeParse(agent).success;
|
|
11114
11274
|
}
|
|
11115
|
-
var CreateSessionRequestSchema =
|
|
11275
|
+
var CreateSessionRequestSchema = z24.object({
|
|
11116
11276
|
agent: CreateSessionAgentSchema,
|
|
11117
11277
|
metadata: SessionMetadataSchema.optional()
|
|
11118
11278
|
}).strict().openapi("CreateSessionRequest");
|
|
11119
|
-
var GetOrCreateSessionByExternalIdRequestSchema =
|
|
11120
|
-
external_id:
|
|
11121
|
-
agent: CreateSessionAgentSchema
|
|
11279
|
+
var GetOrCreateSessionByExternalIdRequestSchema = z24.object({
|
|
11280
|
+
external_id: z24.string().min(1).max(128).describe("Caller-supplied id unique within the tenant."),
|
|
11281
|
+
agent: CreateSessionAgentSchema,
|
|
11282
|
+
/** Internal-only provenance; not on public create/update. */
|
|
11283
|
+
source: SessionSourceScheduleSchema.optional()
|
|
11122
11284
|
}).strict().openapi("GetOrCreateSessionByExternalIdRequest");
|
|
11123
|
-
var UpdateSessionRequestSchema =
|
|
11285
|
+
var UpdateSessionRequestSchema = z24.object({
|
|
11124
11286
|
agent: SessionAgentSpecBodySchema.optional(),
|
|
11125
11287
|
metadata: SessionMetadataSchema.optional()
|
|
11126
11288
|
}).strict().openapi("UpdateSessionRequest");
|
|
11127
|
-
var IsoTimestampQueryParam =
|
|
11128
|
-
var
|
|
11129
|
-
|
|
11130
|
-
|
|
11131
|
-
|
|
11289
|
+
var IsoTimestampQueryParam = z24.iso.datetime({ offset: true }).openapi({ type: "string", format: "date-time" }).transform((s) => new Date(s));
|
|
11290
|
+
var LIST_SESSIONS_METADATA_FILTER_MAX_KEYS = 10;
|
|
11291
|
+
var ListSessionsRequestQuerySchema = z24.object({
|
|
11292
|
+
limit: z24.coerce.number().int().min(1).max(PAGE_LIMIT).optional().default(PAGE_LIMIT).describe(`Page size. Defaults to ${String(PAGE_LIMIT)}, max ${String(PAGE_LIMIT)}.`),
|
|
11293
|
+
order: z24.enum(["asc", "desc"]).optional().default("desc").describe('Sort sessions by `updated_at`. Defaults to "desc".').openapi("ListSessionsOrder"),
|
|
11294
|
+
page_token: z24.string().min(1).optional().describe("Opaque keyset cursor from a previous response `next_page_token`."),
|
|
11132
11295
|
start_timestamp: IsoTimestampQueryParam.optional().describe(
|
|
11133
11296
|
"Inclusive lower bound on `created_at` (ISO-8601 / RFC 3339)."
|
|
11134
11297
|
),
|
|
11135
11298
|
end_timestamp: IsoTimestampQueryParam.optional().describe(
|
|
11136
11299
|
"Inclusive upper bound on `created_at` (ISO-8601 / RFC 3339)."
|
|
11137
11300
|
),
|
|
11138
|
-
agent_id:
|
|
11139
|
-
created_by_me:
|
|
11301
|
+
agent_id: z24.string().min(1).optional().describe("When set, only sessions bound to this agent id are returned."),
|
|
11302
|
+
created_by_me: z24.stringbool().optional().describe("When true, only sessions created by the authenticated subject.").openapi({ type: "boolean" }),
|
|
11303
|
+
metadata: SessionMetadataSchema.optional().openapi({
|
|
11304
|
+
param: {
|
|
11305
|
+
style: "deepObject",
|
|
11306
|
+
explode: true,
|
|
11307
|
+
description: "Exact metadata pairs as metadata[key]=value. Sessions must contain all pairs."
|
|
11308
|
+
}
|
|
11309
|
+
}).transform((metadata) => metadata === void 0 || Object.keys(metadata).length === 0 ? void 0 : metadata),
|
|
11310
|
+
source_type: SessionSourceTypeSchema.optional().describe(
|
|
11311
|
+
"When set, returns only sessions created by this source type."
|
|
11312
|
+
),
|
|
11313
|
+
source_id: z24.string().min(1).optional().describe("When set, returns only sessions from this specific source. Requires source_type.")
|
|
11314
|
+
}).refine((q) => q.source_id === void 0 || q.source_type !== void 0, {
|
|
11315
|
+
message: "source_id requires source_type",
|
|
11316
|
+
path: ["source_id"]
|
|
11140
11317
|
}).openapi("ListSessionsRequestQuery");
|
|
11141
|
-
|
|
11318
|
+
function parseListSessionsQuery(raw) {
|
|
11319
|
+
return ListSessionsRequestQuerySchema.parse(
|
|
11320
|
+
foldDeepObjectQueryParam({
|
|
11321
|
+
query: raw,
|
|
11322
|
+
name: "metadata",
|
|
11323
|
+
maxKeys: LIST_SESSIONS_METADATA_FILTER_MAX_KEYS
|
|
11324
|
+
})
|
|
11325
|
+
);
|
|
11326
|
+
}
|
|
11327
|
+
var GetSessionResponseSchema = z24.object({
|
|
11142
11328
|
data: SessionSchema
|
|
11143
11329
|
}).openapi("GetSessionResponse");
|
|
11144
|
-
var ListSessionsResponseSchema =
|
|
11145
|
-
data:
|
|
11330
|
+
var ListSessionsResponseSchema = z24.object({
|
|
11331
|
+
data: z24.array(SessionSchema),
|
|
11146
11332
|
pagination: TokenPaginationSchema5
|
|
11147
11333
|
}).openapi("ListSessionsResponse");
|
|
11148
11334
|
|
|
11149
11335
|
// src/routes/sessionRoutes.ts
|
|
11150
|
-
var SessionIdParamsSchema =
|
|
11151
|
-
session_id:
|
|
11336
|
+
var SessionIdParamsSchema = z25.object({
|
|
11337
|
+
session_id: z25.string().min(1).max(64).describe("Session identifier.")
|
|
11152
11338
|
});
|
|
11153
11339
|
var createSessionRoute = createRoute9({
|
|
11154
11340
|
method: "post",
|
|
@@ -11314,7 +11500,7 @@ var listSessionsRoute = createRoute9({
|
|
|
11314
11500
|
path: "/",
|
|
11315
11501
|
tags: ["Agent Sessions" /* AGENT_SESSIONS */],
|
|
11316
11502
|
summary: "List sessions",
|
|
11317
|
-
description: "List the
|
|
11503
|
+
description: "List the sessions (newest first by default).",
|
|
11318
11504
|
"x-fern-sdk-group-name": ["sessions"],
|
|
11319
11505
|
"x-fern-sdk-method-name": "list",
|
|
11320
11506
|
"x-fern-pagination": TOKEN_PAGINATION,
|
|
@@ -11401,7 +11587,7 @@ var listSessionEventsRoute = createRoute9({
|
|
|
11401
11587
|
|
|
11402
11588
|
// src/routes/turnRoutes.ts
|
|
11403
11589
|
var TurnIdParamsSchema = SessionIdParamsSchema.extend({
|
|
11404
|
-
turn_id:
|
|
11590
|
+
turn_id: z26.string().min(1).describe("Turn identifier.")
|
|
11405
11591
|
});
|
|
11406
11592
|
var listTurnsRoute = createRoute10({
|
|
11407
11593
|
method: "get",
|
|
@@ -11475,7 +11661,7 @@ var downloadSandboxFileRoute = createRoute10({
|
|
|
11475
11661
|
},
|
|
11476
11662
|
responses: {
|
|
11477
11663
|
200: {
|
|
11478
|
-
content: { "application/octet-stream": { schema:
|
|
11664
|
+
content: { "application/octet-stream": { schema: z26.string().openapi({ format: "binary" }) } },
|
|
11479
11665
|
description: "File contents."
|
|
11480
11666
|
},
|
|
11481
11667
|
400: {
|
|
@@ -12310,7 +12496,7 @@ function createTurnsRouter(deps) {
|
|
|
12310
12496
|
}
|
|
12311
12497
|
const provider = await resolveSandboxProvider({
|
|
12312
12498
|
tenant_id: requestContext.tenant_id,
|
|
12313
|
-
store: deps.
|
|
12499
|
+
store: deps.resolveSandboxProviderStore(c),
|
|
12314
12500
|
logger: deps.logger,
|
|
12315
12501
|
sessionId
|
|
12316
12502
|
});
|
|
@@ -12402,12 +12588,12 @@ function createTurnsRouter(deps) {
|
|
|
12402
12588
|
if (agent === void 0) {
|
|
12403
12589
|
return c.json({ error: { message: `Agent not found: ${agentId}` } }, 422);
|
|
12404
12590
|
}
|
|
12405
|
-
const
|
|
12591
|
+
const canUseAgent = await deps.authorizer.canAccessAgent({
|
|
12406
12592
|
context: requestContext,
|
|
12407
|
-
action: "
|
|
12593
|
+
action: "use",
|
|
12408
12594
|
agent
|
|
12409
12595
|
});
|
|
12410
|
-
if (!
|
|
12596
|
+
if (!canUseAgent) {
|
|
12411
12597
|
return c.json({ error: { message: `Agent not found: ${agentId}` } }, 404);
|
|
12412
12598
|
}
|
|
12413
12599
|
}
|
|
@@ -12420,7 +12606,8 @@ function createTurnsRouter(deps) {
|
|
|
12420
12606
|
...deps,
|
|
12421
12607
|
modelProviderStore: deps.resolveModelProviderStore(c),
|
|
12422
12608
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
12423
|
-
agentStore: deps.resolveAgentStore(c)
|
|
12609
|
+
agentStore: deps.resolveAgentStore(c),
|
|
12610
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c)
|
|
12424
12611
|
}
|
|
12425
12612
|
};
|
|
12426
12613
|
try {
|
|
@@ -12658,7 +12845,7 @@ function createSchedulesRouter(deps) {
|
|
|
12658
12845
|
const agent = await agentIfAccessible({
|
|
12659
12846
|
authorizer: deps.authorizer,
|
|
12660
12847
|
context: requestContext,
|
|
12661
|
-
action: "
|
|
12848
|
+
action: "use",
|
|
12662
12849
|
agent: await deps.resolveAgentStore(c).getAgent({
|
|
12663
12850
|
tenant_id: requestContext.tenant_id,
|
|
12664
12851
|
name: schedule.agent_name
|
|
@@ -12722,7 +12909,7 @@ function createSchedulesRouter(deps) {
|
|
|
12722
12909
|
const agent = await agentIfAccessible({
|
|
12723
12910
|
authorizer: deps.authorizer,
|
|
12724
12911
|
context: requestContext,
|
|
12725
|
-
action: "
|
|
12912
|
+
action: "use",
|
|
12726
12913
|
agent: await deps.resolveAgentStore(c).getAgent({ tenant_id: requestContext.tenant_id, name: body.agent_name })
|
|
12727
12914
|
});
|
|
12728
12915
|
if (agent === void 0) {
|
|
@@ -12859,13 +13046,13 @@ import { OpenAPIHono as OpenAPIHono10 } from "@hono/zod-openapi";
|
|
|
12859
13046
|
import { createRoute as createRoute11 } from "@hono/zod-openapi";
|
|
12860
13047
|
|
|
12861
13048
|
// src/schemas/sessionMetrics.ts
|
|
12862
|
-
import { z as
|
|
13049
|
+
import { z as z27 } from "@hono/zod-openapi";
|
|
12863
13050
|
var MAX_SESSION_METRICS_WINDOW_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
12864
|
-
var SessionMetricsPointSchema =
|
|
12865
|
-
timestamp:
|
|
12866
|
-
value:
|
|
13051
|
+
var SessionMetricsPointSchema = z27.object({
|
|
13052
|
+
timestamp: z27.string(),
|
|
13053
|
+
value: z27.number().nonnegative()
|
|
12867
13054
|
}).strict().openapi("SessionMetricsPoint");
|
|
12868
|
-
var SessionMetricsMeterNameSchema =
|
|
13055
|
+
var SessionMetricsMeterNameSchema = z27.enum([
|
|
12869
13056
|
"total_sessions",
|
|
12870
13057
|
"total_cost_in_usd",
|
|
12871
13058
|
"total_turns",
|
|
@@ -12882,47 +13069,47 @@ var SessionMetricsMeterNameSchema = z26.enum([
|
|
|
12882
13069
|
var METRICS_USD_FERN_ENUM = {
|
|
12883
13070
|
$: { name: "USD" }
|
|
12884
13071
|
};
|
|
12885
|
-
var MetricsUnitSchema =
|
|
13072
|
+
var MetricsUnitSchema = z27.enum(["count", "$", "ms"]).openapi("MetricsUnit", {
|
|
12886
13073
|
"x-fern-enum": METRICS_USD_FERN_ENUM
|
|
12887
13074
|
});
|
|
12888
|
-
var SessionMetricsMeterSchema =
|
|
13075
|
+
var SessionMetricsMeterSchema = z27.object({
|
|
12889
13076
|
name: SessionMetricsMeterNameSchema,
|
|
12890
|
-
aggregate_value:
|
|
12891
|
-
description:
|
|
13077
|
+
aggregate_value: z27.number().nonnegative(),
|
|
13078
|
+
description: z27.string(),
|
|
12892
13079
|
unit: MetricsUnitSchema
|
|
12893
13080
|
}).strict().openapi("SessionMetricsMeter");
|
|
12894
|
-
var SessionMetricsMeterResponseSchema =
|
|
12895
|
-
meters:
|
|
13081
|
+
var SessionMetricsMeterResponseSchema = z27.object({
|
|
13082
|
+
meters: z27.array(SessionMetricsMeterSchema)
|
|
12896
13083
|
}).strict().openapi("SessionMetricsMeterResponse");
|
|
12897
|
-
var SessionMetricsChartNameSchema =
|
|
12898
|
-
var SessionMetricsChartSchema =
|
|
13084
|
+
var SessionMetricsChartNameSchema = z27.enum(["sessions_over_time", "sessions_cost_over_time", "turns_over_time"]).describe("Session metrics chart to return.").openapi("SessionMetricsChartName");
|
|
13085
|
+
var SessionMetricsChartSchema = z27.object({
|
|
12899
13086
|
name: SessionMetricsChartNameSchema,
|
|
12900
|
-
display_name:
|
|
12901
|
-
description:
|
|
12902
|
-
chart_type:
|
|
13087
|
+
display_name: z27.string(),
|
|
13088
|
+
description: z27.string(),
|
|
13089
|
+
chart_type: z27.literal("line")
|
|
12903
13090
|
}).strict().openapi("SessionMetricsChart");
|
|
12904
|
-
var SessionMetricsChartResponseSchema =
|
|
12905
|
-
charts:
|
|
13091
|
+
var SessionMetricsChartResponseSchema = z27.object({
|
|
13092
|
+
charts: z27.array(SessionMetricsChartSchema)
|
|
12906
13093
|
}).strict().openapi("SessionMetricsChartResponse");
|
|
12907
|
-
var SessionMetricsGraphLineSchema =
|
|
12908
|
-
name:
|
|
12909
|
-
values:
|
|
13094
|
+
var SessionMetricsGraphLineSchema = z27.object({
|
|
13095
|
+
name: z27.string(),
|
|
13096
|
+
values: z27.array(SessionMetricsPointSchema)
|
|
12910
13097
|
}).strict().openapi("SessionMetricsGraphLine");
|
|
12911
|
-
var SessionMetricsGraphSchema =
|
|
13098
|
+
var SessionMetricsGraphSchema = z27.object({
|
|
12912
13099
|
name: SessionMetricsChartNameSchema,
|
|
12913
|
-
display_name:
|
|
12914
|
-
description:
|
|
13100
|
+
display_name: z27.string(),
|
|
13101
|
+
description: z27.string(),
|
|
12915
13102
|
unit: MetricsUnitSchema,
|
|
12916
|
-
chart_type:
|
|
12917
|
-
graph_lines:
|
|
13103
|
+
chart_type: z27.literal("line"),
|
|
13104
|
+
graph_lines: z27.array(SessionMetricsGraphLineSchema)
|
|
12918
13105
|
}).strict().openapi("SessionMetricsGraph");
|
|
12919
|
-
var SessionMetricsChartDataResponseSchema =
|
|
12920
|
-
step:
|
|
12921
|
-
graphs:
|
|
13106
|
+
var SessionMetricsChartDataResponseSchema = z27.object({
|
|
13107
|
+
step: z27.string(),
|
|
13108
|
+
graphs: z27.array(SessionMetricsGraphSchema)
|
|
12922
13109
|
}).strict().openapi("SessionMetricsChartDataResponse");
|
|
12923
|
-
var IsoTimestampQueryParam2 =
|
|
12924
|
-
var GetSessionMetricsRequestQueryObjectSchema =
|
|
12925
|
-
agent_id:
|
|
13110
|
+
var IsoTimestampQueryParam2 = z27.iso.datetime({ offset: true }).openapi({ type: "string", format: "date-time" }).transform((s) => new Date(s));
|
|
13111
|
+
var GetSessionMetricsRequestQueryObjectSchema = z27.object({
|
|
13112
|
+
agent_id: z27.string().min(1).max(64).describe("Named agent identifier."),
|
|
12926
13113
|
start_timestamp: IsoTimestampQueryParam2.describe("Inclusive lower bound on session `created_at`."),
|
|
12927
13114
|
end_timestamp: IsoTimestampQueryParam2.describe("Inclusive upper bound on session `created_at`.")
|
|
12928
13115
|
});
|
|
@@ -12947,17 +13134,17 @@ function refineSessionMetricsTimeWindow(query, ctx) {
|
|
|
12947
13134
|
var GetSessionMetricsRequestQuerySchema = GetSessionMetricsRequestQueryObjectSchema.superRefine(
|
|
12948
13135
|
refineSessionMetricsTimeWindow
|
|
12949
13136
|
).openapi("GetSessionMetricsRequestQuery");
|
|
12950
|
-
var GetSessionMetricsChartDataRequestQuerySchema =
|
|
13137
|
+
var GetSessionMetricsChartDataRequestQuerySchema = z27.object({
|
|
12951
13138
|
...GetSessionMetricsRequestQueryObjectSchema.shape,
|
|
12952
13139
|
chart_name: SessionMetricsChartNameSchema
|
|
12953
13140
|
}).superRefine(refineSessionMetricsTimeWindow).openapi("GetSessionMetricsChartDataRequestQuery");
|
|
12954
|
-
var GetSessionMetricsMeterResponseSchema =
|
|
13141
|
+
var GetSessionMetricsMeterResponseSchema = z27.object({
|
|
12955
13142
|
data: SessionMetricsMeterResponseSchema
|
|
12956
13143
|
}).openapi("GetSessionMetricsMeterResponse");
|
|
12957
|
-
var GetSessionMetricsChartResponseSchema =
|
|
13144
|
+
var GetSessionMetricsChartResponseSchema = z27.object({
|
|
12958
13145
|
data: SessionMetricsChartResponseSchema
|
|
12959
13146
|
}).openapi("GetSessionMetricsChartResponse");
|
|
12960
|
-
var GetSessionMetricsChartDataResponseSchema =
|
|
13147
|
+
var GetSessionMetricsChartDataResponseSchema = z27.object({
|
|
12961
13148
|
data: SessionMetricsChartDataResponseSchema
|
|
12962
13149
|
}).openapi("GetSessionMetricsChartDataResponse");
|
|
12963
13150
|
|
|
@@ -13083,14 +13270,14 @@ import {
|
|
|
13083
13270
|
redisRequest,
|
|
13084
13271
|
RequestTimeoutError
|
|
13085
13272
|
} from "@truefoundry/trueforge-core/request-reply";
|
|
13086
|
-
import { z as
|
|
13273
|
+
import { z as z28 } from "zod";
|
|
13087
13274
|
init_config();
|
|
13088
13275
|
init_id();
|
|
13089
13276
|
var SESSIONS_CANCEL_PATH = "sessions/cancel";
|
|
13090
|
-
var CancelPeerBodySchema =
|
|
13091
|
-
session_id:
|
|
13092
|
-
turn_id:
|
|
13093
|
-
reason:
|
|
13277
|
+
var CancelPeerBodySchema = z28.object({
|
|
13278
|
+
session_id: z28.string(),
|
|
13279
|
+
turn_id: z28.string(),
|
|
13280
|
+
reason: z28.enum(CancellationReason2)
|
|
13094
13281
|
});
|
|
13095
13282
|
function toWireSession(record) {
|
|
13096
13283
|
return {
|
|
@@ -13101,7 +13288,8 @@ function toWireSession(record) {
|
|
|
13101
13288
|
created_at: record.created_at.toISOString(),
|
|
13102
13289
|
updated_at: record.updated_at.toISOString(),
|
|
13103
13290
|
metrics: record.metrics,
|
|
13104
|
-
metadata: record.metadata
|
|
13291
|
+
metadata: record.metadata,
|
|
13292
|
+
source: record.source
|
|
13105
13293
|
};
|
|
13106
13294
|
}
|
|
13107
13295
|
function cancelTurnOnThisExecutor(activeTurns, input) {
|
|
@@ -13218,7 +13406,7 @@ function createGetOrCreateSessionByExternalIdHandler(deps) {
|
|
|
13218
13406
|
const named = await agentIfAccessible({
|
|
13219
13407
|
authorizer: deps.authorizer,
|
|
13220
13408
|
context: requestContext,
|
|
13221
|
-
action: "
|
|
13409
|
+
action: "use",
|
|
13222
13410
|
agent: await deps.resolveAgentStore(c).getAgent({
|
|
13223
13411
|
tenant_id: requestContext.tenant_id,
|
|
13224
13412
|
name: body.agent.name
|
|
@@ -13235,7 +13423,7 @@ function createGetOrCreateSessionByExternalIdHandler(deps) {
|
|
|
13235
13423
|
modelProviderStore: deps.resolveModelProviderStore(c),
|
|
13236
13424
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
13237
13425
|
skillStore: deps.skillStore,
|
|
13238
|
-
sandboxProviderStore: deps.
|
|
13426
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c)
|
|
13239
13427
|
});
|
|
13240
13428
|
agent = { type: "inline", spec: body.agent.spec };
|
|
13241
13429
|
}
|
|
@@ -13243,7 +13431,8 @@ function createGetOrCreateSessionByExternalIdHandler(deps) {
|
|
|
13243
13431
|
tenant_id: requestContext.tenant_id,
|
|
13244
13432
|
external_id: body.external_id,
|
|
13245
13433
|
created_by_subject: createdBySubjectFromRequestContext(requestContext),
|
|
13246
|
-
agent
|
|
13434
|
+
agent,
|
|
13435
|
+
source: body.source ?? null
|
|
13247
13436
|
});
|
|
13248
13437
|
if (!created && !await canReadAgentBoundResource({
|
|
13249
13438
|
store: deps.resolveAgentStore(c),
|
|
@@ -13271,7 +13460,7 @@ function createSessionsRouter(deps) {
|
|
|
13271
13460
|
const agent = await agentIfAccessible({
|
|
13272
13461
|
authorizer: deps.authorizer,
|
|
13273
13462
|
context: requestContext,
|
|
13274
|
-
action: "
|
|
13463
|
+
action: "use",
|
|
13275
13464
|
agent: await deps.resolveAgentStore(c).getAgent({
|
|
13276
13465
|
tenant_id: requestContext.tenant_id,
|
|
13277
13466
|
name: body.agent.name
|
|
@@ -13296,7 +13485,7 @@ function createSessionsRouter(deps) {
|
|
|
13296
13485
|
modelProviderStore: deps.resolveModelProviderStore(c),
|
|
13297
13486
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
13298
13487
|
skillStore: deps.skillStore,
|
|
13299
|
-
sandboxProviderStore: deps.
|
|
13488
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c)
|
|
13300
13489
|
});
|
|
13301
13490
|
const session = await deps.sessions.create({
|
|
13302
13491
|
tenant_id: requestContext.tenant_id,
|
|
@@ -13375,7 +13564,7 @@ function createSessionsRouter(deps) {
|
|
|
13375
13564
|
modelProviderStore: deps.resolveModelProviderStore(c),
|
|
13376
13565
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
13377
13566
|
skillStore: deps.skillStore,
|
|
13378
|
-
sandboxProviderStore: deps.
|
|
13567
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c)
|
|
13379
13568
|
});
|
|
13380
13569
|
}
|
|
13381
13570
|
try {
|
|
@@ -13405,7 +13594,7 @@ function createSessionsRouter(deps) {
|
|
|
13405
13594
|
return c.json({ data: toWireSession(record) }, 200);
|
|
13406
13595
|
};
|
|
13407
13596
|
const listSessionsHandler = async (c) => {
|
|
13408
|
-
const query = c.req.
|
|
13597
|
+
const query = parseListSessionsQuery(honoQueriesToRecord(c.req.queries()));
|
|
13409
13598
|
const requestContext = deps.resolveRequestContext(c);
|
|
13410
13599
|
try {
|
|
13411
13600
|
const managedAgentIds = query.created_by_me ? [] : await resolveManagedAgentIds({
|
|
@@ -13420,11 +13609,14 @@ function createSessionsRouter(deps) {
|
|
|
13420
13609
|
agent_ids: managedAgentIds
|
|
13421
13610
|
},
|
|
13422
13611
|
tenant_id: requestContext.tenant_id,
|
|
13612
|
+
metadata: query.metadata,
|
|
13423
13613
|
limit: query.limit,
|
|
13424
13614
|
order: query.order,
|
|
13425
13615
|
page_token: query.page_token,
|
|
13426
13616
|
start_timestamp: query.start_timestamp,
|
|
13427
|
-
end_timestamp: query.end_timestamp
|
|
13617
|
+
end_timestamp: query.end_timestamp,
|
|
13618
|
+
source_type: query.source_type,
|
|
13619
|
+
source_id: query.source_id
|
|
13428
13620
|
});
|
|
13429
13621
|
return c.json({ data: data.map(toWireSession), pagination }, 200);
|
|
13430
13622
|
} catch (error) {
|
|
@@ -13754,12 +13946,13 @@ function redactSandboxProvider(manifest) {
|
|
|
13754
13946
|
function createSandboxProvidersRouter(deps) {
|
|
13755
13947
|
const getHandler = async (c) => {
|
|
13756
13948
|
const requestContext = deps.resolveRequestContext(c);
|
|
13757
|
-
const
|
|
13949
|
+
const store = deps.resolveSandboxProviderStore(c);
|
|
13950
|
+
const record = await store.getSandboxProvider(requestContext.tenant_id);
|
|
13758
13951
|
if (record === void 0) {
|
|
13759
13952
|
return c.json({ error: { message: "No sandbox provider configured" } }, 404);
|
|
13760
13953
|
}
|
|
13761
13954
|
const status = await checkSnapshotStatus({
|
|
13762
|
-
store
|
|
13955
|
+
store,
|
|
13763
13956
|
tenant_id: requestContext.tenant_id,
|
|
13764
13957
|
logger: deps.logger
|
|
13765
13958
|
});
|
|
@@ -13777,6 +13970,7 @@ function createSandboxProvidersRouter(deps) {
|
|
|
13777
13970
|
const putHandler = async (c) => {
|
|
13778
13971
|
const body = c.req.valid("json");
|
|
13779
13972
|
const requestContext = deps.resolveRequestContext(c);
|
|
13973
|
+
const store = deps.resolveSandboxProviderStore(c);
|
|
13780
13974
|
const incoming = body.manifest;
|
|
13781
13975
|
const resolveManifest = (existing) => ({
|
|
13782
13976
|
...incoming,
|
|
@@ -13789,10 +13983,7 @@ function createSandboxProvidersRouter(deps) {
|
|
|
13789
13983
|
});
|
|
13790
13984
|
try {
|
|
13791
13985
|
const { manifest, status } = await deps.withTransaction(async (transaction) => {
|
|
13792
|
-
const locked = await
|
|
13793
|
-
requestContext.tenant_id,
|
|
13794
|
-
transaction
|
|
13795
|
-
);
|
|
13986
|
+
const locked = await store.getSandboxProviderForUpdate(requestContext.tenant_id, transaction);
|
|
13796
13987
|
const resolved = resolveManifest(locked);
|
|
13797
13988
|
const provider = toDaytonaSandboxProvider({
|
|
13798
13989
|
manifest: resolved,
|
|
@@ -13803,7 +13994,7 @@ function createSandboxProvidersRouter(deps) {
|
|
|
13803
13994
|
const built = toSandboxStatus(
|
|
13804
13995
|
await withTimeout2(provider.buildImage(), BUILD_REQUEST_TIMEOUT_MS, "sandbox buildImage")
|
|
13805
13996
|
);
|
|
13806
|
-
await
|
|
13997
|
+
await store.upsertSandboxProvider(
|
|
13807
13998
|
{ tenant_id: requestContext.tenant_id, manifest: resolved, ...built },
|
|
13808
13999
|
transaction
|
|
13809
14000
|
);
|
|
@@ -14052,7 +14243,7 @@ function createSettingsRouter(deps) {
|
|
|
14052
14243
|
router.route(
|
|
14053
14244
|
"/sandbox-providers",
|
|
14054
14245
|
createSandboxProvidersRouter({
|
|
14055
|
-
|
|
14246
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14056
14247
|
withTransaction: deps.withTransaction,
|
|
14057
14248
|
logger: deps.logger,
|
|
14058
14249
|
resolveRequestContext: deps.resolveRequestContext
|
|
@@ -14189,9 +14380,9 @@ var PACKAGE_VERSION = readPackageVersion();
|
|
|
14189
14380
|
init_schedule();
|
|
14190
14381
|
|
|
14191
14382
|
// src/zodErrorResponse.ts
|
|
14192
|
-
import { z as
|
|
14383
|
+
import { z as z29 } from "@hono/zod-openapi";
|
|
14193
14384
|
function zodErrorResponse(c, error) {
|
|
14194
|
-
return c.json({ error: { message:
|
|
14385
|
+
return c.json({ error: { message: z29.prettifyError(error) } }, 400);
|
|
14195
14386
|
}
|
|
14196
14387
|
var zodValidationHook = (result, c) => {
|
|
14197
14388
|
if (!result.success) {
|
|
@@ -14237,7 +14428,7 @@ function createRequestBodyLimitMiddleware(maxSize) {
|
|
|
14237
14428
|
}
|
|
14238
14429
|
function createAppErrorHandler(params) {
|
|
14239
14430
|
return (error, c) => {
|
|
14240
|
-
if (error instanceof
|
|
14431
|
+
if (error instanceof z30.ZodError) {
|
|
14241
14432
|
return zodErrorResponse(c, error);
|
|
14242
14433
|
}
|
|
14243
14434
|
if (error instanceof InvalidCronError) {
|
|
@@ -14311,7 +14502,7 @@ function createServerApp(deps) {
|
|
|
14311
14502
|
"/api/v1/capabilities",
|
|
14312
14503
|
withAuth(
|
|
14313
14504
|
createCapabilitiesRouter({
|
|
14314
|
-
|
|
14505
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14315
14506
|
withTransaction: deps.withTransaction,
|
|
14316
14507
|
logger: deps.logger,
|
|
14317
14508
|
resolveRequestContext
|
|
@@ -14382,7 +14573,7 @@ function createServerApp(deps) {
|
|
|
14382
14573
|
resolveModelProviderStore: deps.resolveModelProviderStore,
|
|
14383
14574
|
resolveMcpServerStore: deps.resolveMcpServerStore,
|
|
14384
14575
|
skillStore: deps.skillStore,
|
|
14385
|
-
|
|
14576
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14386
14577
|
withTransaction: deps.withTransaction,
|
|
14387
14578
|
resolveRequestContext,
|
|
14388
14579
|
authorizer: deps.authorizer
|
|
@@ -14404,7 +14595,7 @@ function createServerApp(deps) {
|
|
|
14404
14595
|
mcpServerStore: deps.resolveMcpServerStore(c),
|
|
14405
14596
|
skillStore: deps.skillStore,
|
|
14406
14597
|
agentStore: deps.resolveAgentStore(c),
|
|
14407
|
-
sandboxProviderStore: deps.
|
|
14598
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c),
|
|
14408
14599
|
logger: deps.logger
|
|
14409
14600
|
}),
|
|
14410
14601
|
withTransaction: deps.withTransaction,
|
|
@@ -14422,7 +14613,7 @@ function createServerApp(deps) {
|
|
|
14422
14613
|
resolveMcpServerStore: deps.resolveMcpServerStore,
|
|
14423
14614
|
tokenStore: deps.tokenStore,
|
|
14424
14615
|
skillStore: deps.skillStore,
|
|
14425
|
-
|
|
14616
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14426
14617
|
withTransaction: deps.withTransaction,
|
|
14427
14618
|
logger: deps.logger,
|
|
14428
14619
|
resolveRequestContext
|
|
@@ -14439,7 +14630,7 @@ function createServerApp(deps) {
|
|
|
14439
14630
|
resolveMcpServerStore: deps.resolveMcpServerStore,
|
|
14440
14631
|
skillStore: deps.skillStore,
|
|
14441
14632
|
resolveAgentStore: deps.resolveAgentStore,
|
|
14442
|
-
|
|
14633
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14443
14634
|
resolveRequestContext,
|
|
14444
14635
|
authorizer: deps.authorizer
|
|
14445
14636
|
}),
|
|
@@ -14469,7 +14660,7 @@ function createServerApp(deps) {
|
|
|
14469
14660
|
resolveMcpServerStore: deps.resolveMcpServerStore,
|
|
14470
14661
|
skillStore: deps.skillStore,
|
|
14471
14662
|
resolveAgentStore: deps.resolveAgentStore,
|
|
14472
|
-
|
|
14663
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14473
14664
|
redis: deps.redis,
|
|
14474
14665
|
requestReplyRouter: deps.requestReplyRouter,
|
|
14475
14666
|
resolveRequestContext,
|
|
@@ -14491,7 +14682,7 @@ function createServerApp(deps) {
|
|
|
14491
14682
|
skillStore: deps.skillStore,
|
|
14492
14683
|
resolveAgentStore: deps.resolveAgentStore,
|
|
14493
14684
|
eventSubscriptions: deps.eventSubscriptions,
|
|
14494
|
-
|
|
14685
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
14495
14686
|
logger: deps.logger,
|
|
14496
14687
|
resolveRequestContext,
|
|
14497
14688
|
authorizer: deps.authorizer
|
|
@@ -14512,7 +14703,7 @@ var TrueForgeAuthorizer = class {
|
|
|
14512
14703
|
return Promise.resolve({ kind: "all" });
|
|
14513
14704
|
}
|
|
14514
14705
|
canAccessAgent(input) {
|
|
14515
|
-
if (input.action === "read") {
|
|
14706
|
+
if (input.action === "read" || input.action === "use") {
|
|
14516
14707
|
return Promise.resolve(true);
|
|
14517
14708
|
}
|
|
14518
14709
|
return Promise.resolve(input.agent.created_by_subject.subject_id === input.context.subject.id);
|
|
@@ -15417,9 +15608,9 @@ function printStandaloneStartupBanner(options) {
|
|
|
15417
15608
|
|
|
15418
15609
|
// src/truefoundry/perServerMcpHeaders.ts
|
|
15419
15610
|
import { HTTPException as HTTPException9 } from "hono/http-exception";
|
|
15420
|
-
import { z as
|
|
15611
|
+
import { z as z31 } from "zod";
|
|
15421
15612
|
var X_TFG_MCP_HEADERS = "x-tfg-mcp-headers";
|
|
15422
|
-
var PerServerMcpHeadersSchema =
|
|
15613
|
+
var PerServerMcpHeadersSchema = z31.record(z31.string().min(1), z31.record(z31.string().min(1), z31.string()));
|
|
15423
15614
|
function parsePerServerMcpHeaders(raw) {
|
|
15424
15615
|
let decoded;
|
|
15425
15616
|
try {
|
|
@@ -15445,7 +15636,7 @@ import { sql as sql3 } from "kysely";
|
|
|
15445
15636
|
import { extractErrorLogFields as extractErrorLogFields8 } from "@truefoundry/trueforge-core/core";
|
|
15446
15637
|
import { HTTPException as HTTPException10 } from "hono/http-exception";
|
|
15447
15638
|
import { fetch as undiciFetch2 } from "undici";
|
|
15448
|
-
import { z as
|
|
15639
|
+
import { z as z33 } from "zod";
|
|
15449
15640
|
|
|
15450
15641
|
// src/truefoundry/internalTls.ts
|
|
15451
15642
|
function normalizeInternalTlsUrl(input) {
|
|
@@ -15459,48 +15650,48 @@ function createInternalTlsDispatcher(options) {
|
|
|
15459
15650
|
}
|
|
15460
15651
|
|
|
15461
15652
|
// src/truefoundry/mapSfyMcpServers.ts
|
|
15462
|
-
import { z as
|
|
15653
|
+
import { z as z32 } from "zod";
|
|
15463
15654
|
var MCP_PROXY_BASE_URL_TEMPLATE = "{{mcpProxyBaseURL}}";
|
|
15464
|
-
var IsoInstantSchema =
|
|
15655
|
+
var IsoInstantSchema = z32.union([z32.string().min(1), z32.date()]).transform((value, ctx) => {
|
|
15465
15656
|
if (value instanceof Date) {
|
|
15466
15657
|
if (!Number.isFinite(value.getTime())) {
|
|
15467
15658
|
ctx.addIssue({ code: "custom", message: "Invalid Date" });
|
|
15468
|
-
return
|
|
15659
|
+
return z32.NEVER;
|
|
15469
15660
|
}
|
|
15470
15661
|
return value.toISOString();
|
|
15471
15662
|
}
|
|
15472
15663
|
const ms = Date.parse(value);
|
|
15473
15664
|
if (!Number.isFinite(ms)) {
|
|
15474
15665
|
ctx.addIssue({ code: "custom", message: "Invalid ISO timestamp" });
|
|
15475
|
-
return
|
|
15666
|
+
return z32.NEVER;
|
|
15476
15667
|
}
|
|
15477
15668
|
return new Date(ms).toISOString();
|
|
15478
15669
|
});
|
|
15479
|
-
var SfyMcpServerRowSchema =
|
|
15480
|
-
id:
|
|
15481
|
-
name:
|
|
15482
|
-
proxyUrl:
|
|
15670
|
+
var SfyMcpServerRowSchema = z32.object({
|
|
15671
|
+
id: z32.string().min(1),
|
|
15672
|
+
name: z32.string().min(1),
|
|
15673
|
+
proxyUrl: z32.string().min(1),
|
|
15483
15674
|
createdAt: IsoInstantSchema,
|
|
15484
15675
|
updatedAt: IsoInstantSchema,
|
|
15485
|
-
manifest:
|
|
15486
|
-
description:
|
|
15487
|
-
auth_data:
|
|
15488
|
-
type:
|
|
15676
|
+
manifest: z32.object({
|
|
15677
|
+
description: z32.string().min(1).optional(),
|
|
15678
|
+
auth_data: z32.object({
|
|
15679
|
+
type: z32.string().min(1).optional()
|
|
15489
15680
|
}).optional()
|
|
15490
15681
|
}).optional()
|
|
15491
15682
|
});
|
|
15492
|
-
var SfyMcpAuthStatusAuthenticatedSchema =
|
|
15493
|
-
var SfyMcpAuthStatusNotRequiredSchema =
|
|
15494
|
-
var SfyMcpAuthStatusRequiredSchema =
|
|
15683
|
+
var SfyMcpAuthStatusAuthenticatedSchema = z32.object({ status: z32.literal("authenticated") });
|
|
15684
|
+
var SfyMcpAuthStatusNotRequiredSchema = z32.object({ status: z32.literal("authentication_not_required") });
|
|
15685
|
+
var SfyMcpAuthStatusRequiredSchema = z32.object({ status: z32.literal("authentication_required") });
|
|
15495
15686
|
var SfyMcpAuthorizeRequiredSchema = SfyMcpAuthStatusRequiredSchema.extend({
|
|
15496
|
-
authorization_endpoint:
|
|
15687
|
+
authorization_endpoint: z32.url()
|
|
15497
15688
|
});
|
|
15498
|
-
var SfyMcpAuthStatusSchema =
|
|
15689
|
+
var SfyMcpAuthStatusSchema = z32.discriminatedUnion("status", [
|
|
15499
15690
|
SfyMcpAuthStatusAuthenticatedSchema,
|
|
15500
15691
|
SfyMcpAuthStatusRequiredSchema,
|
|
15501
15692
|
SfyMcpAuthStatusNotRequiredSchema
|
|
15502
15693
|
]);
|
|
15503
|
-
var SfyMcpAuthorizeResultSchema =
|
|
15694
|
+
var SfyMcpAuthorizeResultSchema = z32.discriminatedUnion("status", [
|
|
15504
15695
|
SfyMcpAuthStatusAuthenticatedSchema,
|
|
15505
15696
|
SfyMcpAuthorizeRequiredSchema,
|
|
15506
15697
|
SfyMcpAuthStatusNotRequiredSchema
|
|
@@ -15566,37 +15757,37 @@ var TFG_AGENTS_PATH = "internal/tfg/agents";
|
|
|
15566
15757
|
var SESSION_PATH = "v1/session";
|
|
15567
15758
|
var AGENT_PERMISSIONS_PATH = "v1/authorize/permissions";
|
|
15568
15759
|
var INTEGRATIONS_PAGE_SIZE = 1e3;
|
|
15569
|
-
var SessionSubjectSchema =
|
|
15570
|
-
subjectId:
|
|
15571
|
-
subjectType:
|
|
15572
|
-
subjectDisplayName:
|
|
15573
|
-
subjectSlug:
|
|
15760
|
+
var SessionSubjectSchema = z33.object({
|
|
15761
|
+
subjectId: z33.string().min(1),
|
|
15762
|
+
subjectType: z33.string().min(1),
|
|
15763
|
+
subjectDisplayName: z33.string().nullable().optional(),
|
|
15764
|
+
subjectSlug: z33.string().nullable().optional()
|
|
15574
15765
|
});
|
|
15575
|
-
var GetSessionUserSchema =
|
|
15576
|
-
tenantName:
|
|
15577
|
-
roles:
|
|
15766
|
+
var GetSessionUserSchema = z33.object({
|
|
15767
|
+
tenantName: z33.string().min(1),
|
|
15768
|
+
roles: z33.array(z33.string()),
|
|
15578
15769
|
subject: SessionSubjectSchema
|
|
15579
15770
|
});
|
|
15580
|
-
var GetSessionWireSchema =
|
|
15771
|
+
var GetSessionWireSchema = z33.object({
|
|
15581
15772
|
user: GetSessionUserSchema.nullable()
|
|
15582
15773
|
});
|
|
15583
|
-
var ListResponseSchema =
|
|
15584
|
-
|
|
15585
|
-
|
|
15586
|
-
data:
|
|
15587
|
-
pagination:
|
|
15774
|
+
var ListResponseSchema = z33.union([
|
|
15775
|
+
z33.array(z33.unknown()),
|
|
15776
|
+
z33.object({
|
|
15777
|
+
data: z33.array(z33.unknown()).catch([]),
|
|
15778
|
+
pagination: z33.object({ total: z33.number().optional() }).optional()
|
|
15588
15779
|
})
|
|
15589
15780
|
]);
|
|
15590
|
-
var ServiceFoundryErrorSchema =
|
|
15591
|
-
message:
|
|
15781
|
+
var ServiceFoundryErrorSchema = z33.object({
|
|
15782
|
+
message: z33.union([z33.string(), z33.array(z33.string())]).optional()
|
|
15592
15783
|
});
|
|
15593
|
-
var PutRemoteAgentResponseSchema =
|
|
15594
|
-
agentId:
|
|
15784
|
+
var PutRemoteAgentResponseSchema = z33.object({
|
|
15785
|
+
agentId: z33.string().min(1)
|
|
15595
15786
|
});
|
|
15596
|
-
var AgentPermissionSchema =
|
|
15597
|
-
var AgentPermissionsSchema =
|
|
15598
|
-
|
|
15599
|
-
|
|
15787
|
+
var AgentPermissionSchema = z33.enum(["READ_AGENT", "USE_AGENT", "MANAGE_AGENT", "DELETE_AGENT"]);
|
|
15788
|
+
var AgentPermissionsSchema = z33.record(
|
|
15789
|
+
z33.string(),
|
|
15790
|
+
z33.array(z33.string()).transform(
|
|
15600
15791
|
(permissions) => permissions.flatMap((permission) => {
|
|
15601
15792
|
const parsed = AgentPermissionSchema.safeParse(permission);
|
|
15602
15793
|
return parsed.success ? [parsed.data] : [];
|
|
@@ -15965,7 +16156,7 @@ function toPutRemoteAgentPayload({
|
|
|
15965
16156
|
}) {
|
|
15966
16157
|
return {
|
|
15967
16158
|
name,
|
|
15968
|
-
description:
|
|
16159
|
+
description: name,
|
|
15969
16160
|
model: manifest.model.name,
|
|
15970
16161
|
mcp_servers: (manifest.mcp_servers ?? []).map((server) => server.name)
|
|
15971
16162
|
};
|
|
@@ -16092,8 +16283,14 @@ var TrueFoundryAgentStore = class {
|
|
|
16092
16283
|
|
|
16093
16284
|
// src/truefoundry/TrueFoundryAuthorizer.ts
|
|
16094
16285
|
import { HTTPException as HTTPException11 } from "hono/http-exception";
|
|
16286
|
+
var permissionByAction = {
|
|
16287
|
+
read: "READ_AGENT",
|
|
16288
|
+
use: "USE_AGENT",
|
|
16289
|
+
manage: "MANAGE_AGENT",
|
|
16290
|
+
delete: "DELETE_AGENT"
|
|
16291
|
+
};
|
|
16095
16292
|
function allowsAction(permissions, action) {
|
|
16096
|
-
return
|
|
16293
|
+
return permissions.includes(permissionByAction[action]);
|
|
16097
16294
|
}
|
|
16098
16295
|
function requireUserCredential(context) {
|
|
16099
16296
|
if (context.user_credential === null) {
|
|
@@ -16140,24 +16337,24 @@ init_mcpServerStore();
|
|
|
16140
16337
|
// src/truefoundry/mapEnabledModels.ts
|
|
16141
16338
|
import { SUPPORTED_REASONING_EFFORTS as SUPPORTED_REASONING_EFFORTS3 } from "@truefoundry/trueforge-core/core";
|
|
16142
16339
|
import { HTTPException as HTTPException12 } from "hono/http-exception";
|
|
16143
|
-
import { z as
|
|
16144
|
-
var ModelParamSchema =
|
|
16145
|
-
key:
|
|
16146
|
-
supportedValues:
|
|
16340
|
+
import { z as z34 } from "zod";
|
|
16341
|
+
var ModelParamSchema = z34.object({
|
|
16342
|
+
key: z34.string(),
|
|
16343
|
+
supportedValues: z34.array(z34.string()).optional()
|
|
16147
16344
|
});
|
|
16148
|
-
var MetadataSchema =
|
|
16149
|
-
limits:
|
|
16150
|
-
context_window:
|
|
16151
|
-
max_input_tokens:
|
|
16152
|
-
max_output_tokens:
|
|
16153
|
-
max_tokens:
|
|
16345
|
+
var MetadataSchema = z34.object({
|
|
16346
|
+
limits: z34.object({
|
|
16347
|
+
context_window: z34.number().optional(),
|
|
16348
|
+
max_input_tokens: z34.number().optional(),
|
|
16349
|
+
max_output_tokens: z34.number().optional(),
|
|
16350
|
+
max_tokens: z34.number().optional()
|
|
16154
16351
|
}).optional(),
|
|
16155
|
-
params:
|
|
16352
|
+
params: z34.array(ModelParamSchema).optional()
|
|
16156
16353
|
});
|
|
16157
|
-
var IntegrationSchema =
|
|
16158
|
-
name:
|
|
16159
|
-
manifest:
|
|
16160
|
-
providerAccount:
|
|
16354
|
+
var IntegrationSchema = z34.object({
|
|
16355
|
+
name: z34.string().min(1),
|
|
16356
|
+
manifest: z34.object({ model_types: z34.array(z34.string()).optional() }),
|
|
16357
|
+
providerAccount: z34.object({ name: z34.string().min(1) }),
|
|
16161
16358
|
metadata: MetadataSchema.optional()
|
|
16162
16359
|
});
|
|
16163
16360
|
function toReasoningEfforts(params) {
|
|
@@ -16204,11 +16401,11 @@ function mapEnabledModels(input) {
|
|
|
16204
16401
|
}
|
|
16205
16402
|
return models;
|
|
16206
16403
|
}
|
|
16207
|
-
var InstallationSchema =
|
|
16208
|
-
isDefault:
|
|
16209
|
-
manifest:
|
|
16404
|
+
var InstallationSchema = z34.object({
|
|
16405
|
+
isDefault: z34.boolean().optional(),
|
|
16406
|
+
manifest: z34.object({ url: z34.string().min(1) })
|
|
16210
16407
|
});
|
|
16211
|
-
var InstallationsEnvelopeSchema =
|
|
16408
|
+
var InstallationsEnvelopeSchema = z34.union([z34.array(z34.unknown()), z34.object({ data: z34.array(z34.unknown()) })]);
|
|
16212
16409
|
function resolveDefaultGatewayUrl(payload) {
|
|
16213
16410
|
const envelope = InstallationsEnvelopeSchema.parse(payload);
|
|
16214
16411
|
const rows = Array.isArray(envelope) ? envelope : envelope.data;
|
|
@@ -16290,13 +16487,15 @@ var TrueFoundryMcpServerStore = class {
|
|
|
16290
16487
|
if (input.names?.length === 0) {
|
|
16291
16488
|
return paginateOffsetRows([], input.limit, offset);
|
|
16292
16489
|
}
|
|
16293
|
-
const rows = await
|
|
16294
|
-
|
|
16295
|
-
|
|
16296
|
-
|
|
16297
|
-
|
|
16298
|
-
|
|
16299
|
-
|
|
16490
|
+
const [rows, gatewayUrl] = await Promise.all([
|
|
16491
|
+
this.#client.listMcpServers({
|
|
16492
|
+
accessToken: this.#accessToken,
|
|
16493
|
+
limit: input.limit + 1,
|
|
16494
|
+
offset,
|
|
16495
|
+
...input.names !== void 0 ? { names: input.names } : {}
|
|
16496
|
+
}),
|
|
16497
|
+
this.#resolveGatewayUrl()
|
|
16498
|
+
]);
|
|
16300
16499
|
const records = mapSfyMcpServers({ rows }).map(
|
|
16301
16500
|
(server) => toRecord2({ tenant_id: input.tenant_id, server, gatewayUrl })
|
|
16302
16501
|
);
|
|
@@ -16304,12 +16503,14 @@ var TrueFoundryMcpServerStore = class {
|
|
|
16304
16503
|
}
|
|
16305
16504
|
async getServer(input, transaction) {
|
|
16306
16505
|
void transaction;
|
|
16307
|
-
const row = await
|
|
16506
|
+
const [row, gatewayUrl] = await Promise.all([
|
|
16507
|
+
this.#client.getMcpServerByName({ accessToken: this.#accessToken, name: input.name }),
|
|
16508
|
+
this.#resolveGatewayUrl()
|
|
16509
|
+
]);
|
|
16308
16510
|
if (row === void 0) {
|
|
16309
16511
|
return void 0;
|
|
16310
16512
|
}
|
|
16311
16513
|
const server = parseSfyMcpServerSummary(row);
|
|
16312
|
-
const gatewayUrl = await this.#resolveGatewayUrl();
|
|
16313
16514
|
return toRecord2({ tenant_id: input.tenant_id, server, gatewayUrl });
|
|
16314
16515
|
}
|
|
16315
16516
|
getServerForUpdate(input, transaction) {
|
|
@@ -16500,6 +16701,135 @@ function toManifest(input) {
|
|
|
16500
16701
|
};
|
|
16501
16702
|
}
|
|
16502
16703
|
|
|
16704
|
+
// src/truefoundry/TrueFoundrySandboxProviderStore.ts
|
|
16705
|
+
import { HTTPException as HTTPException16 } from "hono/http-exception";
|
|
16706
|
+
import { LRUCache } from "lru-cache";
|
|
16707
|
+
import { z as z35 } from "zod";
|
|
16708
|
+
|
|
16709
|
+
// src/truefoundry/resolveTrueFoundrySandboxProviderConfig.ts
|
|
16710
|
+
init_config();
|
|
16711
|
+
import { HTTPException as HTTPException15 } from "hono/http-exception";
|
|
16712
|
+
function resolveTrueFoundrySandboxProviderConfig(config = config_default) {
|
|
16713
|
+
if (config.STANDALONE) {
|
|
16714
|
+
throw new HTTPException15(500, {
|
|
16715
|
+
message: "TrueFoundry sandbox provider config is not available in standalone mode"
|
|
16716
|
+
});
|
|
16717
|
+
}
|
|
16718
|
+
if (config.TRUEFOUNDRY_SANDBOX_ENABLED && config.TRUEFOUNDRY_SANDBOX_API_KEY !== void 0 && config.TRUEFOUNDRY_SANDBOX_SETTINGS_SERVER_URL !== void 0) {
|
|
16719
|
+
return {
|
|
16720
|
+
type: "daytona",
|
|
16721
|
+
apiKey: config.TRUEFOUNDRY_SANDBOX_API_KEY,
|
|
16722
|
+
settingsServerUrl: config.TRUEFOUNDRY_SANDBOX_SETTINGS_SERVER_URL
|
|
16723
|
+
};
|
|
16724
|
+
}
|
|
16725
|
+
return void 0;
|
|
16726
|
+
}
|
|
16727
|
+
|
|
16728
|
+
// src/truefoundry/TrueFoundrySandboxProviderStore.ts
|
|
16729
|
+
var SETTINGS_CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
16730
|
+
var SETTINGS_FETCH_TIMEOUT_MS = 1e4;
|
|
16731
|
+
var SANDBOX_DEFAULT_SETTINGS = {
|
|
16732
|
+
timeoutMs: 6e4,
|
|
16733
|
+
autoStopIntervalInMinutes: 5,
|
|
16734
|
+
autoArchiveIntervalInMinutes: 60,
|
|
16735
|
+
autoDeleteIntervalInMinutes: 43200
|
|
16736
|
+
};
|
|
16737
|
+
var DaytonaSandboxSettingsSchema = z35.object({
|
|
16738
|
+
snapshotName: z35.string().min(1, "snapshotName is required"),
|
|
16739
|
+
autoStopIntervalInMinutes: z35.number().default(SANDBOX_DEFAULT_SETTINGS.autoStopIntervalInMinutes),
|
|
16740
|
+
autoArchiveIntervalInMinutes: z35.number().default(SANDBOX_DEFAULT_SETTINGS.autoArchiveIntervalInMinutes),
|
|
16741
|
+
autoDeleteIntervalInMinutes: z35.number().default(SANDBOX_DEFAULT_SETTINGS.autoDeleteIntervalInMinutes),
|
|
16742
|
+
timeoutMs: z35.number().default(SANDBOX_DEFAULT_SETTINGS.timeoutMs)
|
|
16743
|
+
});
|
|
16744
|
+
var DAYTONA_SETTINGS_CACHE_KEY = "daytona-settings";
|
|
16745
|
+
var daytonaSettingsCache = new LRUCache({
|
|
16746
|
+
max: 1,
|
|
16747
|
+
ttl: SETTINGS_CACHE_TTL_MS
|
|
16748
|
+
});
|
|
16749
|
+
async function resolveDaytonaSandboxSettings({
|
|
16750
|
+
accessToken,
|
|
16751
|
+
settingsServerUrl
|
|
16752
|
+
}) {
|
|
16753
|
+
const cached = daytonaSettingsCache.get(DAYTONA_SETTINGS_CACHE_KEY);
|
|
16754
|
+
if (cached !== void 0) {
|
|
16755
|
+
return cached;
|
|
16756
|
+
}
|
|
16757
|
+
let response;
|
|
16758
|
+
try {
|
|
16759
|
+
response = await fetch(settingsServerUrl, {
|
|
16760
|
+
headers: { "Content-Type": "application/json", Authorization: `Bearer ${accessToken}` },
|
|
16761
|
+
signal: AbortSignal.timeout(SETTINGS_FETCH_TIMEOUT_MS)
|
|
16762
|
+
});
|
|
16763
|
+
} catch (error) {
|
|
16764
|
+
const timedOut = error instanceof Error && error.name === "TimeoutError";
|
|
16765
|
+
throw new Error(
|
|
16766
|
+
timedOut ? `Sandbox settings endpoint timed out after ${String(SETTINGS_FETCH_TIMEOUT_MS / 1e3)}s` : "Sandbox settings endpoint request failed",
|
|
16767
|
+
{ cause: error }
|
|
16768
|
+
);
|
|
16769
|
+
}
|
|
16770
|
+
if (!response.ok) {
|
|
16771
|
+
const body = await response.text();
|
|
16772
|
+
throw new Error(`Sandbox settings endpoint returned ${String(response.status)}: ${body}`);
|
|
16773
|
+
}
|
|
16774
|
+
const settings = DaytonaSandboxSettingsSchema.parse(await response.json());
|
|
16775
|
+
daytonaSettingsCache.set(DAYTONA_SETTINGS_CACHE_KEY, settings);
|
|
16776
|
+
return settings;
|
|
16777
|
+
}
|
|
16778
|
+
function managed3() {
|
|
16779
|
+
throw new HTTPException16(TRUEFOUNDRY_MANAGED_STATUS, { message: TRUEFOUNDRY_MANAGED_MESSAGE });
|
|
16780
|
+
}
|
|
16781
|
+
var TrueFoundrySandboxProviderStore = class {
|
|
16782
|
+
#accessToken;
|
|
16783
|
+
constructor(input) {
|
|
16784
|
+
this.#accessToken = input.accessToken;
|
|
16785
|
+
}
|
|
16786
|
+
async getSandboxProvider(tenantId, transaction) {
|
|
16787
|
+
void transaction;
|
|
16788
|
+
const providerConfig = resolveTrueFoundrySandboxProviderConfig();
|
|
16789
|
+
if (!providerConfig) {
|
|
16790
|
+
return void 0;
|
|
16791
|
+
}
|
|
16792
|
+
const settings = await resolveDaytonaSandboxSettings({
|
|
16793
|
+
accessToken: this.#accessToken,
|
|
16794
|
+
settingsServerUrl: providerConfig.settingsServerUrl
|
|
16795
|
+
});
|
|
16796
|
+
const now2 = (/* @__PURE__ */ new Date()).toISOString();
|
|
16797
|
+
return {
|
|
16798
|
+
tenant_id: tenantId,
|
|
16799
|
+
manifest: {
|
|
16800
|
+
type: "daytona",
|
|
16801
|
+
auth: { api_key: providerConfig.apiKey },
|
|
16802
|
+
exec_timeout_ms: settings.timeoutMs,
|
|
16803
|
+
auto_stop_interval_in_minutes: settings.autoStopIntervalInMinutes,
|
|
16804
|
+
auto_archive_interval_in_minutes: settings.autoArchiveIntervalInMinutes,
|
|
16805
|
+
auto_delete_interval_in_minutes: settings.autoDeleteIntervalInMinutes
|
|
16806
|
+
},
|
|
16807
|
+
status: "ready",
|
|
16808
|
+
status_reason: null,
|
|
16809
|
+
// Snapshot name only — no image_uri; TFY mode never registers a snapshot.
|
|
16810
|
+
build_metadata: { build_ref: settings.snapshotName },
|
|
16811
|
+
created_at: now2,
|
|
16812
|
+
// Fresh on every get so checkSnapshotStatus short-circuits without Daytona.
|
|
16813
|
+
updated_at: now2
|
|
16814
|
+
};
|
|
16815
|
+
}
|
|
16816
|
+
getSandboxProviderForUpdate(tenantId, transaction) {
|
|
16817
|
+
void tenantId;
|
|
16818
|
+
void transaction;
|
|
16819
|
+
return managed3();
|
|
16820
|
+
}
|
|
16821
|
+
upsertSandboxProvider(input, transaction) {
|
|
16822
|
+
void input;
|
|
16823
|
+
void transaction;
|
|
16824
|
+
return managed3();
|
|
16825
|
+
}
|
|
16826
|
+
updateSandboxStatus(input, transaction) {
|
|
16827
|
+
void input;
|
|
16828
|
+
void transaction;
|
|
16829
|
+
return managed3();
|
|
16830
|
+
}
|
|
16831
|
+
};
|
|
16832
|
+
|
|
16503
16833
|
// src/main.ts
|
|
16504
16834
|
var configuration2;
|
|
16505
16835
|
var isOidcConfigured2;
|
|
@@ -16524,8 +16854,8 @@ try {
|
|
|
16524
16854
|
function requireRequestCredentialToken(c) {
|
|
16525
16855
|
const credential = resolveRequestContext(c).user_credential;
|
|
16526
16856
|
if (credential === null) {
|
|
16527
|
-
throw new
|
|
16528
|
-
message: "Authentication token required to list or call TrueFoundry models, MCP servers, and
|
|
16857
|
+
throw new HTTPException17(401, {
|
|
16858
|
+
message: "Authentication token required to list or call TrueFoundry models, MCP servers, agents, and sandbox"
|
|
16529
16859
|
});
|
|
16530
16860
|
}
|
|
16531
16861
|
return credential;
|
|
@@ -16589,6 +16919,15 @@ function buildResolveAgentStore(options) {
|
|
|
16589
16919
|
return persistenceStore;
|
|
16590
16920
|
};
|
|
16591
16921
|
}
|
|
16922
|
+
function buildResolveSandboxProviderStore(options) {
|
|
16923
|
+
const { persistenceStore } = options;
|
|
16924
|
+
if (!isTrueFoundryModeEnabled2(configuration2)) {
|
|
16925
|
+
return () => persistenceStore;
|
|
16926
|
+
}
|
|
16927
|
+
return (c) => new TrueFoundrySandboxProviderStore({
|
|
16928
|
+
accessToken: requireRequestCredentialToken(c)
|
|
16929
|
+
});
|
|
16930
|
+
}
|
|
16592
16931
|
async function createStandalonePersistence(options) {
|
|
16593
16932
|
const { sqlitePath, logger } = options;
|
|
16594
16933
|
await mkdir5(path6.dirname(sqlitePath), { recursive: true });
|
|
@@ -16630,16 +16969,17 @@ async function createStandalonePersistence(options) {
|
|
|
16630
16969
|
tokenStore,
|
|
16631
16970
|
clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
|
|
16632
16971
|
});
|
|
16972
|
+
const sandboxProviderStore = new SqliteSandboxProviderStore2(db);
|
|
16633
16973
|
return {
|
|
16634
16974
|
sessionStore: new SqliteSessionStore2(db),
|
|
16635
16975
|
sessionMetricsStore: new SqliteSessionMetricsStore2(db),
|
|
16636
16976
|
resolveModelProviderStore: () => modelProviderStore,
|
|
16637
16977
|
resolveMcpServerStore: () => mcpServerStore,
|
|
16638
16978
|
resolveAgentStore: () => agentStore,
|
|
16979
|
+
resolveSandboxProviderStore: () => sandboxProviderStore,
|
|
16639
16980
|
withTransaction: (callback) => db.transaction().execute(callback),
|
|
16640
16981
|
tokenStore,
|
|
16641
16982
|
skillStore: new SqliteSkillStore2(db),
|
|
16642
|
-
sandboxProviderStore: new SqliteSandboxProviderStore2(db),
|
|
16643
16983
|
scheduleStore: new SqliteScheduleStore2(db),
|
|
16644
16984
|
destroyDb: () => db.destroy(),
|
|
16645
16985
|
redis: void 0,
|
|
@@ -16714,10 +17054,12 @@ async function createDistributedPersistence(options) {
|
|
|
16714
17054
|
db,
|
|
16715
17055
|
client: serviceFoundryClient
|
|
16716
17056
|
}),
|
|
17057
|
+
resolveSandboxProviderStore: buildResolveSandboxProviderStore({
|
|
17058
|
+
persistenceStore: new PostgresSandboxProviderStore2(db)
|
|
17059
|
+
}),
|
|
16717
17060
|
withTransaction: (callback) => db.transaction().execute(callback),
|
|
16718
17061
|
tokenStore,
|
|
16719
17062
|
skillStore: new PostgresSkillStore2(db),
|
|
16720
|
-
sandboxProviderStore: new PostgresSandboxProviderStore2(db),
|
|
16721
17063
|
scheduleStore: new PostgresScheduleStore2(db),
|
|
16722
17064
|
destroyDb: () => db.destroy(),
|
|
16723
17065
|
redis: await connectRedis2({ url: redisUrl, logger }),
|
|
@@ -16731,10 +17073,10 @@ async function createServerRuntime(persistence, logger) {
|
|
|
16731
17073
|
resolveModelProviderStore,
|
|
16732
17074
|
resolveMcpServerStore,
|
|
16733
17075
|
resolveAgentStore,
|
|
17076
|
+
resolveSandboxProviderStore,
|
|
16734
17077
|
withTransaction,
|
|
16735
17078
|
tokenStore,
|
|
16736
17079
|
skillStore,
|
|
16737
|
-
sandboxProviderStore,
|
|
16738
17080
|
scheduleStore,
|
|
16739
17081
|
destroyDb,
|
|
16740
17082
|
redis,
|
|
@@ -16783,10 +17125,10 @@ async function createServerRuntime(persistence, logger) {
|
|
|
16783
17125
|
resolveModelProviderStore,
|
|
16784
17126
|
resolveMcpServerStore,
|
|
16785
17127
|
resolveAgentStore,
|
|
17128
|
+
resolveSandboxProviderStore,
|
|
16786
17129
|
withTransaction,
|
|
16787
17130
|
tokenStore,
|
|
16788
17131
|
skillStore,
|
|
16789
|
-
sandboxProviderStore,
|
|
16790
17132
|
scheduleStore,
|
|
16791
17133
|
sessionStore,
|
|
16792
17134
|
sessionMetricsStore,
|