@truefoundry/trueforge 0.2.0-rc.3 → 0.2.0-rc.5
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-N546FNNS-DlWVvctF.js → AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js} +1 -1
- package/dist/_frontend/assets/AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js.br +0 -0
- package/dist/_frontend/assets/AgentCodeSnippets-V5A56M7R-ZCh9CtX_.js.gz +0 -0
- package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js +1 -0
- package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js.br +0 -0
- package/dist/_frontend/assets/AgentMetricChart-GEADURES-CIR5UtB4.js.gz +0 -0
- package/dist/_frontend/assets/{AgentOverview-VF74XC7I-DuR4GDFb.js → AgentOverview-NPC4P2EY-Z0AslRUd.js} +1 -1
- package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js.br +0 -0
- package/dist/_frontend/assets/AgentOverview-NPC4P2EY-Z0AslRUd.js.gz +0 -0
- package/dist/_frontend/assets/{AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js → AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js} +1 -1
- package/dist/_frontend/assets/AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-UUXOJXTC-Nk5ZgtJk.js.gz +0 -0
- package/dist/_frontend/assets/{AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js → AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js} +1 -1
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-FIAQCYJC-TBWekOBI.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js +1 -0
- package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js.br +0 -0
- package/dist/_frontend/assets/AgentSessions-WHODEG2M-OzQblCn4.js.gz +0 -0
- package/dist/_frontend/assets/{ConnectorSettings-R5VEP7BO-Cvdqimeu.js → ConnectorSettings-QTAI4TQX-PySj_xEm.js} +1 -1
- package/dist/_frontend/assets/ConnectorSettings-QTAI4TQX-PySj_xEm.js.br +0 -0
- package/dist/_frontend/assets/ConnectorSettings-QTAI4TQX-PySj_xEm.js.gz +0 -0
- package/dist/_frontend/assets/{DockLayout-F44RWGEY-DVcqWNpi.js → DockLayout-TATYU5SV-DAuT7yes.js} +1 -1
- package/dist/_frontend/assets/{DrawerLayout-SQ323AVM-CrsDJpVR.js → DrawerLayout-DXHNV33K-BP-6TUEf.js} +2 -2
- package/dist/_frontend/assets/DrawerLayout-DXHNV33K-BP-6TUEf.js.br +0 -0
- package/dist/_frontend/assets/DrawerLayout-DXHNV33K-BP-6TUEf.js.gz +0 -0
- package/dist/_frontend/assets/{ModelSettings-6QLS63HM-B0omK7y_.js → ModelSettings-UWTBHQRG-L5KYrHBM.js} +1 -1
- package/dist/_frontend/assets/ModelSettings-UWTBHQRG-L5KYrHBM.js.br +0 -0
- package/dist/_frontend/assets/ModelSettings-UWTBHQRG-L5KYrHBM.js.gz +0 -0
- package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js +1 -0
- package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js.br +0 -0
- package/dist/_frontend/assets/SandboxSettings-BITQONS3-COVuckfo.js.gz +0 -0
- package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js +1 -0
- package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js.br +0 -0
- package/dist/_frontend/assets/SchedulesPage-JIUWNYUH-5f3ROPme.js.gz +0 -0
- package/dist/_frontend/assets/{SettingsBuilder-GISAH2WU-2fVa9yeg.js → SettingsBuilder-3OA4UCIM-AN2PJd1q.js} +2 -2
- package/dist/_frontend/assets/SettingsBuilder-3OA4UCIM-AN2PJd1q.js.br +0 -0
- package/dist/_frontend/assets/SettingsBuilder-3OA4UCIM-AN2PJd1q.js.gz +0 -0
- package/dist/_frontend/assets/{ShellRouteSync-EN33DUQ7-C280D67g.js → ShellRouteSync-J74MV23Q-CDk4uzrR.js} +1 -1
- package/dist/_frontend/assets/ShellRouteSync-J74MV23Q-CDk4uzrR.js.br +0 -0
- package/dist/_frontend/assets/ShellRouteSync-J74MV23Q-CDk4uzrR.js.gz +0 -0
- package/dist/_frontend/assets/{SidebarLayout-35K4AKTC-0-Mjo6gf.js → SidebarLayout-EQXQPYIU-zWCTPIcp.js} +2 -2
- package/dist/_frontend/assets/SidebarLayout-EQXQPYIU-zWCTPIcp.js.br +0 -0
- package/dist/_frontend/assets/SidebarLayout-EQXQPYIU-zWCTPIcp.js.gz +0 -0
- package/dist/_frontend/assets/{SkillSettings-JSX2BTII-BriJH4Oj.js → SkillSettings-KQ6GQ7JW-oZVHsKV_.js} +1 -1
- package/dist/_frontend/assets/SkillSettings-KQ6GQ7JW-oZVHsKV_.js.br +0 -0
- package/dist/_frontend/assets/SkillSettings-KQ6GQ7JW-oZVHsKV_.js.gz +0 -0
- package/dist/_frontend/assets/TrueForgeUIWithRouter-R3UXQZRY-wD0P6NXT.js +1 -0
- package/dist/_frontend/assets/{WidgetLayout-RKBSN2FZ-u6iVYu3w.js → WidgetLayout-YWZTYFZL-BgYVWW8O.js} +1 -1
- package/dist/_frontend/assets/WidgetLayout-YWZTYFZL-BgYVWW8O.js.br +0 -0
- package/dist/_frontend/assets/WidgetLayout-YWZTYFZL-BgYVWW8O.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-73FQVITT-mgvTPDmd.js → chunk-4MCIDE2C-ClJFqC75.js} +1 -1
- package/dist/_frontend/assets/chunk-4MCIDE2C-ClJFqC75.js.br +0 -0
- package/dist/_frontend/assets/chunk-4MCIDE2C-ClJFqC75.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-62JRHF6Z-DYrEQoq5.js → chunk-62JRHF6Z-CXLsU_my.js} +1 -1
- package/dist/_frontend/assets/chunk-62JRHF6Z-CXLsU_my.js.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-CXLsU_my.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-LUG7E6BL-QKvrInc2.js → chunk-7NYDADYN-_y_WJnHd.js} +1 -1
- package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js.br +0 -0
- package/dist/_frontend/assets/chunk-7NYDADYN-_y_WJnHd.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-GIPFF6FZ-DPTdcXQj.js → chunk-ZZB3JIBQ-EN4V28Ji.js} +2 -2
- package/dist/_frontend/assets/chunk-ZZB3JIBQ-EN4V28Ji.js.br +0 -0
- package/dist/_frontend/assets/chunk-ZZB3JIBQ-EN4V28Ji.js.gz +0 -0
- package/dist/_frontend/assets/{cssMode-BNfxrwWp.js → cssMode-Dk1ChNt4.js} +1 -1
- package/dist/_frontend/assets/cssMode-Dk1ChNt4.js.br +0 -0
- package/dist/_frontend/assets/cssMode-Dk1ChNt4.js.gz +0 -0
- package/dist/_frontend/assets/{freemarker2-ClbLzW-k.js → freemarker2-D_Yi-Euz.js} +1 -1
- package/dist/_frontend/assets/freemarker2-D_Yi-Euz.js.br +0 -0
- package/dist/_frontend/assets/freemarker2-D_Yi-Euz.js.gz +0 -0
- package/dist/_frontend/assets/{handlebars-5nE6yTDt.js → handlebars-Cm_UQxos.js} +1 -1
- package/dist/_frontend/assets/handlebars-Cm_UQxos.js.br +0 -0
- package/dist/_frontend/assets/handlebars-Cm_UQxos.js.gz +0 -0
- package/dist/_frontend/assets/{html-BZRf7Zhg.js → html-BIx_CMMA.js} +1 -1
- package/dist/_frontend/assets/html-BIx_CMMA.js.br +0 -0
- package/dist/_frontend/assets/html-BIx_CMMA.js.gz +0 -0
- package/dist/_frontend/assets/{htmlMode-C6O73C_r.js → htmlMode-D7eeA6bm.js} +1 -1
- package/dist/_frontend/assets/htmlMode-D7eeA6bm.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-D7eeA6bm.js.gz +0 -0
- package/dist/_frontend/assets/{index-BBGLYdJn.css → index-B01pXqvC.css} +1 -1
- package/dist/_frontend/assets/index-B01pXqvC.css.br +0 -0
- package/dist/_frontend/assets/{index-BBGLYdJn.css.gz → index-B01pXqvC.css.gz} +0 -0
- package/dist/_frontend/assets/{index-DBjak9Sg.js → index-BJUe77Ib.js} +3 -3
- package/dist/_frontend/assets/index-BJUe77Ib.js.br +0 -0
- package/dist/_frontend/assets/index-BJUe77Ib.js.gz +0 -0
- package/dist/_frontend/assets/index-Y_4XXAao.js +933 -0
- package/dist/_frontend/assets/index-Y_4XXAao.js.br +0 -0
- package/dist/_frontend/assets/index-Y_4XXAao.js.gz +0 -0
- package/dist/_frontend/assets/{index-D0Yf366e.js → index-uWXj7DW5.js} +1 -1
- package/dist/_frontend/assets/index-uWXj7DW5.js.br +0 -0
- package/dist/_frontend/assets/index-uWXj7DW5.js.gz +0 -0
- package/dist/_frontend/assets/{javascript-CrSAQdU4.js → javascript-CHojKZO8.js} +1 -1
- package/dist/_frontend/assets/{jsonMode-Dal25yu2.js → jsonMode-BTk9mIUo.js} +1 -1
- package/dist/_frontend/assets/jsonMode-BTk9mIUo.js.br +0 -0
- package/dist/_frontend/assets/jsonMode-BTk9mIUo.js.gz +0 -0
- package/dist/_frontend/assets/{liquid-Ci7gjLGv.js → liquid-M5ngFTv5.js} +1 -1
- package/dist/_frontend/assets/liquid-M5ngFTv5.js.br +0 -0
- package/dist/_frontend/assets/liquid-M5ngFTv5.js.gz +0 -0
- package/dist/_frontend/assets/{lspLanguageFeatures-rM-QiA57.js → lspLanguageFeatures-jPhJA8WX.js} +1 -1
- package/dist/_frontend/assets/lspLanguageFeatures-jPhJA8WX.js.br +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-jPhJA8WX.js.gz +0 -0
- package/dist/_frontend/assets/{mdx-J3rSuJw4.js → mdx-DmyHsr0E.js} +1 -1
- package/dist/_frontend/assets/mdx-DmyHsr0E.js.br +0 -0
- package/dist/_frontend/assets/mdx-DmyHsr0E.js.gz +0 -0
- package/dist/_frontend/assets/{python-BSpXGEco.js → python-BRFA9b-I.js} +1 -1
- package/dist/_frontend/assets/python-BRFA9b-I.js.br +0 -0
- package/dist/_frontend/assets/python-BRFA9b-I.js.gz +0 -0
- package/dist/_frontend/assets/{razor-DLV1uhEc.js → razor-CYsS4Kjw.js} +1 -1
- package/dist/_frontend/assets/razor-CYsS4Kjw.js.br +0 -0
- package/dist/_frontend/assets/razor-CYsS4Kjw.js.gz +0 -0
- package/dist/_frontend/assets/{tsMode-CQqRu3mP.js → tsMode-COQtB6OT.js} +1 -1
- package/dist/_frontend/assets/tsMode-COQtB6OT.js.br +0 -0
- package/dist/_frontend/assets/tsMode-COQtB6OT.js.gz +0 -0
- package/dist/_frontend/assets/{typescript-BExfm66c.js → typescript-B3uUksf0.js} +1 -1
- package/dist/_frontend/assets/typescript-B3uUksf0.js.br +0 -0
- package/dist/_frontend/assets/typescript-B3uUksf0.js.gz +0 -0
- package/dist/_frontend/assets/{workers-Cn25A5Lb.js → workers-CgLq606Q.js} +1 -1
- package/dist/_frontend/assets/workers-CgLq606Q.js.br +0 -0
- package/dist/_frontend/assets/workers-CgLq606Q.js.gz +0 -0
- package/dist/_frontend/assets/{xml-D2IDD-hb.js → xml-YO228FLn.js} +1 -1
- package/dist/_frontend/assets/xml-YO228FLn.js.br +0 -0
- package/dist/_frontend/assets/xml-YO228FLn.js.gz +0 -0
- package/dist/_frontend/assets/{yaml-CY4c2A0Y.js → yaml-CirMKB9x.js} +1 -1
- package/dist/_frontend/assets/yaml-CirMKB9x.js.br +0 -0
- package/dist/_frontend/assets/yaml-CirMKB9x.js.gz +0 -0
- package/dist/_frontend/index.html +2 -2
- package/dist/controller-main.js +101 -108
- package/dist/controller-main.js.map +1 -1
- package/dist/main.js +471 -282
- package/dist/main.js.map +1 -1
- package/package.json +2 -2
- package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.br +0 -0
- package/dist/_frontend/assets/AgentCodeSnippets-N546FNNS-DlWVvctF.js.gz +0 -0
- package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js +0 -1
- package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.br +0 -0
- package/dist/_frontend/assets/AgentMetricChart-YWJYVYYA-DTDXcVgE.js.gz +0 -0
- package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.br +0 -0
- package/dist/_frontend/assets/AgentOverview-VF74XC7I-DuR4GDFb.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js +0 -1
- package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.br +0 -0
- package/dist/_frontend/assets/AgentSessions-4IVX2SGD-Bf2N2ega.js.gz +0 -0
- package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.br +0 -0
- package/dist/_frontend/assets/ConnectorSettings-R5VEP7BO-Cvdqimeu.js.gz +0 -0
- package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.br +0 -0
- package/dist/_frontend/assets/DrawerLayout-SQ323AVM-CrsDJpVR.js.gz +0 -0
- package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.br +0 -0
- package/dist/_frontend/assets/ModelSettings-6QLS63HM-B0omK7y_.js.gz +0 -0
- package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js +0 -1
- package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.br +0 -0
- package/dist/_frontend/assets/SandboxSettings-OLKDXIQS-O1pf1zn0.js.gz +0 -0
- package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js +0 -1
- package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.br +0 -0
- package/dist/_frontend/assets/SchedulesPage-TMOTK6DR-D9JlkZFv.js.gz +0 -0
- package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.br +0 -0
- package/dist/_frontend/assets/SettingsBuilder-GISAH2WU-2fVa9yeg.js.gz +0 -0
- package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.br +0 -0
- package/dist/_frontend/assets/ShellRouteSync-EN33DUQ7-C280D67g.js.gz +0 -0
- package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.br +0 -0
- package/dist/_frontend/assets/SidebarLayout-35K4AKTC-0-Mjo6gf.js.gz +0 -0
- package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.br +0 -0
- package/dist/_frontend/assets/SkillSettings-JSX2BTII-BriJH4Oj.js.gz +0 -0
- package/dist/_frontend/assets/TrueForgeUIWithRouter-6VCR7ES3-CtIaYnA8.js +0 -1
- package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.br +0 -0
- package/dist/_frontend/assets/WidgetLayout-RKBSN2FZ-u6iVYu3w.js.gz +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-DYrEQoq5.js.gz +0 -0
- package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.br +0 -0
- package/dist/_frontend/assets/chunk-73FQVITT-mgvTPDmd.js.gz +0 -0
- package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.br +0 -0
- package/dist/_frontend/assets/chunk-GIPFF6FZ-DPTdcXQj.js.gz +0 -0
- package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.br +0 -0
- package/dist/_frontend/assets/chunk-LUG7E6BL-QKvrInc2.js.gz +0 -0
- package/dist/_frontend/assets/cssMode-BNfxrwWp.js.br +0 -0
- package/dist/_frontend/assets/cssMode-BNfxrwWp.js.gz +0 -0
- package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.br +0 -0
- package/dist/_frontend/assets/freemarker2-ClbLzW-k.js.gz +0 -0
- package/dist/_frontend/assets/handlebars-5nE6yTDt.js.br +0 -0
- package/dist/_frontend/assets/handlebars-5nE6yTDt.js.gz +0 -0
- package/dist/_frontend/assets/html-BZRf7Zhg.js.br +0 -0
- package/dist/_frontend/assets/html-BZRf7Zhg.js.gz +0 -0
- package/dist/_frontend/assets/htmlMode-C6O73C_r.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-C6O73C_r.js.gz +0 -0
- package/dist/_frontend/assets/index-BBGLYdJn.css.br +0 -0
- package/dist/_frontend/assets/index-D0Yf366e.js.br +0 -0
- package/dist/_frontend/assets/index-D0Yf366e.js.gz +0 -0
- package/dist/_frontend/assets/index-DBjak9Sg.js.br +0 -0
- package/dist/_frontend/assets/index-DBjak9Sg.js.gz +0 -0
- package/dist/_frontend/assets/index-XpZpj5Rl.js +0 -933
- package/dist/_frontend/assets/index-XpZpj5Rl.js.br +0 -0
- package/dist/_frontend/assets/index-XpZpj5Rl.js.gz +0 -0
- package/dist/_frontend/assets/jsonMode-Dal25yu2.js.br +0 -0
- package/dist/_frontend/assets/jsonMode-Dal25yu2.js.gz +0 -0
- package/dist/_frontend/assets/liquid-Ci7gjLGv.js.br +0 -0
- package/dist/_frontend/assets/liquid-Ci7gjLGv.js.gz +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.br +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-rM-QiA57.js.gz +0 -0
- package/dist/_frontend/assets/mdx-J3rSuJw4.js.br +0 -0
- package/dist/_frontend/assets/mdx-J3rSuJw4.js.gz +0 -0
- package/dist/_frontend/assets/python-BSpXGEco.js.br +0 -0
- package/dist/_frontend/assets/python-BSpXGEco.js.gz +0 -0
- package/dist/_frontend/assets/razor-DLV1uhEc.js.br +0 -0
- package/dist/_frontend/assets/razor-DLV1uhEc.js.gz +0 -0
- package/dist/_frontend/assets/tsMode-CQqRu3mP.js.br +0 -0
- package/dist/_frontend/assets/tsMode-CQqRu3mP.js.gz +0 -0
- package/dist/_frontend/assets/typescript-BExfm66c.js.br +0 -0
- package/dist/_frontend/assets/typescript-BExfm66c.js.gz +0 -0
- package/dist/_frontend/assets/workers-Cn25A5Lb.js.br +0 -0
- package/dist/_frontend/assets/workers-Cn25A5Lb.js.gz +0 -0
- package/dist/_frontend/assets/xml-D2IDD-hb.js.br +0 -0
- package/dist/_frontend/assets/xml-D2IDD-hb.js.gz +0 -0
- package/dist/_frontend/assets/yaml-CY4c2A0Y.js.br +0 -0
- package/dist/_frontend/assets/yaml-CY4c2A0Y.js.gz +0 -0
package/dist/main.js
CHANGED
|
@@ -11,6 +11,7 @@ var __export = (target, all) => {
|
|
|
11
11
|
// src/config.ts
|
|
12
12
|
var config_exports = {};
|
|
13
13
|
__export(config_exports, {
|
|
14
|
+
STANDALONE_TRUEFORGE_API_KEY: () => STANDALONE_TRUEFORGE_API_KEY,
|
|
14
15
|
TrueForgeAuthMode: () => TrueForgeAuthMode,
|
|
15
16
|
default: () => config_default,
|
|
16
17
|
getPublicBaseUrl: () => getPublicBaseUrl,
|
|
@@ -281,7 +282,7 @@ function getPublicUiBasePath(config = configuration) {
|
|
|
281
282
|
const path7 = new URL(publicBaseUrl).pathname;
|
|
282
283
|
return path7 === "/" ? "/" : `${path7}/`;
|
|
283
284
|
}
|
|
284
|
-
var DEFAULT_PORT, DEFAULT_HOST, DEFAULT_MAX_REQUEST_BODY_BYTES, PACKAGE_ROOT, LOCAL_EXECUTOR_ID, ENV_PATHS_APP_NAME, DEFAULT_POSTGRES_USER, DEFAULT_POSTGRES_PASSWORD, DEFAULT_POSTGRES_DB, DEFAULT_POSTGRES_HOST, DEFAULT_POSTGRES_PORT, DEFAULT_REDIS_URL, DEFAULT_OIDC_USER_REFERENCE_CLAIM, DEFAULT_OIDC_USER_DISPLAY_NAME_CLAIM, DEFAULT_OIDC_USER_ROLE_CLAIM, DEFAULT_OIDC_ADMIN_ROLE_VALUE, DEFAULT_OIDC_SCOPES, serverExecutionTimeoutSeconds, standalone, appDataDirSuffix, appDataDir, port, host, shared, configuration, TrueForgeAuthMode, config_default;
|
|
285
|
+
var DEFAULT_PORT, DEFAULT_HOST, DEFAULT_MAX_REQUEST_BODY_BYTES, PACKAGE_ROOT, LOCAL_EXECUTOR_ID, ENV_PATHS_APP_NAME, DEFAULT_POSTGRES_USER, DEFAULT_POSTGRES_PASSWORD, DEFAULT_POSTGRES_DB, DEFAULT_POSTGRES_HOST, DEFAULT_POSTGRES_PORT, DEFAULT_REDIS_URL, STANDALONE_TRUEFORGE_API_KEY, DEFAULT_OIDC_USER_REFERENCE_CLAIM, DEFAULT_OIDC_USER_DISPLAY_NAME_CLAIM, DEFAULT_OIDC_USER_ROLE_CLAIM, DEFAULT_OIDC_ADMIN_ROLE_VALUE, DEFAULT_OIDC_SCOPES, serverExecutionTimeoutSeconds, standalone, appDataDirSuffix, appDataDir, port, host, shared, configuration, TrueForgeAuthMode, config_default;
|
|
285
286
|
var init_config = __esm({
|
|
286
287
|
"src/config.ts"() {
|
|
287
288
|
"use strict";
|
|
@@ -297,6 +298,7 @@ var init_config = __esm({
|
|
|
297
298
|
DEFAULT_POSTGRES_HOST = "localhost";
|
|
298
299
|
DEFAULT_POSTGRES_PORT = 5432;
|
|
299
300
|
DEFAULT_REDIS_URL = "redis://localhost:6379";
|
|
301
|
+
STANDALONE_TRUEFORGE_API_KEY = "trueforge-standalone";
|
|
300
302
|
DEFAULT_OIDC_USER_REFERENCE_CLAIM = "sub";
|
|
301
303
|
DEFAULT_OIDC_USER_DISPLAY_NAME_CLAIM = "name";
|
|
302
304
|
DEFAULT_OIDC_USER_ROLE_CLAIM = "groups";
|
|
@@ -392,6 +394,7 @@ var init_config = __esm({
|
|
|
392
394
|
}),
|
|
393
395
|
PUBLIC_BASE_URL: parsePublicBaseUrl(getEnv("PUBLIC_BASE_URL", { defaultValue: "" })),
|
|
394
396
|
SERVER_URL: getEnv("SERVER_URL", { defaultValue: `http://localhost:${String(port)}` }) ?? `http://localhost:${String(port)}`,
|
|
397
|
+
TRUEFORGE_API_KEY: standalone ? getEnv("TRUEFORGE_API_KEY", { defaultValue: STANDALONE_TRUEFORGE_API_KEY }) ?? STANDALONE_TRUEFORGE_API_KEY : getEnv("TRUEFORGE_API_KEY", { required: true }) ?? "",
|
|
395
398
|
TRUEFORGE_MTLS_ENABLED: parseBoolean({
|
|
396
399
|
envKey: "TRUEFORGE_MTLS_ENABLED",
|
|
397
400
|
raw: getEnv("TRUEFORGE_MTLS_ENABLED"),
|
|
@@ -499,6 +502,9 @@ var init_config = __esm({
|
|
|
499
502
|
}
|
|
500
503
|
}
|
|
501
504
|
}
|
|
505
|
+
if (!configuration.STANDALONE && configuration.TRUEFORGE_API_KEY.trim() === "") {
|
|
506
|
+
throw new Error("TRUEFORGE_API_KEY must not be empty when STANDALONE=false.");
|
|
507
|
+
}
|
|
502
508
|
config_default = configuration;
|
|
503
509
|
}
|
|
504
510
|
});
|
|
@@ -3860,7 +3866,7 @@ var init_mcpServerStore = __esm({
|
|
|
3860
3866
|
// src/schemas/schedule.ts
|
|
3861
3867
|
import { z as z24 } from "@hono/zod-openapi";
|
|
3862
3868
|
import { CreatedBySubjectSchema as CreatedBySubjectSchema4, TokenPaginationSchema } from "@truefoundry/trueforge-core/agent-session";
|
|
3863
|
-
var SCHEDULE_MIN_INTERVAL_SECONDS, CRON_FIELD, InvalidCronError, CronExpressionSchema, TimezoneSchema, IsoTimestamp, NullableIsoTimestamp, ScheduleTaskSchema, ScheduleStatusSchema, ScheduleManifestObjectSchema, ScheduleManifestSchema, ScheduleSchema, CreateScheduleRequestSchema, UpdateScheduleRequestSchema, GetScheduleResponseSchema, ListSchedulesResponseSchema, DeleteScheduleResponseSchema, ScheduleRunStatusSchema, ScheduleRunSchema, ListScheduleRunsResponseSchema, CreateScheduleRunRequestSchema, CreateScheduleRunResponseSchema;
|
|
3869
|
+
var SCHEDULE_MIN_INTERVAL_SECONDS, CRON_FIELD, InvalidCronError, CronExpressionSchema, TimezoneSchema, IsoTimestamp, NullableIsoTimestamp, ScheduleTaskSchema, ScheduleStatusSchema, ScheduleManifestObjectSchema, ScheduleManifestSchema, ScheduleSchema, CreateScheduleRequestSchema, UpdateScheduleRequestSchema, GetScheduleResponseSchema, ListSchedulesResponseSchema, DeleteScheduleResponseSchema, ScheduleRunStatusSchema, ScheduleRunSchema, ListScheduleRunsResponseSchema, CreateScheduleRunRequestSchema, CreateScheduleRunResponseSchema, ExecuteScheduleRunRequestSchema;
|
|
3864
3870
|
var init_schedule = __esm({
|
|
3865
3871
|
"src/schemas/schedule.ts"() {
|
|
3866
3872
|
"use strict";
|
|
@@ -3941,6 +3947,9 @@ var init_schedule = __esm({
|
|
|
3941
3947
|
schedule_id: z24.string().min(1).max(64).describe("Immutable schedule identifier.")
|
|
3942
3948
|
}).strict().describe("Trigger an immediate run for the given schedule. The task is taken from the schedule manifest.").openapi("CreateScheduleRunRequest");
|
|
3943
3949
|
CreateScheduleRunResponseSchema = z24.object({ data: ScheduleRunSchema }).openapi("CreateScheduleRunResponse");
|
|
3950
|
+
ExecuteScheduleRunRequestSchema = z24.object({
|
|
3951
|
+
schedule_run_id: z24.string().min(1).max(64).describe("Immutable schedule run identifier.")
|
|
3952
|
+
}).strict().openapi("ExecuteScheduleRunRequest");
|
|
3944
3953
|
}
|
|
3945
3954
|
});
|
|
3946
3955
|
|
|
@@ -6981,6 +6990,11 @@ var init_SqliteScheduleStore = __esm({
|
|
|
6981
6990
|
const row = await db.selectFrom("schedule_run").select(runColumns).where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).executeTakeFirst();
|
|
6982
6991
|
return row === void 0 ? void 0 : toRunRecord(row);
|
|
6983
6992
|
}
|
|
6993
|
+
async getRunById(input, transaction) {
|
|
6994
|
+
const db = transaction ?? this.#db;
|
|
6995
|
+
const row = await db.selectFrom("schedule_run").select(runColumns).where("id", "=", input.id).executeTakeFirst();
|
|
6996
|
+
return row === void 0 ? void 0 : toRunRecord(row);
|
|
6997
|
+
}
|
|
6984
6998
|
async getScheduledRunFor(input, transaction) {
|
|
6985
6999
|
const db = transaction ?? this.#db;
|
|
6986
7000
|
const row = await db.selectFrom("schedule_run").select(runColumns).where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).where("status", "=", "scheduled").executeTakeFirst();
|
|
@@ -7872,6 +7886,11 @@ var init_PostgresScheduleStore = __esm({
|
|
|
7872
7886
|
const row = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("id", "=", input.id).executeTakeFirst();
|
|
7873
7887
|
return row === void 0 ? void 0 : toRunRecord2(row);
|
|
7874
7888
|
}
|
|
7889
|
+
async getRunById(input, transaction) {
|
|
7890
|
+
const db = transaction ?? this.#db;
|
|
7891
|
+
const row = await db.selectFrom("schedule_run").selectAll().where("id", "=", input.id).executeTakeFirst();
|
|
7892
|
+
return row === void 0 ? void 0 : toRunRecord2(row);
|
|
7893
|
+
}
|
|
7875
7894
|
async getScheduledRunFor(input, transaction) {
|
|
7876
7895
|
const db = transaction ?? this.#db;
|
|
7877
7896
|
const row = await db.selectFrom("schedule_run").selectAll().where("tenant_id", "=", input.tenant_id).where("schedule_id", "=", input.schedule_id).where("status", "=", "scheduled").executeTakeFirst();
|
|
@@ -7967,7 +7986,7 @@ import { swaggerUI } from "@hono/swagger-ui";
|
|
|
7967
7986
|
import { OpenAPIHono as OpenAPIHono18, z as z35 } from "@hono/zod-openapi";
|
|
7968
7987
|
import { extractErrorLogFields as extractErrorLogFields8 } from "@truefoundry/trueforge-core/core";
|
|
7969
7988
|
import { bodyLimit } from "hono/body-limit";
|
|
7970
|
-
import { HTTPException as
|
|
7989
|
+
import { HTTPException as HTTPException10 } from "hono/http-exception";
|
|
7971
7990
|
|
|
7972
7991
|
// src/apis/agentImport.ts
|
|
7973
7992
|
init_agentStore();
|
|
@@ -9068,6 +9087,87 @@ import { OpenAPIHono as OpenAPIHono2 } from "@hono/zod-openapi";
|
|
|
9068
9087
|
|
|
9069
9088
|
// src/auth/identity.ts
|
|
9070
9089
|
init_config();
|
|
9090
|
+
|
|
9091
|
+
// src/truefoundry/accessToken.ts
|
|
9092
|
+
import { HTTPException as HTTPException4 } from "hono/http-exception";
|
|
9093
|
+
|
|
9094
|
+
// src/truefoundry/errors.ts
|
|
9095
|
+
import { HTTPException as HTTPException3 } from "hono/http-exception";
|
|
9096
|
+
var AGENT_EXTERNAL_ID_REQUIRED = "Agent is missing a TrueFoundry external id";
|
|
9097
|
+
var TRUEFOUNDRY_MANAGED_STATUS = 424;
|
|
9098
|
+
var TRUEFOUNDRY_MANAGED_MESSAGE = "This resource is managed by TrueFoundry";
|
|
9099
|
+
function requireTrueFoundryAgentExternalId(agent) {
|
|
9100
|
+
if (agent.external_id === null) {
|
|
9101
|
+
throw new HTTPException3(500, { message: AGENT_EXTERNAL_ID_REQUIRED });
|
|
9102
|
+
}
|
|
9103
|
+
return agent.external_id;
|
|
9104
|
+
}
|
|
9105
|
+
function trueFoundryManaged() {
|
|
9106
|
+
throw new HTTPException3(TRUEFOUNDRY_MANAGED_STATUS, { message: TRUEFOUNDRY_MANAGED_MESSAGE });
|
|
9107
|
+
}
|
|
9108
|
+
|
|
9109
|
+
// src/truefoundry/accessToken.ts
|
|
9110
|
+
var accessTokenCache = /* @__PURE__ */ Symbol("truefoundryAccessTokenCache");
|
|
9111
|
+
function createTrueFoundryRequestContext(base) {
|
|
9112
|
+
return { ...base, [accessTokenCache]: /* @__PURE__ */ new Map() };
|
|
9113
|
+
}
|
|
9114
|
+
function isTrueFoundryRequestContext(context) {
|
|
9115
|
+
return accessTokenCache in context;
|
|
9116
|
+
}
|
|
9117
|
+
function asTrueFoundryRequestContext(context) {
|
|
9118
|
+
if (!isTrueFoundryRequestContext(context)) {
|
|
9119
|
+
throw new Error("TrueFoundry request context required for access token resolution");
|
|
9120
|
+
}
|
|
9121
|
+
return context;
|
|
9122
|
+
}
|
|
9123
|
+
function agentAccessToken(input) {
|
|
9124
|
+
const { client, requestContext: context } = input;
|
|
9125
|
+
const agentId = requireTrueFoundryAgentExternalId(input.agent);
|
|
9126
|
+
let pending;
|
|
9127
|
+
return () => {
|
|
9128
|
+
if (pending === void 0) {
|
|
9129
|
+
input.logger.info("Exchanging user context for agent access token", {
|
|
9130
|
+
subject: context.subject.id,
|
|
9131
|
+
agentId
|
|
9132
|
+
});
|
|
9133
|
+
pending = client.vendToken({ subject: context.subject, agentId, tenantName: context.tenant_id }).catch((error) => {
|
|
9134
|
+
pending = void 0;
|
|
9135
|
+
throw error;
|
|
9136
|
+
});
|
|
9137
|
+
}
|
|
9138
|
+
return pending;
|
|
9139
|
+
};
|
|
9140
|
+
}
|
|
9141
|
+
function callerAccessToken(context) {
|
|
9142
|
+
if (context.user_credential === null) {
|
|
9143
|
+
throw new HTTPException4(401, {
|
|
9144
|
+
message: "Authentication token required to list or call TrueFoundry models, MCP servers, skills, and agents"
|
|
9145
|
+
});
|
|
9146
|
+
}
|
|
9147
|
+
const token = context.user_credential;
|
|
9148
|
+
return () => Promise.resolve(token);
|
|
9149
|
+
}
|
|
9150
|
+
function accessTokenForRequest(input) {
|
|
9151
|
+
if (input.agent === void 0) {
|
|
9152
|
+
return callerAccessToken(input.requestContext);
|
|
9153
|
+
}
|
|
9154
|
+
const agentId = requireTrueFoundryAgentExternalId(input.agent);
|
|
9155
|
+
const cache = input.requestContext[accessTokenCache];
|
|
9156
|
+
const existing = cache.get(agentId);
|
|
9157
|
+
if (existing !== void 0) {
|
|
9158
|
+
return existing;
|
|
9159
|
+
}
|
|
9160
|
+
const resolveAgentAccessToken = agentAccessToken({
|
|
9161
|
+
client: input.client,
|
|
9162
|
+
requestContext: input.requestContext,
|
|
9163
|
+
agent: input.agent,
|
|
9164
|
+
logger: input.logger
|
|
9165
|
+
});
|
|
9166
|
+
cache.set(agentId, resolveAgentAccessToken);
|
|
9167
|
+
return resolveAgentAccessToken;
|
|
9168
|
+
}
|
|
9169
|
+
|
|
9170
|
+
// src/auth/identity.ts
|
|
9071
9171
|
var STANDALONE_ADMIN_ROLE = "admin";
|
|
9072
9172
|
var STANDALONE_REQUEST_CONTEXT = {
|
|
9073
9173
|
tenant_id: "default",
|
|
@@ -9100,6 +9200,22 @@ function hasAdminRole(requestContext) {
|
|
|
9100
9200
|
return requestContext.roles.includes(STANDALONE_ADMIN_ROLE);
|
|
9101
9201
|
}
|
|
9102
9202
|
}
|
|
9203
|
+
function requestSubjectFromCreatedBySubject(subject) {
|
|
9204
|
+
return {
|
|
9205
|
+
id: subject.subject_id,
|
|
9206
|
+
type: subject.subject_type,
|
|
9207
|
+
display_name: subject.subject_display_name
|
|
9208
|
+
};
|
|
9209
|
+
}
|
|
9210
|
+
function requestContextFromCreatedBySubject(params) {
|
|
9211
|
+
const base = {
|
|
9212
|
+
tenant_id: params.tenant_id,
|
|
9213
|
+
subject: requestSubjectFromCreatedBySubject(params.created_by_subject),
|
|
9214
|
+
roles: [],
|
|
9215
|
+
user_credential: null
|
|
9216
|
+
};
|
|
9217
|
+
return isTrueFoundryModeEnabled(config_default) ? createTrueFoundryRequestContext(base) : base;
|
|
9218
|
+
}
|
|
9103
9219
|
function createdBySubjectFromRequestContext(ctx) {
|
|
9104
9220
|
return {
|
|
9105
9221
|
subject_id: ctx.subject.id,
|
|
@@ -9329,7 +9445,7 @@ import {
|
|
|
9329
9445
|
Sandbox,
|
|
9330
9446
|
SkillMounter
|
|
9331
9447
|
} from "@truefoundry/trueforge-core/core";
|
|
9332
|
-
import { HTTPException as
|
|
9448
|
+
import { HTTPException as HTTPException5 } from "hono/http-exception";
|
|
9333
9449
|
import { join as join5 } from "path";
|
|
9334
9450
|
|
|
9335
9451
|
// src/sandbox/providerUtils.ts
|
|
@@ -9515,7 +9631,7 @@ async function getModelDetails({
|
|
|
9515
9631
|
}) {
|
|
9516
9632
|
const parsed = parseModelFqn(name);
|
|
9517
9633
|
if (parsed === void 0) {
|
|
9518
|
-
throw new
|
|
9634
|
+
throw new HTTPException5(422, {
|
|
9519
9635
|
message: `Model name must be a fully qualified "provider/model": ${name}`
|
|
9520
9636
|
});
|
|
9521
9637
|
}
|
|
@@ -9525,13 +9641,13 @@ async function getModelDetails({
|
|
|
9525
9641
|
model_name: parsed.modelName
|
|
9526
9642
|
});
|
|
9527
9643
|
if (provider === void 0) {
|
|
9528
|
-
throw new
|
|
9644
|
+
throw new HTTPException5(422, {
|
|
9529
9645
|
message: `Unknown model "${name}" \u2014 provider not configured`
|
|
9530
9646
|
});
|
|
9531
9647
|
}
|
|
9532
9648
|
const model = provider.manifest.models.find((entry) => entry.name === parsed.modelName);
|
|
9533
9649
|
if (model === void 0) {
|
|
9534
|
-
throw new
|
|
9650
|
+
throw new HTTPException5(422, {
|
|
9535
9651
|
message: `Unknown model "${name}" \u2014 not configured on provider`
|
|
9536
9652
|
});
|
|
9537
9653
|
}
|
|
@@ -9626,7 +9742,7 @@ async function validateAgentSpec({
|
|
|
9626
9742
|
if (reasoningEffort !== void 0) {
|
|
9627
9743
|
const efforts = resolved.reasoningEfforts;
|
|
9628
9744
|
if (!efforts?.some((effort) => effort === reasoningEffort)) {
|
|
9629
|
-
throw new
|
|
9745
|
+
throw new HTTPException5(422, {
|
|
9630
9746
|
message: efforts ? `Reasoning effort "${reasoningEffort}" is not supported by model "${spec.model.name}"` : `Model "${spec.model.name}" does not support configurable reasoning effort`
|
|
9631
9747
|
});
|
|
9632
9748
|
}
|
|
@@ -9642,7 +9758,7 @@ async function validateAgentSpec({
|
|
|
9642
9758
|
);
|
|
9643
9759
|
const unknown = requestedMcpServers.find((server) => !configuredNames.has(server.name));
|
|
9644
9760
|
if (unknown !== void 0) {
|
|
9645
|
-
throw new
|
|
9761
|
+
throw new HTTPException5(422, {
|
|
9646
9762
|
message: `Unknown MCP server "${unknown.name}" \u2014 not configured`
|
|
9647
9763
|
});
|
|
9648
9764
|
}
|
|
@@ -9656,7 +9772,7 @@ async function validateAgentSpec({
|
|
|
9656
9772
|
if (wantsSandbox || hasSkills) {
|
|
9657
9773
|
const record = await sandboxProviderStore.getSandboxProvider(tenant_id);
|
|
9658
9774
|
if (record === void 0 && !isLocalSandboxFallbackEnabled()) {
|
|
9659
|
-
throw new
|
|
9775
|
+
throw new HTTPException5(422, {
|
|
9660
9776
|
message: hasSkills ? "skills require a sandbox provider \u2014 configure via PUT /settings/sandbox-providers" : "sandbox is enabled but no sandbox provider is configured \u2014 PUT /settings/sandbox-providers"
|
|
9661
9777
|
});
|
|
9662
9778
|
}
|
|
@@ -9709,12 +9825,15 @@ async function canReadAgentBoundResource(input) {
|
|
|
9709
9825
|
return managedAgentIds.includes(agent_id);
|
|
9710
9826
|
}
|
|
9711
9827
|
|
|
9828
|
+
// src/apis/agentCodeSnippets.ts
|
|
9829
|
+
init_config();
|
|
9830
|
+
|
|
9712
9831
|
// src/apis/codesnippet-templates/typescript.ts
|
|
9713
9832
|
var typescriptStreamTemplate = `// npm install @truefoundry/trueforge-sdk
|
|
9714
9833
|
import { TrueForge, TrueForgeApi, isEventDelta, mergeEventDelta } from "@truefoundry/trueforge-sdk";
|
|
9715
9834
|
|
|
9716
9835
|
const client = new TrueForge({
|
|
9717
|
-
baseUrl: {{baseUrl}},
|
|
9836
|
+
baseUrl: {{baseUrl}},{{tokenLine}}
|
|
9718
9837
|
});
|
|
9719
9838
|
|
|
9720
9839
|
const { data: session } = await client.sessions.create({
|
|
@@ -9741,7 +9860,7 @@ var typescriptNonStreamTemplate = `// npm install @truefoundry/trueforge-sdk
|
|
|
9741
9860
|
import { TrueForge } from "@truefoundry/trueforge-sdk";
|
|
9742
9861
|
|
|
9743
9862
|
const client = new TrueForge({
|
|
9744
|
-
baseUrl: {{baseUrl}},
|
|
9863
|
+
baseUrl: {{baseUrl}},{{tokenLine}}
|
|
9745
9864
|
});
|
|
9746
9865
|
|
|
9747
9866
|
const { data: session } = await client.sessions.create({
|
|
@@ -9761,10 +9880,12 @@ console.log(latest.state);
|
|
|
9761
9880
|
|
|
9762
9881
|
// src/apis/agentCodeSnippets.ts
|
|
9763
9882
|
var TYPESCRIPT_ICON = "https://assets.production.truefoundry.com/typescript.svg";
|
|
9883
|
+
var TOKEN_LINE = '\n token: "USER_API_KEY",';
|
|
9764
9884
|
function renderSnippetTemplate(template, vars) {
|
|
9765
9885
|
const literals = {
|
|
9766
9886
|
agentName: JSON.stringify(vars.agentName),
|
|
9767
|
-
baseUrl: JSON.stringify(vars.baseUrl)
|
|
9887
|
+
baseUrl: JSON.stringify(vars.baseUrl),
|
|
9888
|
+
tokenLine: vars.includeToken ? TOKEN_LINE : ""
|
|
9768
9889
|
};
|
|
9769
9890
|
return template.replaceAll(/\{\{(\w+)\}\}/g, (match, key) => {
|
|
9770
9891
|
const value = literals[key];
|
|
@@ -9775,6 +9896,8 @@ function renderSnippetTemplate(template, vars) {
|
|
|
9775
9896
|
});
|
|
9776
9897
|
}
|
|
9777
9898
|
function buildAgentCodeSnippets(input) {
|
|
9899
|
+
const includeToken = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
|
|
9900
|
+
const vars = { ...input, includeToken };
|
|
9778
9901
|
return {
|
|
9779
9902
|
base_url: input.baseUrl,
|
|
9780
9903
|
snippets: [
|
|
@@ -9783,8 +9906,8 @@ function buildAgentCodeSnippets(input) {
|
|
|
9783
9906
|
language: "typescript",
|
|
9784
9907
|
icon: TYPESCRIPT_ICON,
|
|
9785
9908
|
sample_code: {
|
|
9786
|
-
stream: renderSnippetTemplate(typescriptStreamTemplate,
|
|
9787
|
-
non_stream: renderSnippetTemplate(typescriptNonStreamTemplate,
|
|
9909
|
+
stream: renderSnippetTemplate(typescriptStreamTemplate, vars),
|
|
9910
|
+
non_stream: renderSnippetTemplate(typescriptNonStreamTemplate, vars)
|
|
9788
9911
|
}
|
|
9789
9912
|
}
|
|
9790
9913
|
]
|
|
@@ -10017,7 +10140,7 @@ function readAccessTokenCookie(params) {
|
|
|
10017
10140
|
|
|
10018
10141
|
// src/auth/middleware.ts
|
|
10019
10142
|
init_config();
|
|
10020
|
-
import { HTTPException as
|
|
10143
|
+
import { HTTPException as HTTPException6 } from "hono/http-exception";
|
|
10021
10144
|
import { jwtVerify } from "jose";
|
|
10022
10145
|
|
|
10023
10146
|
// src/auth/emailAllowlist.ts
|
|
@@ -10269,20 +10392,29 @@ function createAdminAuthMiddleware(authenticator) {
|
|
|
10269
10392
|
return async (c, next) => {
|
|
10270
10393
|
const requestContext = await authenticator.authenticate(c);
|
|
10271
10394
|
if (!hasAdminRole(requestContext)) {
|
|
10272
|
-
throw new
|
|
10395
|
+
throw new HTTPException6(403, { message: "Admin access required" });
|
|
10273
10396
|
}
|
|
10274
10397
|
c.set("request_context", requestContext);
|
|
10275
10398
|
return next();
|
|
10276
10399
|
};
|
|
10277
10400
|
}
|
|
10401
|
+
function createApiKeyAuthMiddleware(apiKey) {
|
|
10402
|
+
return async (c, next) => {
|
|
10403
|
+
const token = readBearerToken(c);
|
|
10404
|
+
if (token === void 0 || token !== apiKey) {
|
|
10405
|
+
throw new HTTPException6(401, { message: "Invalid service credential" });
|
|
10406
|
+
}
|
|
10407
|
+
return next();
|
|
10408
|
+
};
|
|
10409
|
+
}
|
|
10278
10410
|
var truefoundryAdminMiddleware = async (c, next) => {
|
|
10279
10411
|
const token = extractRequestToken(c);
|
|
10280
10412
|
if (config_default.STANDALONE) {
|
|
10281
|
-
throw new
|
|
10413
|
+
throw new HTTPException6(403, { message: "Service API key required" });
|
|
10282
10414
|
}
|
|
10283
10415
|
const apiKey = config_default.TRUEFOUNDRY_API_KEY;
|
|
10284
10416
|
if (apiKey === void 0 || token === void 0 || token !== apiKey) {
|
|
10285
|
-
throw new
|
|
10417
|
+
throw new HTTPException6(403, { message: "Service API key required" });
|
|
10286
10418
|
}
|
|
10287
10419
|
c.set("request_context", {
|
|
10288
10420
|
tenant_id: "system",
|
|
@@ -11434,7 +11566,7 @@ function createMcpOAuthRouter(deps) {
|
|
|
11434
11566
|
// src/apis/mcpServers.ts
|
|
11435
11567
|
import { OpenAPIHono as OpenAPIHono7 } from "@hono/zod-openapi";
|
|
11436
11568
|
import { extractErrorLogFields as extractErrorLogFields5, isAuthRequired, McpConnectionError as McpConnectionError4, RemoteMCP } from "@truefoundry/trueforge-core/core";
|
|
11437
|
-
import { HTTPException as
|
|
11569
|
+
import { HTTPException as HTTPException7 } from "hono/http-exception";
|
|
11438
11570
|
init_config();
|
|
11439
11571
|
init_mcpServerStore();
|
|
11440
11572
|
|
|
@@ -12009,7 +12141,7 @@ function createMcpServersRouter(deps) {
|
|
|
12009
12141
|
});
|
|
12010
12142
|
return c.json(authStatus, 200);
|
|
12011
12143
|
} catch (error) {
|
|
12012
|
-
if (error instanceof
|
|
12144
|
+
if (error instanceof HTTPException7) {
|
|
12013
12145
|
throw error;
|
|
12014
12146
|
}
|
|
12015
12147
|
if (error instanceof McpServerNotFoundError) {
|
|
@@ -12289,10 +12421,14 @@ function createPermissionsRouter(deps) {
|
|
|
12289
12421
|
|
|
12290
12422
|
// src/apis/schedules.ts
|
|
12291
12423
|
import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
|
|
12292
|
-
import {
|
|
12424
|
+
import {
|
|
12425
|
+
InvalidPageTokenError
|
|
12426
|
+
} from "@truefoundry/trueforge-core/agent-session";
|
|
12293
12427
|
|
|
12294
12428
|
// src/controller/scheduleDispatch.ts
|
|
12429
|
+
init_config();
|
|
12295
12430
|
init_scheduleStore();
|
|
12431
|
+
import { TrueForge } from "@truefoundry/trueforge-sdk";
|
|
12296
12432
|
init_cron();
|
|
12297
12433
|
init_schedule();
|
|
12298
12434
|
var DISPATCH_BATCH_LIMIT = 20;
|
|
@@ -12301,6 +12437,20 @@ function scheduleRunFailureReason(error) {
|
|
|
12301
12437
|
}
|
|
12302
12438
|
var SCHEDULE_DISPATCH_INTERVAL_MS = 6e4;
|
|
12303
12439
|
var SCHEDULE_DISPATCH_LOOP_NAME = "schedule-dispatch";
|
|
12440
|
+
function createHttpScheduleRunExecutor() {
|
|
12441
|
+
const tls = {
|
|
12442
|
+
enabled: config_default.TRUEFORGE_MTLS_ENABLED,
|
|
12443
|
+
dir: config_default.TRUEFORGE_MTLS_CERTS_DIR
|
|
12444
|
+
};
|
|
12445
|
+
const tlsFetch = createTlsFetch(tls);
|
|
12446
|
+
const client = new TrueForge({
|
|
12447
|
+
baseUrl: normalizeTlsUrl({ url: config_default.SERVER_URL, enabled: tls.enabled }),
|
|
12448
|
+
token: config_default.TRUEFORGE_API_KEY,
|
|
12449
|
+
timeoutInSeconds: 60,
|
|
12450
|
+
...tlsFetch === void 0 ? {} : { fetch: tlsFetch }
|
|
12451
|
+
});
|
|
12452
|
+
return (scheduleRunId) => client.internal.schedules.executeRun({ scheduleRunId });
|
|
12453
|
+
}
|
|
12304
12454
|
var ScheduleAgentNotFoundError = class extends Error {
|
|
12305
12455
|
agent_name;
|
|
12306
12456
|
constructor(agent_name, options) {
|
|
@@ -12309,29 +12459,23 @@ var ScheduleAgentNotFoundError = class extends Error {
|
|
|
12309
12459
|
this.agent_name = agent_name;
|
|
12310
12460
|
}
|
|
12311
12461
|
};
|
|
12312
|
-
|
|
12313
|
-
|
|
12314
|
-
|
|
12315
|
-
|
|
12316
|
-
|
|
12317
|
-
|
|
12318
|
-
|
|
12319
|
-
|
|
12320
|
-
|
|
12321
|
-
|
|
12322
|
-
|
|
12323
|
-
|
|
12324
|
-
input: [{ type: "user.message", content: schedule.manifest.task }],
|
|
12325
|
-
previousTurnId: "none"
|
|
12326
|
-
});
|
|
12327
|
-
};
|
|
12328
|
-
}
|
|
12462
|
+
var ScheduleRunNotFoundError = class extends Error {
|
|
12463
|
+
constructor(scheduleRunId, options) {
|
|
12464
|
+
super(`Schedule run not found: ${scheduleRunId}`, options);
|
|
12465
|
+
this.name = "ScheduleRunNotFoundError";
|
|
12466
|
+
}
|
|
12467
|
+
};
|
|
12468
|
+
var ScheduleNotFoundError = class extends Error {
|
|
12469
|
+
constructor(scheduleId, options) {
|
|
12470
|
+
super(`Schedule not found: ${scheduleId}`, options);
|
|
12471
|
+
this.name = "ScheduleNotFoundError";
|
|
12472
|
+
}
|
|
12473
|
+
};
|
|
12329
12474
|
async function startScheduleRun(params) {
|
|
12330
12475
|
const {
|
|
12331
12476
|
item: { run, schedule },
|
|
12332
12477
|
sessions,
|
|
12333
|
-
agentStore
|
|
12334
|
-
startTurn
|
|
12478
|
+
agentStore
|
|
12335
12479
|
} = params;
|
|
12336
12480
|
const named = await agentStore.getAgent({ tenant_id: schedule.tenant_id, name: schedule.agent_name });
|
|
12337
12481
|
if (named === void 0) {
|
|
@@ -12346,14 +12490,27 @@ async function startScheduleRun(params) {
|
|
|
12346
12490
|
});
|
|
12347
12491
|
const { data: turns } = await session.listTurns({ limit: 1 });
|
|
12348
12492
|
if (turns.length > 0) {
|
|
12349
|
-
return;
|
|
12493
|
+
return void 0;
|
|
12350
12494
|
}
|
|
12351
|
-
|
|
12495
|
+
return {
|
|
12352
12496
|
session,
|
|
12353
12497
|
input: [{ type: "user.message", content: schedule.manifest.task }],
|
|
12354
12498
|
previous_turn_id: "none",
|
|
12355
|
-
userRef: schedule.created_by_subject.subject_id
|
|
12356
|
-
|
|
12499
|
+
userRef: schedule.created_by_subject.subject_id,
|
|
12500
|
+
agent: named
|
|
12501
|
+
};
|
|
12502
|
+
}
|
|
12503
|
+
async function loadScheduleDispatchItem(params) {
|
|
12504
|
+
const { scheduleRunId, scheduleStore } = params;
|
|
12505
|
+
const run = await scheduleStore.getRunById({ id: scheduleRunId });
|
|
12506
|
+
if (run === void 0) {
|
|
12507
|
+
throw new ScheduleRunNotFoundError(scheduleRunId);
|
|
12508
|
+
}
|
|
12509
|
+
const schedule = await scheduleStore.getSchedule({ tenant_id: run.tenant_id, id: run.schedule_id });
|
|
12510
|
+
if (schedule === void 0) {
|
|
12511
|
+
throw new ScheduleNotFoundError(run.schedule_id);
|
|
12512
|
+
}
|
|
12513
|
+
return { run, schedule };
|
|
12357
12514
|
}
|
|
12358
12515
|
async function finishScheduledRun(params) {
|
|
12359
12516
|
const { store, withTransaction, run, status, reason, now: now2 } = params;
|
|
@@ -12452,14 +12609,15 @@ async function dispatchScheduledRuns(params) {
|
|
|
12452
12609
|
return { dispatched, failed };
|
|
12453
12610
|
}
|
|
12454
12611
|
function scheduleDispatchLoop(params) {
|
|
12455
|
-
const { scheduleStore,
|
|
12612
|
+
const { scheduleStore, withTransaction, logger } = params;
|
|
12613
|
+
const executeRun = createHttpScheduleRunExecutor();
|
|
12456
12614
|
return {
|
|
12457
12615
|
name: SCHEDULE_DISPATCH_LOOP_NAME,
|
|
12458
12616
|
intervalMs: SCHEDULE_DISPATCH_INTERVAL_MS,
|
|
12459
12617
|
async tick(signal) {
|
|
12460
12618
|
const result = await dispatchScheduledRuns({
|
|
12461
12619
|
store: scheduleStore,
|
|
12462
|
-
onTriggered:
|
|
12620
|
+
onTriggered: (item) => executeRun(item.run.id),
|
|
12463
12621
|
logger,
|
|
12464
12622
|
withTransaction,
|
|
12465
12623
|
signal
|
|
@@ -12604,6 +12762,36 @@ var createScheduleRunRoute = createRoute10({
|
|
|
12604
12762
|
}
|
|
12605
12763
|
}
|
|
12606
12764
|
});
|
|
12765
|
+
var executeScheduleRunRoute = createRoute10({
|
|
12766
|
+
method: "post",
|
|
12767
|
+
path: "/runs/execute",
|
|
12768
|
+
tags: ["Internal" /* INTERNAL */],
|
|
12769
|
+
summary: "Execute a schedule run",
|
|
12770
|
+
description: "Execute a persisted schedule run using its saved schedule and agent.",
|
|
12771
|
+
"x-fern-sdk-group-name": ["internal", "schedules"],
|
|
12772
|
+
"x-fern-sdk-method-name": "execute_run",
|
|
12773
|
+
request: {
|
|
12774
|
+
body: {
|
|
12775
|
+
content: { "application/json": { schema: ExecuteScheduleRunRequestSchema } },
|
|
12776
|
+
required: true
|
|
12777
|
+
}
|
|
12778
|
+
},
|
|
12779
|
+
responses: {
|
|
12780
|
+
204: { description: "Run executed or already has a turn." },
|
|
12781
|
+
401: {
|
|
12782
|
+
content: { "application/json": { schema: RequestErrorResponseSchema } },
|
|
12783
|
+
description: "Invalid service credential."
|
|
12784
|
+
},
|
|
12785
|
+
404: {
|
|
12786
|
+
content: { "application/json": { schema: RequestErrorResponseSchema } },
|
|
12787
|
+
description: "Run, schedule, or agent not found."
|
|
12788
|
+
},
|
|
12789
|
+
422: {
|
|
12790
|
+
content: { "application/json": { schema: RequestErrorResponseSchema } },
|
|
12791
|
+
description: "The run cannot be executed."
|
|
12792
|
+
}
|
|
12793
|
+
}
|
|
12794
|
+
});
|
|
12607
12795
|
var createScheduleRoute = createRoute10({
|
|
12608
12796
|
method: "post",
|
|
12609
12797
|
path: "/",
|
|
@@ -12754,7 +12942,7 @@ import {
|
|
|
12754
12942
|
SandboxError as SandboxError2,
|
|
12755
12943
|
VercelAILLM
|
|
12756
12944
|
} from "@truefoundry/trueforge-core/core";
|
|
12757
|
-
import { HTTPException as
|
|
12945
|
+
import { HTTPException as HTTPException9 } from "hono/http-exception";
|
|
12758
12946
|
import { streamSSE } from "hono/streaming";
|
|
12759
12947
|
|
|
12760
12948
|
// src/routes/turnRoutes.ts
|
|
@@ -13758,14 +13946,14 @@ var StreamGoneError = class extends Error {
|
|
|
13758
13946
|
|
|
13759
13947
|
// src/runtime/peeringIds.ts
|
|
13760
13948
|
init_id();
|
|
13761
|
-
import { HTTPException as
|
|
13949
|
+
import { HTTPException as HTTPException8 } from "hono/http-exception";
|
|
13762
13950
|
function mintPeeredTurnId(executorId) {
|
|
13763
13951
|
return `${newId()}.${executorId}`;
|
|
13764
13952
|
}
|
|
13765
13953
|
function executorFromTurnId(turnId) {
|
|
13766
13954
|
const parts = turnId.split(".");
|
|
13767
13955
|
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
13768
|
-
throw new
|
|
13956
|
+
throw new HTTPException8(400, { message: `ID ${turnId} is not a valid turn id` });
|
|
13769
13957
|
}
|
|
13770
13958
|
return parts[1];
|
|
13771
13959
|
}
|
|
@@ -13859,7 +14047,7 @@ function createTurnResolver(deps) {
|
|
|
13859
14047
|
userRef
|
|
13860
14048
|
});
|
|
13861
14049
|
if (connection === void 0) {
|
|
13862
|
-
throw new
|
|
14050
|
+
throw new HTTPException9(422, {
|
|
13863
14051
|
message: `Unknown MCP server "${name}" \u2014 not configured`
|
|
13864
14052
|
});
|
|
13865
14053
|
}
|
|
@@ -13875,7 +14063,7 @@ function createTurnResolver(deps) {
|
|
|
13875
14063
|
sessionId
|
|
13876
14064
|
});
|
|
13877
14065
|
if (provider === void 0) {
|
|
13878
|
-
throw new
|
|
14066
|
+
throw new HTTPException9(422, {
|
|
13879
14067
|
message: "no sandbox provider configured \u2014 PUT /settings/sandbox-providers"
|
|
13880
14068
|
});
|
|
13881
14069
|
}
|
|
@@ -13886,7 +14074,7 @@ function createTurnResolver(deps) {
|
|
|
13886
14074
|
if (carriedSandboxId === void 0 && provider.type !== "local") {
|
|
13887
14075
|
const status = await checkSnapshotStatus({ store: sandboxProviderStore, tenant_id, logger });
|
|
13888
14076
|
if (status?.status !== "ready") {
|
|
13889
|
-
throw new
|
|
14077
|
+
throw new HTTPException9(422, {
|
|
13890
14078
|
message: status?.status === "failed" ? `sandbox image build failed (${status.status_reason ?? "unknown error"})` : "sandbox image is activating \u2014 retry shortly"
|
|
13891
14079
|
});
|
|
13892
14080
|
}
|
|
@@ -13908,7 +14096,7 @@ function createTurnResolver(deps) {
|
|
|
13908
14096
|
agent: async (agentId) => {
|
|
13909
14097
|
const record = await agentStore.getAgent({ tenant_id, id: agentId });
|
|
13910
14098
|
if (record === void 0) {
|
|
13911
|
-
throw new
|
|
14099
|
+
throw new HTTPException9(422, { message: `Agent not found: ${agentId}` });
|
|
13912
14100
|
}
|
|
13913
14101
|
return record.manifest;
|
|
13914
14102
|
},
|
|
@@ -14040,7 +14228,7 @@ async function startTurnInProcess(params) {
|
|
|
14040
14228
|
return turn;
|
|
14041
14229
|
}
|
|
14042
14230
|
function getTurnExecutionError(error) {
|
|
14043
|
-
if (error instanceof
|
|
14231
|
+
if (error instanceof HTTPException9) {
|
|
14044
14232
|
if (error.status === 400 || error.status === 404 || error.status === 422) {
|
|
14045
14233
|
return { status: error.status, message: error.message };
|
|
14046
14234
|
}
|
|
@@ -14069,7 +14257,7 @@ function resolveAfterSequenceNumber(c, bodyAfterSequenceNumber) {
|
|
|
14069
14257
|
if (lastEventId) {
|
|
14070
14258
|
const sequenceNumber = Number(lastEventId);
|
|
14071
14259
|
if (!Number.isInteger(sequenceNumber) || sequenceNumber < 0) {
|
|
14072
|
-
throw new
|
|
14260
|
+
throw new HTTPException9(400, { message: "Invalid Last-Event-Id header" });
|
|
14073
14261
|
}
|
|
14074
14262
|
return sequenceNumber;
|
|
14075
14263
|
}
|
|
@@ -14353,7 +14541,7 @@ function createTurnsRouter(deps) {
|
|
|
14353
14541
|
await turnEventStream.assertSubscribable();
|
|
14354
14542
|
} catch (error) {
|
|
14355
14543
|
if (error instanceof StreamGoneError) {
|
|
14356
|
-
throw new
|
|
14544
|
+
throw new HTTPException9(412, { message: error.message, cause: error });
|
|
14357
14545
|
}
|
|
14358
14546
|
throw error;
|
|
14359
14547
|
}
|
|
@@ -14403,6 +14591,33 @@ function createTurnsRouter(deps) {
|
|
|
14403
14591
|
}
|
|
14404
14592
|
|
|
14405
14593
|
// src/apis/schedules.ts
|
|
14594
|
+
async function startScheduleRunOnRequest(params) {
|
|
14595
|
+
const { c, item, deps } = params;
|
|
14596
|
+
const prepared = await startScheduleRun({
|
|
14597
|
+
item,
|
|
14598
|
+
sessions: deps.sessions,
|
|
14599
|
+
agentStore: deps.agentStore
|
|
14600
|
+
});
|
|
14601
|
+
if (prepared === void 0) {
|
|
14602
|
+
return;
|
|
14603
|
+
}
|
|
14604
|
+
await startTurnInProcess({
|
|
14605
|
+
session: prepared.session,
|
|
14606
|
+
input: prepared.input,
|
|
14607
|
+
previous_turn_id: prepared.previous_turn_id,
|
|
14608
|
+
userRef: prepared.userRef,
|
|
14609
|
+
deps: {
|
|
14610
|
+
activeTurns: deps.activeTurns,
|
|
14611
|
+
eventSubscriptions: deps.eventSubscriptions,
|
|
14612
|
+
agentStore: deps.agentStore,
|
|
14613
|
+
modelProviderStore: deps.resolveModelProviderStore(c, prepared.agent),
|
|
14614
|
+
mcpServerStore: deps.resolveMcpServerStore(c, prepared.agent),
|
|
14615
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c),
|
|
14616
|
+
skillStore: deps.turnSkillsResolverStore,
|
|
14617
|
+
logger: deps.logger
|
|
14618
|
+
}
|
|
14619
|
+
});
|
|
14620
|
+
}
|
|
14406
14621
|
function toWireSchedule(record) {
|
|
14407
14622
|
return {
|
|
14408
14623
|
id: record.id,
|
|
@@ -14456,6 +14671,34 @@ var FORBIDDEN_SCHEDULE_ACCESS = "Only the schedule creator can access this sched
|
|
|
14456
14671
|
function isScheduleOwner(requestContext, created_by_subject_id) {
|
|
14457
14672
|
return requestContext.subject.id === created_by_subject_id;
|
|
14458
14673
|
}
|
|
14674
|
+
function createScheduleExecutionRouter(deps) {
|
|
14675
|
+
const handler = async (c) => {
|
|
14676
|
+
const { schedule_run_id: scheduleRunId } = c.req.valid("json");
|
|
14677
|
+
try {
|
|
14678
|
+
const item = await loadScheduleDispatchItem({
|
|
14679
|
+
scheduleRunId,
|
|
14680
|
+
scheduleStore: deps.scheduleStore
|
|
14681
|
+
});
|
|
14682
|
+
c.set(
|
|
14683
|
+
"request_context",
|
|
14684
|
+
requestContextFromCreatedBySubject({
|
|
14685
|
+
tenant_id: item.schedule.tenant_id,
|
|
14686
|
+
created_by_subject: item.schedule.created_by_subject
|
|
14687
|
+
})
|
|
14688
|
+
);
|
|
14689
|
+
await startScheduleRunOnRequest({ c, item, deps });
|
|
14690
|
+
} catch (error) {
|
|
14691
|
+
if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
|
|
14692
|
+
return c.json({ error: { message: error.message } }, 404);
|
|
14693
|
+
}
|
|
14694
|
+
throw error;
|
|
14695
|
+
}
|
|
14696
|
+
return c.body(null, 204);
|
|
14697
|
+
};
|
|
14698
|
+
const router = new OpenAPIHono11();
|
|
14699
|
+
router.openapi(executeScheduleRunRoute, handler);
|
|
14700
|
+
return router;
|
|
14701
|
+
}
|
|
14459
14702
|
function createSchedulesRouter(deps) {
|
|
14460
14703
|
const listHandler = async (c) => {
|
|
14461
14704
|
const { agent_names: agentNames, limit, page_token: pageToken, created_by_me: createdByMe } = c.req.valid("query");
|
|
@@ -14563,14 +14806,7 @@ function createSchedulesRouter(deps) {
|
|
|
14563
14806
|
throw error;
|
|
14564
14807
|
}
|
|
14565
14808
|
try {
|
|
14566
|
-
await
|
|
14567
|
-
item: { run, schedule },
|
|
14568
|
-
sessions: deps.sessions,
|
|
14569
|
-
agentStore: deps.resolveAgentStore(c),
|
|
14570
|
-
startTurn: async (turnParams) => {
|
|
14571
|
-
await startTurnInProcess({ ...turnParams, deps: deps.resolveTurnDeps(c, agent) });
|
|
14572
|
-
}
|
|
14573
|
-
});
|
|
14809
|
+
await startScheduleRunOnRequest({ c, item: { run, schedule }, deps });
|
|
14574
14810
|
} catch (error) {
|
|
14575
14811
|
await deps.scheduleStore.updateRunStatus({
|
|
14576
14812
|
tenant_id: requestContext.tenant_id,
|
|
@@ -14578,7 +14814,7 @@ function createSchedulesRouter(deps) {
|
|
|
14578
14814
|
status: "failed",
|
|
14579
14815
|
reason: scheduleRunFailureReason(error)
|
|
14580
14816
|
});
|
|
14581
|
-
if (error instanceof ScheduleAgentNotFoundError) {
|
|
14817
|
+
if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
|
|
14582
14818
|
return c.json({ error: { message: error.message } }, 404);
|
|
14583
14819
|
}
|
|
14584
14820
|
const turnError = getTurnExecutionError(error);
|
|
@@ -15947,7 +16183,8 @@ function createAvailableSkillsRouter(deps) {
|
|
|
15947
16183
|
});
|
|
15948
16184
|
router.openapi(listSkillVersionsRoute, async (c) => {
|
|
15949
16185
|
const { name } = c.req.valid("query");
|
|
15950
|
-
|
|
16186
|
+
const skillVersions = await deps.resolveSkillStore(c).listSkillVersions({ name });
|
|
16187
|
+
return c.json({ data: skillVersions }, 200);
|
|
15951
16188
|
});
|
|
15952
16189
|
return router;
|
|
15953
16190
|
}
|
|
@@ -16073,7 +16310,7 @@ function createAppErrorHandler(params) {
|
|
|
16073
16310
|
if (error instanceof InvalidCronError) {
|
|
16074
16311
|
return c.json({ error: { message: error.message } }, 400);
|
|
16075
16312
|
}
|
|
16076
|
-
if (error instanceof
|
|
16313
|
+
if (error instanceof HTTPException10) {
|
|
16077
16314
|
if (error.status >= 500) {
|
|
16078
16315
|
params.logger.error("Server API error", {
|
|
16079
16316
|
status: error.status,
|
|
@@ -16122,7 +16359,20 @@ function createServerApp(deps) {
|
|
|
16122
16359
|
const app = new OpenAPIHono18({ defaultHook: zodValidationHook });
|
|
16123
16360
|
const authMiddleware = createAuthMiddleware(deps.authenticator);
|
|
16124
16361
|
const adminAuthMiddleware = createAdminAuthMiddleware(deps.authenticator);
|
|
16362
|
+
const scheduleExecutionAuthMiddleware = createApiKeyAuthMiddleware(config_default.TRUEFORGE_API_KEY);
|
|
16125
16363
|
const authEnabled = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
|
|
16364
|
+
const scheduleTurnDeps = {
|
|
16365
|
+
scheduleStore: deps.scheduleStore,
|
|
16366
|
+
sessions: deps.sessions,
|
|
16367
|
+
agentStore: deps.agentStore,
|
|
16368
|
+
eventSubscriptions: deps.eventSubscriptions,
|
|
16369
|
+
logger: deps.logger,
|
|
16370
|
+
resolveModelProviderStore: deps.resolveModelProviderStore,
|
|
16371
|
+
resolveMcpServerStore: deps.resolveMcpServerStore,
|
|
16372
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
16373
|
+
activeTurns: deps.activeTurns,
|
|
16374
|
+
turnSkillsResolverStore: deps.turnSkillsResolverStore
|
|
16375
|
+
};
|
|
16126
16376
|
if (config_default.ACCESS_LOGS) {
|
|
16127
16377
|
app.use("*", createAccessLogMiddleware(deps.logger));
|
|
16128
16378
|
}
|
|
@@ -16222,23 +16472,16 @@ function createServerApp(deps) {
|
|
|
16222
16472
|
authMiddleware
|
|
16223
16473
|
)
|
|
16224
16474
|
);
|
|
16475
|
+
app.route(
|
|
16476
|
+
"/api/internal/schedules",
|
|
16477
|
+
withAuth(createScheduleExecutionRouter(scheduleTurnDeps), scheduleExecutionAuthMiddleware)
|
|
16478
|
+
);
|
|
16225
16479
|
app.route(
|
|
16226
16480
|
"/api/v1/schedules",
|
|
16227
16481
|
withAuth(
|
|
16228
16482
|
createSchedulesRouter({
|
|
16229
|
-
|
|
16483
|
+
...scheduleTurnDeps,
|
|
16230
16484
|
resolveAgentStore: deps.resolveAgentStore,
|
|
16231
|
-
sessions: deps.sessions,
|
|
16232
|
-
resolveTurnDeps: (c, runAsAgent) => ({
|
|
16233
|
-
activeTurns: deps.activeTurns,
|
|
16234
|
-
eventSubscriptions: deps.eventSubscriptions,
|
|
16235
|
-
modelProviderStore: deps.resolveModelProviderStore(c, runAsAgent),
|
|
16236
|
-
mcpServerStore: deps.resolveMcpServerStore(c, runAsAgent),
|
|
16237
|
-
skillStore: deps.resolveSkillStore(c),
|
|
16238
|
-
agentStore: deps.resolveAgentStore(c),
|
|
16239
|
-
sandboxProviderStore: deps.resolveSandboxProviderStore(c),
|
|
16240
|
-
logger: deps.logger
|
|
16241
|
-
}),
|
|
16242
16485
|
withTransaction: deps.withTransaction,
|
|
16243
16486
|
resolveRequestContext,
|
|
16244
16487
|
authorizer: deps.authorizer
|
|
@@ -16425,87 +16668,6 @@ init_config();
|
|
|
16425
16668
|
|
|
16426
16669
|
// src/truefoundry/TrueFoundryAuthenticator.ts
|
|
16427
16670
|
import { HTTPException as HTTPException11 } from "hono/http-exception";
|
|
16428
|
-
|
|
16429
|
-
// src/truefoundry/accessToken.ts
|
|
16430
|
-
import { HTTPException as HTTPException10 } from "hono/http-exception";
|
|
16431
|
-
|
|
16432
|
-
// src/truefoundry/errors.ts
|
|
16433
|
-
import { HTTPException as HTTPException9 } from "hono/http-exception";
|
|
16434
|
-
var AGENT_EXTERNAL_ID_REQUIRED = "Agent is missing a TrueFoundry external id";
|
|
16435
|
-
var TRUEFOUNDRY_MANAGED_STATUS = 424;
|
|
16436
|
-
var TRUEFOUNDRY_MANAGED_MESSAGE = "This resource is managed by TrueFoundry";
|
|
16437
|
-
function requireTrueFoundryAgentExternalId(agent) {
|
|
16438
|
-
if (agent.external_id === null) {
|
|
16439
|
-
throw new HTTPException9(500, { message: AGENT_EXTERNAL_ID_REQUIRED });
|
|
16440
|
-
}
|
|
16441
|
-
return agent.external_id;
|
|
16442
|
-
}
|
|
16443
|
-
function trueFoundryManaged() {
|
|
16444
|
-
throw new HTTPException9(TRUEFOUNDRY_MANAGED_STATUS, { message: TRUEFOUNDRY_MANAGED_MESSAGE });
|
|
16445
|
-
}
|
|
16446
|
-
|
|
16447
|
-
// src/truefoundry/accessToken.ts
|
|
16448
|
-
var accessTokenCache = /* @__PURE__ */ Symbol("truefoundryAccessTokenCache");
|
|
16449
|
-
function createTrueFoundryRequestContext(base) {
|
|
16450
|
-
return { ...base, [accessTokenCache]: /* @__PURE__ */ new Map() };
|
|
16451
|
-
}
|
|
16452
|
-
function isTrueFoundryRequestContext(context) {
|
|
16453
|
-
return accessTokenCache in context;
|
|
16454
|
-
}
|
|
16455
|
-
function asTrueFoundryRequestContext(context) {
|
|
16456
|
-
if (!isTrueFoundryRequestContext(context)) {
|
|
16457
|
-
throw new Error("TrueFoundry request context required for access token resolution");
|
|
16458
|
-
}
|
|
16459
|
-
return context;
|
|
16460
|
-
}
|
|
16461
|
-
function agentAccessToken(input) {
|
|
16462
|
-
const { client, context } = input;
|
|
16463
|
-
const agentId = requireTrueFoundryAgentExternalId(input.agent);
|
|
16464
|
-
let pending;
|
|
16465
|
-
return () => {
|
|
16466
|
-
if (pending === void 0) {
|
|
16467
|
-
input.logger.info("Exchanging user context for agent access token", {
|
|
16468
|
-
subject: context.subject.id,
|
|
16469
|
-
agentId
|
|
16470
|
-
});
|
|
16471
|
-
pending = client.vendToken({ subject: context.subject, agentId, tenantName: context.tenant_id }).catch((error) => {
|
|
16472
|
-
pending = void 0;
|
|
16473
|
-
throw error;
|
|
16474
|
-
});
|
|
16475
|
-
}
|
|
16476
|
-
return pending;
|
|
16477
|
-
};
|
|
16478
|
-
}
|
|
16479
|
-
function callerAccessToken(context) {
|
|
16480
|
-
if (context.user_credential === null) {
|
|
16481
|
-
throw new HTTPException10(401, {
|
|
16482
|
-
message: "Authentication token required to list or call TrueFoundry models, MCP servers, skills, and agents"
|
|
16483
|
-
});
|
|
16484
|
-
}
|
|
16485
|
-
const token = context.user_credential;
|
|
16486
|
-
return () => Promise.resolve(token);
|
|
16487
|
-
}
|
|
16488
|
-
function accessTokenForRequest(input) {
|
|
16489
|
-
if (input.agent === void 0) {
|
|
16490
|
-
return callerAccessToken(input.context);
|
|
16491
|
-
}
|
|
16492
|
-
const agentId = requireTrueFoundryAgentExternalId(input.agent);
|
|
16493
|
-
const cache = input.context[accessTokenCache];
|
|
16494
|
-
const existing = cache.get(agentId);
|
|
16495
|
-
if (existing !== void 0) {
|
|
16496
|
-
return existing;
|
|
16497
|
-
}
|
|
16498
|
-
const resolveAgentAccessToken = agentAccessToken({
|
|
16499
|
-
client: input.client,
|
|
16500
|
-
context: input.context,
|
|
16501
|
-
agent: input.agent,
|
|
16502
|
-
logger: input.logger
|
|
16503
|
-
});
|
|
16504
|
-
cache.set(agentId, resolveAgentAccessToken);
|
|
16505
|
-
return resolveAgentAccessToken;
|
|
16506
|
-
}
|
|
16507
|
-
|
|
16508
|
-
// src/truefoundry/TrueFoundryAuthenticator.ts
|
|
16509
16671
|
var TrueFoundryAuthenticator = class {
|
|
16510
16672
|
#client;
|
|
16511
16673
|
constructor(client) {
|
|
@@ -16839,9 +17001,6 @@ var SkillCatalog = class _SkillCatalog {
|
|
|
16839
17001
|
// src/main.ts
|
|
16840
17002
|
init_config();
|
|
16841
17003
|
|
|
16842
|
-
// src/controller.ts
|
|
16843
|
-
import { TrueForge } from "@truefoundry/trueforge-sdk";
|
|
16844
|
-
|
|
16845
17004
|
// src/controller/Controller.ts
|
|
16846
17005
|
var CONTROLLER_STOPPED = "controller-stopped";
|
|
16847
17006
|
var Controller = class {
|
|
@@ -16937,28 +17096,16 @@ var Controller = class {
|
|
|
16937
17096
|
};
|
|
16938
17097
|
|
|
16939
17098
|
// src/controller.ts
|
|
16940
|
-
function createScheduleApiClient(params) {
|
|
16941
|
-
const baseUrl = normalizeTlsUrl({ url: params.baseUrl, enabled: params.tls.enabled });
|
|
16942
|
-
const fetchImpl = createTlsFetch(params.tls);
|
|
16943
|
-
return new TrueForge({
|
|
16944
|
-
baseUrl,
|
|
16945
|
-
auth: false,
|
|
16946
|
-
...fetchImpl !== void 0 ? { fetch: fetchImpl } : {}
|
|
16947
|
-
});
|
|
16948
|
-
}
|
|
16949
17099
|
function createController(params) {
|
|
16950
|
-
const { scheduleStore, withTransaction, logger, baseUrl } = params;
|
|
16951
|
-
const tls = params.tls ?? { enabled: false, dir: "" };
|
|
16952
17100
|
return new Controller({
|
|
16953
17101
|
loops: [
|
|
16954
17102
|
scheduleDispatchLoop({
|
|
16955
|
-
scheduleStore,
|
|
16956
|
-
|
|
16957
|
-
|
|
16958
|
-
logger
|
|
17103
|
+
scheduleStore: params.scheduleStore,
|
|
17104
|
+
withTransaction: params.withTransaction,
|
|
17105
|
+
logger: params.logger
|
|
16959
17106
|
})
|
|
16960
17107
|
],
|
|
16961
|
-
logger
|
|
17108
|
+
logger: params.logger
|
|
16962
17109
|
});
|
|
16963
17110
|
}
|
|
16964
17111
|
|
|
@@ -17797,11 +17944,11 @@ var TrueFoundryMcpServerStore = class {
|
|
|
17797
17944
|
this.#client = input.client;
|
|
17798
17945
|
this.#resolveAccessToken = accessTokenForRequest({
|
|
17799
17946
|
client: input.client,
|
|
17800
|
-
|
|
17947
|
+
requestContext: asTrueFoundryRequestContext(input.requestContext),
|
|
17801
17948
|
agent: input.agent,
|
|
17802
17949
|
logger: input.logger
|
|
17803
17950
|
});
|
|
17804
|
-
this.#subject = input.
|
|
17951
|
+
this.#subject = input.requestContext.subject;
|
|
17805
17952
|
this.#perServerHeaders = input.perServerHeaders ?? {};
|
|
17806
17953
|
}
|
|
17807
17954
|
/** Gateway Bearer (+ optional per-server overrides); SFY authorize first, else authRequired. */
|
|
@@ -17968,7 +18115,7 @@ var TrueFoundryModelProviderStore = class {
|
|
|
17968
18115
|
this.#client = input.client;
|
|
17969
18116
|
this.#resolveAccessToken = accessTokenForRequest({
|
|
17970
18117
|
client: input.client,
|
|
17971
|
-
|
|
18118
|
+
requestContext: asTrueFoundryRequestContext(input.requestContext),
|
|
17972
18119
|
agent: input.agent,
|
|
17973
18120
|
logger: input.logger
|
|
17974
18121
|
});
|
|
@@ -18217,10 +18364,60 @@ function toRegistryRecord(tenant_id, skill) {
|
|
|
18217
18364
|
updated_at: now2
|
|
18218
18365
|
};
|
|
18219
18366
|
}
|
|
18220
|
-
var
|
|
18367
|
+
var TrueFoundryAdminSkillStore = class {
|
|
18368
|
+
#client;
|
|
18369
|
+
constructor(input) {
|
|
18370
|
+
this.#client = input.client;
|
|
18371
|
+
}
|
|
18372
|
+
async resolveTurnSkills(input) {
|
|
18373
|
+
const { skills } = input;
|
|
18374
|
+
if (skills.length === 0) {
|
|
18375
|
+
return [];
|
|
18376
|
+
}
|
|
18377
|
+
const resolved = await this.#client.resolveAgentSkillVersions({
|
|
18378
|
+
accessToken: this.#client.apiKey,
|
|
18379
|
+
skills: skills.map((skill) => ({
|
|
18380
|
+
fqn: skill.name,
|
|
18381
|
+
include_skill_md_content: skill.preload,
|
|
18382
|
+
include_presigned_url: true
|
|
18383
|
+
}))
|
|
18384
|
+
});
|
|
18385
|
+
const byFqn = new Map(resolved.map((row) => [row.fqn, row]));
|
|
18386
|
+
return skills.map((skill) => {
|
|
18387
|
+
const row = byFqn.get(skill.name);
|
|
18388
|
+
if (row === void 0) {
|
|
18389
|
+
throw new HTTPException18(422, {
|
|
18390
|
+
message: `Unknown skill "${skill.name}" \u2014 not configured`
|
|
18391
|
+
});
|
|
18392
|
+
}
|
|
18393
|
+
if (row.presigned_url === void 0) {
|
|
18394
|
+
throw new HTTPException18(422, {
|
|
18395
|
+
message: `Skill "${skill.name}" did not return a presigned URL`
|
|
18396
|
+
});
|
|
18397
|
+
}
|
|
18398
|
+
const skillMdContent = skill.preload ? row.skill_md_content ?? null : null;
|
|
18399
|
+
if (skill.preload && (skillMdContent === null || skillMdContent.length === 0)) {
|
|
18400
|
+
throw new HTTPException18(422, {
|
|
18401
|
+
message: `Skill "${skill.name}" did not return SKILL.md for preload`
|
|
18402
|
+
});
|
|
18403
|
+
}
|
|
18404
|
+
return {
|
|
18405
|
+
type: "registry",
|
|
18406
|
+
name: row.name,
|
|
18407
|
+
description: row.description,
|
|
18408
|
+
fqn: row.fqn,
|
|
18409
|
+
preload: skill.preload,
|
|
18410
|
+
skillMdContent,
|
|
18411
|
+
presignedUrl: row.presigned_url
|
|
18412
|
+
};
|
|
18413
|
+
});
|
|
18414
|
+
}
|
|
18415
|
+
};
|
|
18416
|
+
var TrueFoundrySkillStore = class extends TrueFoundryAdminSkillStore {
|
|
18221
18417
|
#client;
|
|
18222
18418
|
#resolveAccessToken;
|
|
18223
18419
|
constructor(input) {
|
|
18420
|
+
super(input);
|
|
18224
18421
|
this.#client = input.client;
|
|
18225
18422
|
this.#resolveAccessToken = callerAccessToken(input.context);
|
|
18226
18423
|
}
|
|
@@ -18299,49 +18496,6 @@ var TrueFoundrySkillStore = class {
|
|
|
18299
18496
|
seenNames.add(row.name);
|
|
18300
18497
|
}
|
|
18301
18498
|
}
|
|
18302
|
-
async resolveTurnSkills(input) {
|
|
18303
|
-
const { skills } = input;
|
|
18304
|
-
if (skills.length === 0) {
|
|
18305
|
-
return [];
|
|
18306
|
-
}
|
|
18307
|
-
const resolved = await this.#client.resolveAgentSkillVersions({
|
|
18308
|
-
accessToken: this.#client.apiKey,
|
|
18309
|
-
skills: skills.map((skill) => ({
|
|
18310
|
-
fqn: skill.name,
|
|
18311
|
-
include_skill_md_content: skill.preload,
|
|
18312
|
-
include_presigned_url: true
|
|
18313
|
-
}))
|
|
18314
|
-
});
|
|
18315
|
-
const byFqn = new Map(resolved.map((row) => [row.fqn, row]));
|
|
18316
|
-
return skills.map((skill) => {
|
|
18317
|
-
const row = byFqn.get(skill.name);
|
|
18318
|
-
if (row === void 0) {
|
|
18319
|
-
throw new HTTPException18(422, {
|
|
18320
|
-
message: `Unknown skill "${skill.name}" \u2014 not configured`
|
|
18321
|
-
});
|
|
18322
|
-
}
|
|
18323
|
-
if (row.presigned_url === void 0) {
|
|
18324
|
-
throw new HTTPException18(422, {
|
|
18325
|
-
message: `Skill "${skill.name}" did not return a presigned URL`
|
|
18326
|
-
});
|
|
18327
|
-
}
|
|
18328
|
-
const skillMdContent = skill.preload ? row.skill_md_content ?? null : null;
|
|
18329
|
-
if (skill.preload && (skillMdContent === null || skillMdContent.length === 0)) {
|
|
18330
|
-
throw new HTTPException18(422, {
|
|
18331
|
-
message: `Skill "${skill.name}" did not return SKILL.md for preload`
|
|
18332
|
-
});
|
|
18333
|
-
}
|
|
18334
|
-
return {
|
|
18335
|
-
type: "registry",
|
|
18336
|
-
name: row.name,
|
|
18337
|
-
description: row.description,
|
|
18338
|
-
fqn: row.fqn,
|
|
18339
|
-
preload: skill.preload,
|
|
18340
|
-
skillMdContent,
|
|
18341
|
-
presignedUrl: row.presigned_url
|
|
18342
|
-
};
|
|
18343
|
-
});
|
|
18344
|
-
}
|
|
18345
18499
|
};
|
|
18346
18500
|
|
|
18347
18501
|
// src/main.ts
|
|
@@ -18390,19 +18544,25 @@ function buildResolveSkillStore(options) {
|
|
|
18390
18544
|
if (client === void 0) {
|
|
18391
18545
|
return () => persistenceStore;
|
|
18392
18546
|
}
|
|
18393
|
-
return (
|
|
18547
|
+
return (requestContext) => new TrueFoundrySkillStore({
|
|
18394
18548
|
client,
|
|
18395
|
-
context:
|
|
18549
|
+
context: requestContext
|
|
18396
18550
|
});
|
|
18397
18551
|
}
|
|
18552
|
+
function buildTurnSkillsResolverStore(options) {
|
|
18553
|
+
const { persistenceStore, client } = options;
|
|
18554
|
+
if (client) {
|
|
18555
|
+
return new TrueFoundryAdminSkillStore({ client });
|
|
18556
|
+
}
|
|
18557
|
+
return persistenceStore;
|
|
18558
|
+
}
|
|
18398
18559
|
function buildResolveModelProviderStore(options) {
|
|
18399
|
-
return (
|
|
18560
|
+
return (rc, runAsAgent) => {
|
|
18400
18561
|
const { persistenceStore, client } = options;
|
|
18401
18562
|
if (client) {
|
|
18402
|
-
const requestContext = resolveRequestContext(c);
|
|
18403
18563
|
return new TrueFoundryModelProviderStore({
|
|
18404
18564
|
client,
|
|
18405
|
-
|
|
18565
|
+
requestContext: rc,
|
|
18406
18566
|
agent: runAsAgent,
|
|
18407
18567
|
logger: options.logger
|
|
18408
18568
|
});
|
|
@@ -18411,35 +18571,33 @@ function buildResolveModelProviderStore(options) {
|
|
|
18411
18571
|
};
|
|
18412
18572
|
}
|
|
18413
18573
|
function buildResolveMcpServerStore(options) {
|
|
18414
|
-
|
|
18415
|
-
|
|
18416
|
-
|
|
18417
|
-
|
|
18418
|
-
|
|
18574
|
+
const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
|
|
18575
|
+
store: options.persistenceStore,
|
|
18576
|
+
tokenStore: options.tokenStore,
|
|
18577
|
+
clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
|
|
18578
|
+
});
|
|
18579
|
+
return (rc, runAsAgent, perServerHeaders) => {
|
|
18580
|
+
const { client } = options;
|
|
18581
|
+
if (client) {
|
|
18419
18582
|
return new TrueFoundryMcpServerStore({
|
|
18420
18583
|
client,
|
|
18421
|
-
|
|
18584
|
+
requestContext: rc,
|
|
18422
18585
|
agent: runAsAgent,
|
|
18423
18586
|
logger: options.logger,
|
|
18424
|
-
perServerHeaders
|
|
18587
|
+
...perServerHeaders === void 0 ? {} : { perServerHeaders }
|
|
18425
18588
|
});
|
|
18426
18589
|
}
|
|
18427
|
-
const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
|
|
18428
|
-
store: persistenceStore,
|
|
18429
|
-
tokenStore,
|
|
18430
|
-
clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
|
|
18431
|
-
});
|
|
18432
18590
|
return withAuthMcpPersistenceStore;
|
|
18433
18591
|
};
|
|
18434
18592
|
}
|
|
18435
18593
|
function buildResolveAgentStore(options) {
|
|
18436
18594
|
const { persistenceStore, client, db } = options;
|
|
18437
|
-
return (
|
|
18595
|
+
return (rc) => {
|
|
18438
18596
|
if (client) {
|
|
18439
18597
|
return new TrueFoundryAgentStore({
|
|
18440
18598
|
inner: persistenceStore,
|
|
18441
18599
|
client,
|
|
18442
|
-
context:
|
|
18600
|
+
context: rc,
|
|
18443
18601
|
db
|
|
18444
18602
|
});
|
|
18445
18603
|
}
|
|
@@ -18448,11 +18606,10 @@ function buildResolveAgentStore(options) {
|
|
|
18448
18606
|
}
|
|
18449
18607
|
function buildResolveSandboxProviderStore(options) {
|
|
18450
18608
|
const { persistenceStore } = options;
|
|
18451
|
-
if (
|
|
18452
|
-
return () =>
|
|
18609
|
+
if (isTrueFoundryModeEnabled2(configuration2)) {
|
|
18610
|
+
return () => new TrueFoundrySandboxProviderStore();
|
|
18453
18611
|
}
|
|
18454
|
-
|
|
18455
|
-
return () => trueFoundryStore;
|
|
18612
|
+
return () => persistenceStore;
|
|
18456
18613
|
}
|
|
18457
18614
|
async function createStandalonePersistence(options) {
|
|
18458
18615
|
const { sqlitePath, logger } = options;
|
|
@@ -18498,20 +18655,23 @@ async function createStandalonePersistence(options) {
|
|
|
18498
18655
|
const sandboxProviderStore = new SqliteSandboxProviderStore2(db);
|
|
18499
18656
|
const skillStore = new SqliteSkillStore2(db);
|
|
18500
18657
|
return {
|
|
18658
|
+
withTransaction: (callback) => db.transaction().execute(callback),
|
|
18501
18659
|
sessionStore: new SqliteSessionStore2(db),
|
|
18502
18660
|
sessionMetricsStore: new SqliteSessionMetricsStore2(db),
|
|
18661
|
+
mcpOAuthStore: mcpServerStore,
|
|
18662
|
+
tokenStore,
|
|
18663
|
+
scheduleStore: new SqliteScheduleStore2(db),
|
|
18503
18664
|
resolveModelProviderStore: () => modelProviderStore,
|
|
18504
18665
|
resolveMcpServerStore: () => mcpServerStore,
|
|
18666
|
+
resolveSandboxProviderStore: () => sandboxProviderStore,
|
|
18667
|
+
resolveSkillStore: () => skillStore,
|
|
18505
18668
|
resolveAgentStore: () => agentStore,
|
|
18506
18669
|
resolveImportAgentStore: () => agentStore,
|
|
18507
|
-
|
|
18508
|
-
|
|
18509
|
-
tokenStore,
|
|
18510
|
-
scheduleStore: new SqliteScheduleStore2(db),
|
|
18670
|
+
agentStore,
|
|
18671
|
+
turnSkillsResolverStore: skillStore,
|
|
18511
18672
|
destroyDb: () => db.destroy(),
|
|
18512
18673
|
redis: void 0,
|
|
18513
|
-
serviceFoundryClient: void 0
|
|
18514
|
-
resolveSkillStore: () => skillStore
|
|
18674
|
+
serviceFoundryClient: void 0
|
|
18515
18675
|
};
|
|
18516
18676
|
}
|
|
18517
18677
|
async function createDistributedPersistence(options) {
|
|
@@ -18560,11 +18720,22 @@ async function createDistributedPersistence(options) {
|
|
|
18560
18720
|
await migrateToLatest2(db);
|
|
18561
18721
|
logger.info("Distributed mode: postgres");
|
|
18562
18722
|
logger.info(`Executor id: ${executorId}`);
|
|
18723
|
+
const serviceFoundryClient = createServiceFoundryServerClient(logger);
|
|
18563
18724
|
const tokenStore = new PostgresOAuthTokenStore2(db);
|
|
18564
|
-
const agentStore = new PostgresAgentStore3(db);
|
|
18565
18725
|
const modelProviderStore = new PostgresModelProviderStore2(db);
|
|
18566
18726
|
const mcpServerStore = new PostgresMcpServerStore2(db);
|
|
18567
|
-
const
|
|
18727
|
+
const mcpServerWithAuthStore = new McpServerWithAuthStore({
|
|
18728
|
+
store: mcpServerStore,
|
|
18729
|
+
tokenStore,
|
|
18730
|
+
clientName: configuration3.MCP_DCR_OAUTH_CLIENT_NAME
|
|
18731
|
+
});
|
|
18732
|
+
const sandboxProviderStore = new PostgresSandboxProviderStore2(db);
|
|
18733
|
+
const skillStore = new PostgresSkillStore2(db);
|
|
18734
|
+
const agentStore = new PostgresAgentStore3(db);
|
|
18735
|
+
const turnSkillsResolverStore = buildTurnSkillsResolverStore({
|
|
18736
|
+
persistenceStore: skillStore,
|
|
18737
|
+
client: serviceFoundryClient
|
|
18738
|
+
});
|
|
18568
18739
|
const resolveModelProviderStore = buildResolveModelProviderStore({
|
|
18569
18740
|
persistenceStore: modelProviderStore,
|
|
18570
18741
|
client: serviceFoundryClient,
|
|
@@ -18599,49 +18770,51 @@ async function createDistributedPersistence(options) {
|
|
|
18599
18770
|
});
|
|
18600
18771
|
};
|
|
18601
18772
|
const resolveSandboxProviderStore = buildResolveSandboxProviderStore({
|
|
18602
|
-
persistenceStore:
|
|
18773
|
+
persistenceStore: sandboxProviderStore
|
|
18774
|
+
});
|
|
18775
|
+
const resolveSkillStore = buildResolveSkillStore({
|
|
18776
|
+
persistenceStore: skillStore,
|
|
18777
|
+
client: serviceFoundryClient
|
|
18603
18778
|
});
|
|
18604
|
-
const skillStore = new PostgresSkillStore2(db);
|
|
18605
18779
|
return {
|
|
18780
|
+
withTransaction: (callback) => db.transaction().execute(callback),
|
|
18606
18781
|
sessionStore: new PostgresSessionStore2(db),
|
|
18607
18782
|
sessionMetricsStore: new PostgresSessionMetricsStore2(db),
|
|
18783
|
+
mcpOAuthStore: mcpServerWithAuthStore,
|
|
18784
|
+
tokenStore,
|
|
18785
|
+
scheduleStore: new PostgresScheduleStore2(db),
|
|
18608
18786
|
resolveModelProviderStore,
|
|
18609
18787
|
resolveMcpServerStore,
|
|
18788
|
+
resolveSandboxProviderStore,
|
|
18789
|
+
resolveSkillStore,
|
|
18610
18790
|
resolveAgentStore,
|
|
18611
18791
|
resolveImportAgentStore,
|
|
18612
|
-
|
|
18613
|
-
|
|
18614
|
-
tokenStore,
|
|
18615
|
-
scheduleStore: new PostgresScheduleStore2(db),
|
|
18792
|
+
agentStore,
|
|
18793
|
+
turnSkillsResolverStore,
|
|
18616
18794
|
destroyDb: () => db.destroy(),
|
|
18617
18795
|
redis: await connectRedis2({ url: redisUrl, logger }),
|
|
18618
|
-
serviceFoundryClient
|
|
18619
|
-
resolveSkillStore: buildResolveSkillStore({
|
|
18620
|
-
persistenceStore: skillStore,
|
|
18621
|
-
client: serviceFoundryClient
|
|
18622
|
-
})
|
|
18796
|
+
serviceFoundryClient
|
|
18623
18797
|
};
|
|
18624
18798
|
}
|
|
18625
18799
|
async function createServerRuntime(persistence, logger) {
|
|
18626
18800
|
const {
|
|
18801
|
+
withTransaction,
|
|
18627
18802
|
sessionStore,
|
|
18628
18803
|
sessionMetricsStore,
|
|
18629
|
-
resolveModelProviderStore,
|
|
18630
|
-
resolveMcpServerStore,
|
|
18631
|
-
resolveAgentStore,
|
|
18632
|
-
resolveImportAgentStore,
|
|
18633
|
-
resolveSandboxProviderStore,
|
|
18634
|
-
withTransaction,
|
|
18635
18804
|
tokenStore,
|
|
18636
18805
|
scheduleStore,
|
|
18806
|
+
mcpOAuthStore,
|
|
18807
|
+
resolveImportAgentStore,
|
|
18808
|
+
agentStore,
|
|
18809
|
+
turnSkillsResolverStore,
|
|
18637
18810
|
destroyDb,
|
|
18638
18811
|
redis,
|
|
18639
|
-
serviceFoundryClient
|
|
18640
|
-
resolveSkillStore
|
|
18812
|
+
serviceFoundryClient
|
|
18641
18813
|
} = persistence;
|
|
18642
18814
|
const activeTurns = new ActiveTurnRegistry();
|
|
18643
18815
|
const requestReplyRouter = new RequestReplyRouter();
|
|
18644
18816
|
const eventSubscriptions = new EventSubscriptionRegistry(redis);
|
|
18817
|
+
const sessions = new Sessions({ sessionStore });
|
|
18645
18818
|
const oidc = isOidcConfigured2(configuration2) ? configuration2.OIDC : void 0;
|
|
18646
18819
|
if (oidc) {
|
|
18647
18820
|
logger.info("Auth is enabled", { issuer: oidc.OIDC_ISSUER_URL });
|
|
@@ -18671,9 +18844,23 @@ async function createServerRuntime(persistence, logger) {
|
|
|
18671
18844
|
const controller = configuration2.STANDALONE ? createController({
|
|
18672
18845
|
scheduleStore,
|
|
18673
18846
|
withTransaction,
|
|
18674
|
-
logger
|
|
18675
|
-
baseUrl: `http://localhost:${String(configuration2.PORT)}`
|
|
18847
|
+
logger
|
|
18676
18848
|
}) : void 0;
|
|
18849
|
+
const resolveModelProviderStore = (c, runAsAgent) => persistence.resolveModelProviderStore(resolveRequestContext(c), runAsAgent);
|
|
18850
|
+
const resolveMcpServerStore = (c, runAsAgent) => {
|
|
18851
|
+
if (c === void 0) {
|
|
18852
|
+
return mcpOAuthStore;
|
|
18853
|
+
}
|
|
18854
|
+
const rawPerServerHeaders = c.req.header(X_TFG_MCP_HEADERS);
|
|
18855
|
+
return persistence.resolveMcpServerStore(
|
|
18856
|
+
resolveRequestContext(c),
|
|
18857
|
+
runAsAgent,
|
|
18858
|
+
rawPerServerHeaders === void 0 ? void 0 : parsePerServerMcpHeaders(rawPerServerHeaders)
|
|
18859
|
+
);
|
|
18860
|
+
};
|
|
18861
|
+
const resolveAgentStore = (c) => persistence.resolveAgentStore(resolveRequestContext(c));
|
|
18862
|
+
const resolveSandboxProviderStore = (c) => persistence.resolveSandboxProviderStore(resolveRequestContext(c));
|
|
18863
|
+
const resolveSkillStore = (c) => persistence.resolveSkillStore(resolveRequestContext(c));
|
|
18677
18864
|
const app = createServerApp({
|
|
18678
18865
|
modelCatalog: ModelCatalog.load(),
|
|
18679
18866
|
mcpCatalog: McpCatalog.load(),
|
|
@@ -18684,12 +18871,15 @@ async function createServerRuntime(persistence, logger) {
|
|
|
18684
18871
|
resolveAgentStore,
|
|
18685
18872
|
resolveImportAgentStore,
|
|
18686
18873
|
resolveSandboxProviderStore,
|
|
18874
|
+
resolveSkillStore,
|
|
18687
18875
|
withTransaction,
|
|
18688
18876
|
tokenStore,
|
|
18689
18877
|
scheduleStore,
|
|
18878
|
+
agentStore,
|
|
18879
|
+
turnSkillsResolverStore,
|
|
18690
18880
|
sessionStore,
|
|
18691
18881
|
sessionMetricsStore,
|
|
18692
|
-
sessions
|
|
18882
|
+
sessions,
|
|
18693
18883
|
activeTurns,
|
|
18694
18884
|
redis,
|
|
18695
18885
|
requestReplyRouter,
|
|
@@ -18697,8 +18887,7 @@ async function createServerRuntime(persistence, logger) {
|
|
|
18697
18887
|
logger,
|
|
18698
18888
|
oidcClient,
|
|
18699
18889
|
authenticator,
|
|
18700
|
-
authorizer
|
|
18701
|
-
resolveSkillStore
|
|
18890
|
+
authorizer
|
|
18702
18891
|
});
|
|
18703
18892
|
return { activeTurns, app, controller, destroyDb, redis, requestReplyRouter };
|
|
18704
18893
|
}
|