@truefoundry/trueforge 0.2.0-rc.3 → 0.2.0-rc.4
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-U6KQWVBJ-mo8URLKV.js} +1 -1
- package/dist/_frontend/assets/AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js.br +0 -0
- package/dist/_frontend/assets/AgentCodeSnippets-U6KQWVBJ-mo8URLKV.js.gz +0 -0
- package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js +1 -0
- package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js.br +0 -0
- package/dist/_frontend/assets/AgentMetricChart-3D6FUFO6-DzIcybRU.js.gz +0 -0
- package/dist/_frontend/assets/{AgentOverview-VF74XC7I-DuR4GDFb.js → AgentOverview-RLJ6HZCN-YJvNjt8b.js} +1 -1
- package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js.br +0 -0
- package/dist/_frontend/assets/AgentOverview-RLJ6HZCN-YJvNjt8b.js.gz +0 -0
- package/dist/_frontend/assets/{AgentSessionEventTimeline-RFR6LQMY-B_5nS70p.js → AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js} +1 -1
- package/dist/_frontend/assets/AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimeline-CDXRRUZQ-CnbfBoc3.js.gz +0 -0
- package/dist/_frontend/assets/{AgentSessionEventTimelineChart-27CQF6FX-DSTwylcS.js → AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js} +1 -1
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js.br +0 -0
- package/dist/_frontend/assets/AgentSessionEventTimelineChart-S2WX6ZEA-BjzWPaWE.js.gz +0 -0
- package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js +1 -0
- package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js.br +0 -0
- package/dist/_frontend/assets/AgentSessions-UI3L7XY2-CG8nWJdo.js.gz +0 -0
- package/dist/_frontend/assets/{ConnectorSettings-R5VEP7BO-Cvdqimeu.js → ConnectorSettings-OIGAC2HU-xm76mpmk.js} +1 -1
- package/dist/_frontend/assets/ConnectorSettings-OIGAC2HU-xm76mpmk.js.br +0 -0
- package/dist/_frontend/assets/ConnectorSettings-OIGAC2HU-xm76mpmk.js.gz +0 -0
- package/dist/_frontend/assets/{DockLayout-F44RWGEY-DVcqWNpi.js → DockLayout-J5BRKMJZ-xjQQzILb.js} +1 -1
- package/dist/_frontend/assets/{DrawerLayout-SQ323AVM-CrsDJpVR.js → DrawerLayout-65YHGHIF-CehQ0ZjJ.js} +2 -2
- package/dist/_frontend/assets/DrawerLayout-65YHGHIF-CehQ0ZjJ.js.br +0 -0
- package/dist/_frontend/assets/DrawerLayout-65YHGHIF-CehQ0ZjJ.js.gz +0 -0
- package/dist/_frontend/assets/{ModelSettings-6QLS63HM-B0omK7y_.js → ModelSettings-VP6WCMGT-DuhYOy95.js} +1 -1
- package/dist/_frontend/assets/ModelSettings-VP6WCMGT-DuhYOy95.js.br +0 -0
- package/dist/_frontend/assets/ModelSettings-VP6WCMGT-DuhYOy95.js.gz +0 -0
- package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js +1 -0
- package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js.br +0 -0
- package/dist/_frontend/assets/SandboxSettings-GTZT7LD6-F_5p7NeO.js.gz +0 -0
- package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js +1 -0
- package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js.br +0 -0
- package/dist/_frontend/assets/SchedulesPage-ARWU7BZF-BIZcHayD.js.gz +0 -0
- package/dist/_frontend/assets/{SettingsBuilder-GISAH2WU-2fVa9yeg.js → SettingsBuilder-A4BPYIFZ-B4p1JpXq.js} +2 -2
- package/dist/_frontend/assets/SettingsBuilder-A4BPYIFZ-B4p1JpXq.js.br +0 -0
- package/dist/_frontend/assets/SettingsBuilder-A4BPYIFZ-B4p1JpXq.js.gz +0 -0
- package/dist/_frontend/assets/{ShellRouteSync-EN33DUQ7-C280D67g.js → ShellRouteSync-SSLGM35F-Cqt-1Q8u.js} +1 -1
- package/dist/_frontend/assets/ShellRouteSync-SSLGM35F-Cqt-1Q8u.js.br +0 -0
- package/dist/_frontend/assets/ShellRouteSync-SSLGM35F-Cqt-1Q8u.js.gz +0 -0
- package/dist/_frontend/assets/{SidebarLayout-35K4AKTC-0-Mjo6gf.js → SidebarLayout-MFDOGAVJ-pSgzH70r.js} +2 -2
- package/dist/_frontend/assets/SidebarLayout-MFDOGAVJ-pSgzH70r.js.br +0 -0
- package/dist/_frontend/assets/SidebarLayout-MFDOGAVJ-pSgzH70r.js.gz +0 -0
- package/dist/_frontend/assets/{SkillSettings-JSX2BTII-BriJH4Oj.js → SkillSettings-WQPUQ5TE-x17-_tYg.js} +1 -1
- package/dist/_frontend/assets/SkillSettings-WQPUQ5TE-x17-_tYg.js.br +0 -0
- package/dist/_frontend/assets/SkillSettings-WQPUQ5TE-x17-_tYg.js.gz +0 -0
- package/dist/_frontend/assets/TrueForgeUIWithRouter-5CDICMCE-DcMl1KUh.js +1 -0
- package/dist/_frontend/assets/{WidgetLayout-RKBSN2FZ-u6iVYu3w.js → WidgetLayout-HE7E4UL5-D_jC6D5-.js} +1 -1
- package/dist/_frontend/assets/WidgetLayout-HE7E4UL5-D_jC6D5-.js.br +0 -0
- package/dist/_frontend/assets/WidgetLayout-HE7E4UL5-D_jC6D5-.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-73FQVITT-mgvTPDmd.js → chunk-2BDTG544-FxcOqFr-.js} +1 -1
- package/dist/_frontend/assets/chunk-2BDTG544-FxcOqFr-.js.br +0 -0
- package/dist/_frontend/assets/chunk-2BDTG544-FxcOqFr-.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-62JRHF6Z-DYrEQoq5.js → chunk-62JRHF6Z-6aeTVQm8.js} +1 -1
- package/dist/_frontend/assets/chunk-62JRHF6Z-6aeTVQm8.js.br +0 -0
- package/dist/_frontend/assets/chunk-62JRHF6Z-6aeTVQm8.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-LUG7E6BL-QKvrInc2.js → chunk-TGKQRK3S-D5Bs7icZ.js} +1 -1
- package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js.br +0 -0
- package/dist/_frontend/assets/chunk-TGKQRK3S-D5Bs7icZ.js.gz +0 -0
- package/dist/_frontend/assets/{chunk-GIPFF6FZ-DPTdcXQj.js → chunk-VXKNS7FH-Dm2ZAGlE.js} +2 -2
- package/dist/_frontend/assets/chunk-VXKNS7FH-Dm2ZAGlE.js.br +0 -0
- package/dist/_frontend/assets/chunk-VXKNS7FH-Dm2ZAGlE.js.gz +0 -0
- package/dist/_frontend/assets/{cssMode-BNfxrwWp.js → cssMode-BSK94pjD.js} +1 -1
- package/dist/_frontend/assets/cssMode-BSK94pjD.js.br +0 -0
- package/dist/_frontend/assets/cssMode-BSK94pjD.js.gz +0 -0
- package/dist/_frontend/assets/{freemarker2-ClbLzW-k.js → freemarker2-hYZ9lU-u.js} +1 -1
- package/dist/_frontend/assets/freemarker2-hYZ9lU-u.js.br +0 -0
- package/dist/_frontend/assets/freemarker2-hYZ9lU-u.js.gz +0 -0
- package/dist/_frontend/assets/{handlebars-5nE6yTDt.js → handlebars-CJdvCy_0.js} +1 -1
- package/dist/_frontend/assets/handlebars-CJdvCy_0.js.br +0 -0
- package/dist/_frontend/assets/handlebars-CJdvCy_0.js.gz +0 -0
- package/dist/_frontend/assets/{html-BZRf7Zhg.js → html-BHnJtaJv.js} +1 -1
- package/dist/_frontend/assets/html-BHnJtaJv.js.br +0 -0
- package/dist/_frontend/assets/html-BHnJtaJv.js.gz +0 -0
- package/dist/_frontend/assets/{htmlMode-C6O73C_r.js → htmlMode-BTNbHYXw.js} +1 -1
- package/dist/_frontend/assets/htmlMode-BTNbHYXw.js.br +0 -0
- package/dist/_frontend/assets/htmlMode-BTNbHYXw.js.gz +0 -0
- package/dist/_frontend/assets/{index-D0Yf366e.js → index-B1sBHguz.js} +1 -1
- package/dist/_frontend/assets/index-B1sBHguz.js.br +0 -0
- package/dist/_frontend/assets/index-B1sBHguz.js.gz +0 -0
- package/dist/_frontend/assets/{index-DBjak9Sg.js → index-BU6gYO7K.js} +3 -3
- package/dist/_frontend/assets/index-BU6gYO7K.js.br +0 -0
- package/dist/_frontend/assets/index-BU6gYO7K.js.gz +0 -0
- package/dist/_frontend/assets/{index-XpZpj5Rl.js → index-DZOZ1xN3.js} +240 -240
- package/dist/_frontend/assets/index-DZOZ1xN3.js.br +0 -0
- package/dist/_frontend/assets/index-DZOZ1xN3.js.gz +0 -0
- package/dist/_frontend/assets/{javascript-CrSAQdU4.js → javascript-BKY4Sujy.js} +1 -1
- package/dist/_frontend/assets/{jsonMode-Dal25yu2.js → jsonMode-B_jTSLwe.js} +1 -1
- package/dist/_frontend/assets/jsonMode-B_jTSLwe.js.br +0 -0
- package/dist/_frontend/assets/jsonMode-B_jTSLwe.js.gz +0 -0
- package/dist/_frontend/assets/{liquid-Ci7gjLGv.js → liquid-OVC8bSZr.js} +1 -1
- package/dist/_frontend/assets/liquid-OVC8bSZr.js.br +0 -0
- package/dist/_frontend/assets/liquid-OVC8bSZr.js.gz +0 -0
- package/dist/_frontend/assets/{lspLanguageFeatures-rM-QiA57.js → lspLanguageFeatures-BpQc31SX.js} +1 -1
- package/dist/_frontend/assets/lspLanguageFeatures-BpQc31SX.js.br +0 -0
- package/dist/_frontend/assets/lspLanguageFeatures-BpQc31SX.js.gz +0 -0
- package/dist/_frontend/assets/{mdx-J3rSuJw4.js → mdx-Rt-sDg8a.js} +1 -1
- package/dist/_frontend/assets/mdx-Rt-sDg8a.js.br +0 -0
- package/dist/_frontend/assets/mdx-Rt-sDg8a.js.gz +0 -0
- package/dist/_frontend/assets/{python-BSpXGEco.js → python-CLLuhWlP.js} +1 -1
- package/dist/_frontend/assets/python-CLLuhWlP.js.br +0 -0
- package/dist/_frontend/assets/python-CLLuhWlP.js.gz +0 -0
- package/dist/_frontend/assets/{razor-DLV1uhEc.js → razor-CTEZKBpz.js} +1 -1
- package/dist/_frontend/assets/razor-CTEZKBpz.js.br +0 -0
- package/dist/_frontend/assets/razor-CTEZKBpz.js.gz +0 -0
- package/dist/_frontend/assets/{tsMode-CQqRu3mP.js → tsMode-BsjOp9ss.js} +1 -1
- package/dist/_frontend/assets/tsMode-BsjOp9ss.js.br +0 -0
- package/dist/_frontend/assets/tsMode-BsjOp9ss.js.gz +0 -0
- package/dist/_frontend/assets/{typescript-BExfm66c.js → typescript-CpIJvyBH.js} +1 -1
- package/dist/_frontend/assets/typescript-CpIJvyBH.js.br +0 -0
- package/dist/_frontend/assets/typescript-CpIJvyBH.js.gz +0 -0
- package/dist/_frontend/assets/{workers-Cn25A5Lb.js → workers-C_uhAUan.js} +1 -1
- package/dist/_frontend/assets/workers-C_uhAUan.js.br +0 -0
- package/dist/_frontend/assets/workers-C_uhAUan.js.gz +0 -0
- package/dist/_frontend/assets/{xml-D2IDD-hb.js → xml-BxHi2HCJ.js} +1 -1
- package/dist/_frontend/assets/xml-BxHi2HCJ.js.br +0 -0
- package/dist/_frontend/assets/xml-BxHi2HCJ.js.gz +0 -0
- package/dist/_frontend/assets/{yaml-CY4c2A0Y.js → yaml-DyyH_CDu.js} +1 -1
- package/dist/_frontend/assets/yaml-DyyH_CDu.js.br +0 -0
- package/dist/_frontend/assets/yaml-DyyH_CDu.js.gz +0 -0
- package/dist/_frontend/index.html +1 -1
- package/dist/controller-main.js +101 -108
- package/dist/controller-main.js.map +1 -1
- package/dist/main.js +459 -277
- 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-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.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
|
}
|
|
@@ -10017,7 +10133,7 @@ function readAccessTokenCookie(params) {
|
|
|
10017
10133
|
|
|
10018
10134
|
// src/auth/middleware.ts
|
|
10019
10135
|
init_config();
|
|
10020
|
-
import { HTTPException as
|
|
10136
|
+
import { HTTPException as HTTPException6 } from "hono/http-exception";
|
|
10021
10137
|
import { jwtVerify } from "jose";
|
|
10022
10138
|
|
|
10023
10139
|
// src/auth/emailAllowlist.ts
|
|
@@ -10269,20 +10385,29 @@ function createAdminAuthMiddleware(authenticator) {
|
|
|
10269
10385
|
return async (c, next) => {
|
|
10270
10386
|
const requestContext = await authenticator.authenticate(c);
|
|
10271
10387
|
if (!hasAdminRole(requestContext)) {
|
|
10272
|
-
throw new
|
|
10388
|
+
throw new HTTPException6(403, { message: "Admin access required" });
|
|
10273
10389
|
}
|
|
10274
10390
|
c.set("request_context", requestContext);
|
|
10275
10391
|
return next();
|
|
10276
10392
|
};
|
|
10277
10393
|
}
|
|
10394
|
+
function createApiKeyAuthMiddleware(apiKey) {
|
|
10395
|
+
return async (c, next) => {
|
|
10396
|
+
const token = readBearerToken(c);
|
|
10397
|
+
if (token === void 0 || token !== apiKey) {
|
|
10398
|
+
throw new HTTPException6(401, { message: "Invalid service credential" });
|
|
10399
|
+
}
|
|
10400
|
+
return next();
|
|
10401
|
+
};
|
|
10402
|
+
}
|
|
10278
10403
|
var truefoundryAdminMiddleware = async (c, next) => {
|
|
10279
10404
|
const token = extractRequestToken(c);
|
|
10280
10405
|
if (config_default.STANDALONE) {
|
|
10281
|
-
throw new
|
|
10406
|
+
throw new HTTPException6(403, { message: "Service API key required" });
|
|
10282
10407
|
}
|
|
10283
10408
|
const apiKey = config_default.TRUEFOUNDRY_API_KEY;
|
|
10284
10409
|
if (apiKey === void 0 || token === void 0 || token !== apiKey) {
|
|
10285
|
-
throw new
|
|
10410
|
+
throw new HTTPException6(403, { message: "Service API key required" });
|
|
10286
10411
|
}
|
|
10287
10412
|
c.set("request_context", {
|
|
10288
10413
|
tenant_id: "system",
|
|
@@ -11434,7 +11559,7 @@ function createMcpOAuthRouter(deps) {
|
|
|
11434
11559
|
// src/apis/mcpServers.ts
|
|
11435
11560
|
import { OpenAPIHono as OpenAPIHono7 } from "@hono/zod-openapi";
|
|
11436
11561
|
import { extractErrorLogFields as extractErrorLogFields5, isAuthRequired, McpConnectionError as McpConnectionError4, RemoteMCP } from "@truefoundry/trueforge-core/core";
|
|
11437
|
-
import { HTTPException as
|
|
11562
|
+
import { HTTPException as HTTPException7 } from "hono/http-exception";
|
|
11438
11563
|
init_config();
|
|
11439
11564
|
init_mcpServerStore();
|
|
11440
11565
|
|
|
@@ -12009,7 +12134,7 @@ function createMcpServersRouter(deps) {
|
|
|
12009
12134
|
});
|
|
12010
12135
|
return c.json(authStatus, 200);
|
|
12011
12136
|
} catch (error) {
|
|
12012
|
-
if (error instanceof
|
|
12137
|
+
if (error instanceof HTTPException7) {
|
|
12013
12138
|
throw error;
|
|
12014
12139
|
}
|
|
12015
12140
|
if (error instanceof McpServerNotFoundError) {
|
|
@@ -12289,10 +12414,14 @@ function createPermissionsRouter(deps) {
|
|
|
12289
12414
|
|
|
12290
12415
|
// src/apis/schedules.ts
|
|
12291
12416
|
import { OpenAPIHono as OpenAPIHono11 } from "@hono/zod-openapi";
|
|
12292
|
-
import {
|
|
12417
|
+
import {
|
|
12418
|
+
InvalidPageTokenError
|
|
12419
|
+
} from "@truefoundry/trueforge-core/agent-session";
|
|
12293
12420
|
|
|
12294
12421
|
// src/controller/scheduleDispatch.ts
|
|
12422
|
+
init_config();
|
|
12295
12423
|
init_scheduleStore();
|
|
12424
|
+
import { TrueForge } from "@truefoundry/trueforge-sdk";
|
|
12296
12425
|
init_cron();
|
|
12297
12426
|
init_schedule();
|
|
12298
12427
|
var DISPATCH_BATCH_LIMIT = 20;
|
|
@@ -12301,6 +12430,20 @@ function scheduleRunFailureReason(error) {
|
|
|
12301
12430
|
}
|
|
12302
12431
|
var SCHEDULE_DISPATCH_INTERVAL_MS = 6e4;
|
|
12303
12432
|
var SCHEDULE_DISPATCH_LOOP_NAME = "schedule-dispatch";
|
|
12433
|
+
function createHttpScheduleRunExecutor() {
|
|
12434
|
+
const tls = {
|
|
12435
|
+
enabled: config_default.TRUEFORGE_MTLS_ENABLED,
|
|
12436
|
+
dir: config_default.TRUEFORGE_MTLS_CERTS_DIR
|
|
12437
|
+
};
|
|
12438
|
+
const tlsFetch = createTlsFetch(tls);
|
|
12439
|
+
const client = new TrueForge({
|
|
12440
|
+
baseUrl: normalizeTlsUrl({ url: config_default.SERVER_URL, enabled: tls.enabled }),
|
|
12441
|
+
token: config_default.TRUEFORGE_API_KEY,
|
|
12442
|
+
timeoutInSeconds: 60,
|
|
12443
|
+
...tlsFetch === void 0 ? {} : { fetch: tlsFetch }
|
|
12444
|
+
});
|
|
12445
|
+
return (scheduleRunId) => client.internal.schedules.executeRun({ scheduleRunId });
|
|
12446
|
+
}
|
|
12304
12447
|
var ScheduleAgentNotFoundError = class extends Error {
|
|
12305
12448
|
agent_name;
|
|
12306
12449
|
constructor(agent_name, options) {
|
|
@@ -12309,29 +12452,23 @@ var ScheduleAgentNotFoundError = class extends Error {
|
|
|
12309
12452
|
this.agent_name = agent_name;
|
|
12310
12453
|
}
|
|
12311
12454
|
};
|
|
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
|
-
}
|
|
12455
|
+
var ScheduleRunNotFoundError = class extends Error {
|
|
12456
|
+
constructor(scheduleRunId, options) {
|
|
12457
|
+
super(`Schedule run not found: ${scheduleRunId}`, options);
|
|
12458
|
+
this.name = "ScheduleRunNotFoundError";
|
|
12459
|
+
}
|
|
12460
|
+
};
|
|
12461
|
+
var ScheduleNotFoundError = class extends Error {
|
|
12462
|
+
constructor(scheduleId, options) {
|
|
12463
|
+
super(`Schedule not found: ${scheduleId}`, options);
|
|
12464
|
+
this.name = "ScheduleNotFoundError";
|
|
12465
|
+
}
|
|
12466
|
+
};
|
|
12329
12467
|
async function startScheduleRun(params) {
|
|
12330
12468
|
const {
|
|
12331
12469
|
item: { run, schedule },
|
|
12332
12470
|
sessions,
|
|
12333
|
-
agentStore
|
|
12334
|
-
startTurn
|
|
12471
|
+
agentStore
|
|
12335
12472
|
} = params;
|
|
12336
12473
|
const named = await agentStore.getAgent({ tenant_id: schedule.tenant_id, name: schedule.agent_name });
|
|
12337
12474
|
if (named === void 0) {
|
|
@@ -12346,14 +12483,27 @@ async function startScheduleRun(params) {
|
|
|
12346
12483
|
});
|
|
12347
12484
|
const { data: turns } = await session.listTurns({ limit: 1 });
|
|
12348
12485
|
if (turns.length > 0) {
|
|
12349
|
-
return;
|
|
12486
|
+
return void 0;
|
|
12350
12487
|
}
|
|
12351
|
-
|
|
12488
|
+
return {
|
|
12352
12489
|
session,
|
|
12353
12490
|
input: [{ type: "user.message", content: schedule.manifest.task }],
|
|
12354
12491
|
previous_turn_id: "none",
|
|
12355
|
-
userRef: schedule.created_by_subject.subject_id
|
|
12356
|
-
|
|
12492
|
+
userRef: schedule.created_by_subject.subject_id,
|
|
12493
|
+
agent: named
|
|
12494
|
+
};
|
|
12495
|
+
}
|
|
12496
|
+
async function loadScheduleDispatchItem(params) {
|
|
12497
|
+
const { scheduleRunId, scheduleStore } = params;
|
|
12498
|
+
const run = await scheduleStore.getRunById({ id: scheduleRunId });
|
|
12499
|
+
if (run === void 0) {
|
|
12500
|
+
throw new ScheduleRunNotFoundError(scheduleRunId);
|
|
12501
|
+
}
|
|
12502
|
+
const schedule = await scheduleStore.getSchedule({ tenant_id: run.tenant_id, id: run.schedule_id });
|
|
12503
|
+
if (schedule === void 0) {
|
|
12504
|
+
throw new ScheduleNotFoundError(run.schedule_id);
|
|
12505
|
+
}
|
|
12506
|
+
return { run, schedule };
|
|
12357
12507
|
}
|
|
12358
12508
|
async function finishScheduledRun(params) {
|
|
12359
12509
|
const { store, withTransaction, run, status, reason, now: now2 } = params;
|
|
@@ -12452,14 +12602,15 @@ async function dispatchScheduledRuns(params) {
|
|
|
12452
12602
|
return { dispatched, failed };
|
|
12453
12603
|
}
|
|
12454
12604
|
function scheduleDispatchLoop(params) {
|
|
12455
|
-
const { scheduleStore,
|
|
12605
|
+
const { scheduleStore, withTransaction, logger } = params;
|
|
12606
|
+
const executeRun = createHttpScheduleRunExecutor();
|
|
12456
12607
|
return {
|
|
12457
12608
|
name: SCHEDULE_DISPATCH_LOOP_NAME,
|
|
12458
12609
|
intervalMs: SCHEDULE_DISPATCH_INTERVAL_MS,
|
|
12459
12610
|
async tick(signal) {
|
|
12460
12611
|
const result = await dispatchScheduledRuns({
|
|
12461
12612
|
store: scheduleStore,
|
|
12462
|
-
onTriggered:
|
|
12613
|
+
onTriggered: (item) => executeRun(item.run.id),
|
|
12463
12614
|
logger,
|
|
12464
12615
|
withTransaction,
|
|
12465
12616
|
signal
|
|
@@ -12604,6 +12755,36 @@ var createScheduleRunRoute = createRoute10({
|
|
|
12604
12755
|
}
|
|
12605
12756
|
}
|
|
12606
12757
|
});
|
|
12758
|
+
var executeScheduleRunRoute = createRoute10({
|
|
12759
|
+
method: "post",
|
|
12760
|
+
path: "/runs/execute",
|
|
12761
|
+
tags: ["Internal" /* INTERNAL */],
|
|
12762
|
+
summary: "Execute a schedule run",
|
|
12763
|
+
description: "Execute a persisted schedule run using its saved schedule and agent.",
|
|
12764
|
+
"x-fern-sdk-group-name": ["internal", "schedules"],
|
|
12765
|
+
"x-fern-sdk-method-name": "execute_run",
|
|
12766
|
+
request: {
|
|
12767
|
+
body: {
|
|
12768
|
+
content: { "application/json": { schema: ExecuteScheduleRunRequestSchema } },
|
|
12769
|
+
required: true
|
|
12770
|
+
}
|
|
12771
|
+
},
|
|
12772
|
+
responses: {
|
|
12773
|
+
204: { description: "Run executed or already has a turn." },
|
|
12774
|
+
401: {
|
|
12775
|
+
content: { "application/json": { schema: RequestErrorResponseSchema } },
|
|
12776
|
+
description: "Invalid service credential."
|
|
12777
|
+
},
|
|
12778
|
+
404: {
|
|
12779
|
+
content: { "application/json": { schema: RequestErrorResponseSchema } },
|
|
12780
|
+
description: "Run, schedule, or agent not found."
|
|
12781
|
+
},
|
|
12782
|
+
422: {
|
|
12783
|
+
content: { "application/json": { schema: RequestErrorResponseSchema } },
|
|
12784
|
+
description: "The run cannot be executed."
|
|
12785
|
+
}
|
|
12786
|
+
}
|
|
12787
|
+
});
|
|
12607
12788
|
var createScheduleRoute = createRoute10({
|
|
12608
12789
|
method: "post",
|
|
12609
12790
|
path: "/",
|
|
@@ -12754,7 +12935,7 @@ import {
|
|
|
12754
12935
|
SandboxError as SandboxError2,
|
|
12755
12936
|
VercelAILLM
|
|
12756
12937
|
} from "@truefoundry/trueforge-core/core";
|
|
12757
|
-
import { HTTPException as
|
|
12938
|
+
import { HTTPException as HTTPException9 } from "hono/http-exception";
|
|
12758
12939
|
import { streamSSE } from "hono/streaming";
|
|
12759
12940
|
|
|
12760
12941
|
// src/routes/turnRoutes.ts
|
|
@@ -13758,14 +13939,14 @@ var StreamGoneError = class extends Error {
|
|
|
13758
13939
|
|
|
13759
13940
|
// src/runtime/peeringIds.ts
|
|
13760
13941
|
init_id();
|
|
13761
|
-
import { HTTPException as
|
|
13942
|
+
import { HTTPException as HTTPException8 } from "hono/http-exception";
|
|
13762
13943
|
function mintPeeredTurnId(executorId) {
|
|
13763
13944
|
return `${newId()}.${executorId}`;
|
|
13764
13945
|
}
|
|
13765
13946
|
function executorFromTurnId(turnId) {
|
|
13766
13947
|
const parts = turnId.split(".");
|
|
13767
13948
|
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
13768
|
-
throw new
|
|
13949
|
+
throw new HTTPException8(400, { message: `ID ${turnId} is not a valid turn id` });
|
|
13769
13950
|
}
|
|
13770
13951
|
return parts[1];
|
|
13771
13952
|
}
|
|
@@ -13859,7 +14040,7 @@ function createTurnResolver(deps) {
|
|
|
13859
14040
|
userRef
|
|
13860
14041
|
});
|
|
13861
14042
|
if (connection === void 0) {
|
|
13862
|
-
throw new
|
|
14043
|
+
throw new HTTPException9(422, {
|
|
13863
14044
|
message: `Unknown MCP server "${name}" \u2014 not configured`
|
|
13864
14045
|
});
|
|
13865
14046
|
}
|
|
@@ -13875,7 +14056,7 @@ function createTurnResolver(deps) {
|
|
|
13875
14056
|
sessionId
|
|
13876
14057
|
});
|
|
13877
14058
|
if (provider === void 0) {
|
|
13878
|
-
throw new
|
|
14059
|
+
throw new HTTPException9(422, {
|
|
13879
14060
|
message: "no sandbox provider configured \u2014 PUT /settings/sandbox-providers"
|
|
13880
14061
|
});
|
|
13881
14062
|
}
|
|
@@ -13886,7 +14067,7 @@ function createTurnResolver(deps) {
|
|
|
13886
14067
|
if (carriedSandboxId === void 0 && provider.type !== "local") {
|
|
13887
14068
|
const status = await checkSnapshotStatus({ store: sandboxProviderStore, tenant_id, logger });
|
|
13888
14069
|
if (status?.status !== "ready") {
|
|
13889
|
-
throw new
|
|
14070
|
+
throw new HTTPException9(422, {
|
|
13890
14071
|
message: status?.status === "failed" ? `sandbox image build failed (${status.status_reason ?? "unknown error"})` : "sandbox image is activating \u2014 retry shortly"
|
|
13891
14072
|
});
|
|
13892
14073
|
}
|
|
@@ -13908,7 +14089,7 @@ function createTurnResolver(deps) {
|
|
|
13908
14089
|
agent: async (agentId) => {
|
|
13909
14090
|
const record = await agentStore.getAgent({ tenant_id, id: agentId });
|
|
13910
14091
|
if (record === void 0) {
|
|
13911
|
-
throw new
|
|
14092
|
+
throw new HTTPException9(422, { message: `Agent not found: ${agentId}` });
|
|
13912
14093
|
}
|
|
13913
14094
|
return record.manifest;
|
|
13914
14095
|
},
|
|
@@ -14040,7 +14221,7 @@ async function startTurnInProcess(params) {
|
|
|
14040
14221
|
return turn;
|
|
14041
14222
|
}
|
|
14042
14223
|
function getTurnExecutionError(error) {
|
|
14043
|
-
if (error instanceof
|
|
14224
|
+
if (error instanceof HTTPException9) {
|
|
14044
14225
|
if (error.status === 400 || error.status === 404 || error.status === 422) {
|
|
14045
14226
|
return { status: error.status, message: error.message };
|
|
14046
14227
|
}
|
|
@@ -14069,7 +14250,7 @@ function resolveAfterSequenceNumber(c, bodyAfterSequenceNumber) {
|
|
|
14069
14250
|
if (lastEventId) {
|
|
14070
14251
|
const sequenceNumber = Number(lastEventId);
|
|
14071
14252
|
if (!Number.isInteger(sequenceNumber) || sequenceNumber < 0) {
|
|
14072
|
-
throw new
|
|
14253
|
+
throw new HTTPException9(400, { message: "Invalid Last-Event-Id header" });
|
|
14073
14254
|
}
|
|
14074
14255
|
return sequenceNumber;
|
|
14075
14256
|
}
|
|
@@ -14353,7 +14534,7 @@ function createTurnsRouter(deps) {
|
|
|
14353
14534
|
await turnEventStream.assertSubscribable();
|
|
14354
14535
|
} catch (error) {
|
|
14355
14536
|
if (error instanceof StreamGoneError) {
|
|
14356
|
-
throw new
|
|
14537
|
+
throw new HTTPException9(412, { message: error.message, cause: error });
|
|
14357
14538
|
}
|
|
14358
14539
|
throw error;
|
|
14359
14540
|
}
|
|
@@ -14403,6 +14584,33 @@ function createTurnsRouter(deps) {
|
|
|
14403
14584
|
}
|
|
14404
14585
|
|
|
14405
14586
|
// src/apis/schedules.ts
|
|
14587
|
+
async function startScheduleRunOnRequest(params) {
|
|
14588
|
+
const { c, item, deps } = params;
|
|
14589
|
+
const prepared = await startScheduleRun({
|
|
14590
|
+
item,
|
|
14591
|
+
sessions: deps.sessions,
|
|
14592
|
+
agentStore: deps.agentStore
|
|
14593
|
+
});
|
|
14594
|
+
if (prepared === void 0) {
|
|
14595
|
+
return;
|
|
14596
|
+
}
|
|
14597
|
+
await startTurnInProcess({
|
|
14598
|
+
session: prepared.session,
|
|
14599
|
+
input: prepared.input,
|
|
14600
|
+
previous_turn_id: prepared.previous_turn_id,
|
|
14601
|
+
userRef: prepared.userRef,
|
|
14602
|
+
deps: {
|
|
14603
|
+
activeTurns: deps.activeTurns,
|
|
14604
|
+
eventSubscriptions: deps.eventSubscriptions,
|
|
14605
|
+
agentStore: deps.agentStore,
|
|
14606
|
+
modelProviderStore: deps.resolveModelProviderStore(c, prepared.agent),
|
|
14607
|
+
mcpServerStore: deps.resolveMcpServerStore(c, prepared.agent),
|
|
14608
|
+
sandboxProviderStore: deps.resolveSandboxProviderStore(c),
|
|
14609
|
+
skillStore: deps.turnSkillsResolverStore,
|
|
14610
|
+
logger: deps.logger
|
|
14611
|
+
}
|
|
14612
|
+
});
|
|
14613
|
+
}
|
|
14406
14614
|
function toWireSchedule(record) {
|
|
14407
14615
|
return {
|
|
14408
14616
|
id: record.id,
|
|
@@ -14456,6 +14664,34 @@ var FORBIDDEN_SCHEDULE_ACCESS = "Only the schedule creator can access this sched
|
|
|
14456
14664
|
function isScheduleOwner(requestContext, created_by_subject_id) {
|
|
14457
14665
|
return requestContext.subject.id === created_by_subject_id;
|
|
14458
14666
|
}
|
|
14667
|
+
function createScheduleExecutionRouter(deps) {
|
|
14668
|
+
const handler = async (c) => {
|
|
14669
|
+
const { schedule_run_id: scheduleRunId } = c.req.valid("json");
|
|
14670
|
+
try {
|
|
14671
|
+
const item = await loadScheduleDispatchItem({
|
|
14672
|
+
scheduleRunId,
|
|
14673
|
+
scheduleStore: deps.scheduleStore
|
|
14674
|
+
});
|
|
14675
|
+
c.set(
|
|
14676
|
+
"request_context",
|
|
14677
|
+
requestContextFromCreatedBySubject({
|
|
14678
|
+
tenant_id: item.schedule.tenant_id,
|
|
14679
|
+
created_by_subject: item.schedule.created_by_subject
|
|
14680
|
+
})
|
|
14681
|
+
);
|
|
14682
|
+
await startScheduleRunOnRequest({ c, item, deps });
|
|
14683
|
+
} catch (error) {
|
|
14684
|
+
if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
|
|
14685
|
+
return c.json({ error: { message: error.message } }, 404);
|
|
14686
|
+
}
|
|
14687
|
+
throw error;
|
|
14688
|
+
}
|
|
14689
|
+
return c.body(null, 204);
|
|
14690
|
+
};
|
|
14691
|
+
const router = new OpenAPIHono11();
|
|
14692
|
+
router.openapi(executeScheduleRunRoute, handler);
|
|
14693
|
+
return router;
|
|
14694
|
+
}
|
|
14459
14695
|
function createSchedulesRouter(deps) {
|
|
14460
14696
|
const listHandler = async (c) => {
|
|
14461
14697
|
const { agent_names: agentNames, limit, page_token: pageToken, created_by_me: createdByMe } = c.req.valid("query");
|
|
@@ -14563,14 +14799,7 @@ function createSchedulesRouter(deps) {
|
|
|
14563
14799
|
throw error;
|
|
14564
14800
|
}
|
|
14565
14801
|
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
|
-
});
|
|
14802
|
+
await startScheduleRunOnRequest({ c, item: { run, schedule }, deps });
|
|
14574
14803
|
} catch (error) {
|
|
14575
14804
|
await deps.scheduleStore.updateRunStatus({
|
|
14576
14805
|
tenant_id: requestContext.tenant_id,
|
|
@@ -14578,7 +14807,7 @@ function createSchedulesRouter(deps) {
|
|
|
14578
14807
|
status: "failed",
|
|
14579
14808
|
reason: scheduleRunFailureReason(error)
|
|
14580
14809
|
});
|
|
14581
|
-
if (error instanceof ScheduleAgentNotFoundError) {
|
|
14810
|
+
if (error instanceof ScheduleRunNotFoundError || error instanceof ScheduleNotFoundError || error instanceof ScheduleAgentNotFoundError) {
|
|
14582
14811
|
return c.json({ error: { message: error.message } }, 404);
|
|
14583
14812
|
}
|
|
14584
14813
|
const turnError = getTurnExecutionError(error);
|
|
@@ -15947,7 +16176,8 @@ function createAvailableSkillsRouter(deps) {
|
|
|
15947
16176
|
});
|
|
15948
16177
|
router.openapi(listSkillVersionsRoute, async (c) => {
|
|
15949
16178
|
const { name } = c.req.valid("query");
|
|
15950
|
-
|
|
16179
|
+
const skillVersions = await deps.resolveSkillStore(c).listSkillVersions({ name });
|
|
16180
|
+
return c.json({ data: skillVersions }, 200);
|
|
15951
16181
|
});
|
|
15952
16182
|
return router;
|
|
15953
16183
|
}
|
|
@@ -16073,7 +16303,7 @@ function createAppErrorHandler(params) {
|
|
|
16073
16303
|
if (error instanceof InvalidCronError) {
|
|
16074
16304
|
return c.json({ error: { message: error.message } }, 400);
|
|
16075
16305
|
}
|
|
16076
|
-
if (error instanceof
|
|
16306
|
+
if (error instanceof HTTPException10) {
|
|
16077
16307
|
if (error.status >= 500) {
|
|
16078
16308
|
params.logger.error("Server API error", {
|
|
16079
16309
|
status: error.status,
|
|
@@ -16122,7 +16352,20 @@ function createServerApp(deps) {
|
|
|
16122
16352
|
const app = new OpenAPIHono18({ defaultHook: zodValidationHook });
|
|
16123
16353
|
const authMiddleware = createAuthMiddleware(deps.authenticator);
|
|
16124
16354
|
const adminAuthMiddleware = createAdminAuthMiddleware(deps.authenticator);
|
|
16355
|
+
const scheduleExecutionAuthMiddleware = createApiKeyAuthMiddleware(config_default.TRUEFORGE_API_KEY);
|
|
16125
16356
|
const authEnabled = getTrueForgeAuthMode() !== "standalone" /* Standalone */;
|
|
16357
|
+
const scheduleTurnDeps = {
|
|
16358
|
+
scheduleStore: deps.scheduleStore,
|
|
16359
|
+
sessions: deps.sessions,
|
|
16360
|
+
agentStore: deps.agentStore,
|
|
16361
|
+
eventSubscriptions: deps.eventSubscriptions,
|
|
16362
|
+
logger: deps.logger,
|
|
16363
|
+
resolveModelProviderStore: deps.resolveModelProviderStore,
|
|
16364
|
+
resolveMcpServerStore: deps.resolveMcpServerStore,
|
|
16365
|
+
resolveSandboxProviderStore: deps.resolveSandboxProviderStore,
|
|
16366
|
+
activeTurns: deps.activeTurns,
|
|
16367
|
+
turnSkillsResolverStore: deps.turnSkillsResolverStore
|
|
16368
|
+
};
|
|
16126
16369
|
if (config_default.ACCESS_LOGS) {
|
|
16127
16370
|
app.use("*", createAccessLogMiddleware(deps.logger));
|
|
16128
16371
|
}
|
|
@@ -16222,23 +16465,16 @@ function createServerApp(deps) {
|
|
|
16222
16465
|
authMiddleware
|
|
16223
16466
|
)
|
|
16224
16467
|
);
|
|
16468
|
+
app.route(
|
|
16469
|
+
"/api/internal/schedules",
|
|
16470
|
+
withAuth(createScheduleExecutionRouter(scheduleTurnDeps), scheduleExecutionAuthMiddleware)
|
|
16471
|
+
);
|
|
16225
16472
|
app.route(
|
|
16226
16473
|
"/api/v1/schedules",
|
|
16227
16474
|
withAuth(
|
|
16228
16475
|
createSchedulesRouter({
|
|
16229
|
-
|
|
16476
|
+
...scheduleTurnDeps,
|
|
16230
16477
|
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
16478
|
withTransaction: deps.withTransaction,
|
|
16243
16479
|
resolveRequestContext,
|
|
16244
16480
|
authorizer: deps.authorizer
|
|
@@ -16425,87 +16661,6 @@ init_config();
|
|
|
16425
16661
|
|
|
16426
16662
|
// src/truefoundry/TrueFoundryAuthenticator.ts
|
|
16427
16663
|
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
16664
|
var TrueFoundryAuthenticator = class {
|
|
16510
16665
|
#client;
|
|
16511
16666
|
constructor(client) {
|
|
@@ -16839,9 +16994,6 @@ var SkillCatalog = class _SkillCatalog {
|
|
|
16839
16994
|
// src/main.ts
|
|
16840
16995
|
init_config();
|
|
16841
16996
|
|
|
16842
|
-
// src/controller.ts
|
|
16843
|
-
import { TrueForge } from "@truefoundry/trueforge-sdk";
|
|
16844
|
-
|
|
16845
16997
|
// src/controller/Controller.ts
|
|
16846
16998
|
var CONTROLLER_STOPPED = "controller-stopped";
|
|
16847
16999
|
var Controller = class {
|
|
@@ -16937,28 +17089,16 @@ var Controller = class {
|
|
|
16937
17089
|
};
|
|
16938
17090
|
|
|
16939
17091
|
// 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
17092
|
function createController(params) {
|
|
16950
|
-
const { scheduleStore, withTransaction, logger, baseUrl } = params;
|
|
16951
|
-
const tls = params.tls ?? { enabled: false, dir: "" };
|
|
16952
17093
|
return new Controller({
|
|
16953
17094
|
loops: [
|
|
16954
17095
|
scheduleDispatchLoop({
|
|
16955
|
-
scheduleStore,
|
|
16956
|
-
|
|
16957
|
-
|
|
16958
|
-
logger
|
|
17096
|
+
scheduleStore: params.scheduleStore,
|
|
17097
|
+
withTransaction: params.withTransaction,
|
|
17098
|
+
logger: params.logger
|
|
16959
17099
|
})
|
|
16960
17100
|
],
|
|
16961
|
-
logger
|
|
17101
|
+
logger: params.logger
|
|
16962
17102
|
});
|
|
16963
17103
|
}
|
|
16964
17104
|
|
|
@@ -17797,11 +17937,11 @@ var TrueFoundryMcpServerStore = class {
|
|
|
17797
17937
|
this.#client = input.client;
|
|
17798
17938
|
this.#resolveAccessToken = accessTokenForRequest({
|
|
17799
17939
|
client: input.client,
|
|
17800
|
-
|
|
17940
|
+
requestContext: asTrueFoundryRequestContext(input.requestContext),
|
|
17801
17941
|
agent: input.agent,
|
|
17802
17942
|
logger: input.logger
|
|
17803
17943
|
});
|
|
17804
|
-
this.#subject = input.
|
|
17944
|
+
this.#subject = input.requestContext.subject;
|
|
17805
17945
|
this.#perServerHeaders = input.perServerHeaders ?? {};
|
|
17806
17946
|
}
|
|
17807
17947
|
/** Gateway Bearer (+ optional per-server overrides); SFY authorize first, else authRequired. */
|
|
@@ -17968,7 +18108,7 @@ var TrueFoundryModelProviderStore = class {
|
|
|
17968
18108
|
this.#client = input.client;
|
|
17969
18109
|
this.#resolveAccessToken = accessTokenForRequest({
|
|
17970
18110
|
client: input.client,
|
|
17971
|
-
|
|
18111
|
+
requestContext: asTrueFoundryRequestContext(input.requestContext),
|
|
17972
18112
|
agent: input.agent,
|
|
17973
18113
|
logger: input.logger
|
|
17974
18114
|
});
|
|
@@ -18217,10 +18357,60 @@ function toRegistryRecord(tenant_id, skill) {
|
|
|
18217
18357
|
updated_at: now2
|
|
18218
18358
|
};
|
|
18219
18359
|
}
|
|
18220
|
-
var
|
|
18360
|
+
var TrueFoundryAdminSkillStore = class {
|
|
18361
|
+
#client;
|
|
18362
|
+
constructor(input) {
|
|
18363
|
+
this.#client = input.client;
|
|
18364
|
+
}
|
|
18365
|
+
async resolveTurnSkills(input) {
|
|
18366
|
+
const { skills } = input;
|
|
18367
|
+
if (skills.length === 0) {
|
|
18368
|
+
return [];
|
|
18369
|
+
}
|
|
18370
|
+
const resolved = await this.#client.resolveAgentSkillVersions({
|
|
18371
|
+
accessToken: this.#client.apiKey,
|
|
18372
|
+
skills: skills.map((skill) => ({
|
|
18373
|
+
fqn: skill.name,
|
|
18374
|
+
include_skill_md_content: skill.preload,
|
|
18375
|
+
include_presigned_url: true
|
|
18376
|
+
}))
|
|
18377
|
+
});
|
|
18378
|
+
const byFqn = new Map(resolved.map((row) => [row.fqn, row]));
|
|
18379
|
+
return skills.map((skill) => {
|
|
18380
|
+
const row = byFqn.get(skill.name);
|
|
18381
|
+
if (row === void 0) {
|
|
18382
|
+
throw new HTTPException18(422, {
|
|
18383
|
+
message: `Unknown skill "${skill.name}" \u2014 not configured`
|
|
18384
|
+
});
|
|
18385
|
+
}
|
|
18386
|
+
if (row.presigned_url === void 0) {
|
|
18387
|
+
throw new HTTPException18(422, {
|
|
18388
|
+
message: `Skill "${skill.name}" did not return a presigned URL`
|
|
18389
|
+
});
|
|
18390
|
+
}
|
|
18391
|
+
const skillMdContent = skill.preload ? row.skill_md_content ?? null : null;
|
|
18392
|
+
if (skill.preload && (skillMdContent === null || skillMdContent.length === 0)) {
|
|
18393
|
+
throw new HTTPException18(422, {
|
|
18394
|
+
message: `Skill "${skill.name}" did not return SKILL.md for preload`
|
|
18395
|
+
});
|
|
18396
|
+
}
|
|
18397
|
+
return {
|
|
18398
|
+
type: "registry",
|
|
18399
|
+
name: row.name,
|
|
18400
|
+
description: row.description,
|
|
18401
|
+
fqn: row.fqn,
|
|
18402
|
+
preload: skill.preload,
|
|
18403
|
+
skillMdContent,
|
|
18404
|
+
presignedUrl: row.presigned_url
|
|
18405
|
+
};
|
|
18406
|
+
});
|
|
18407
|
+
}
|
|
18408
|
+
};
|
|
18409
|
+
var TrueFoundrySkillStore = class extends TrueFoundryAdminSkillStore {
|
|
18221
18410
|
#client;
|
|
18222
18411
|
#resolveAccessToken;
|
|
18223
18412
|
constructor(input) {
|
|
18413
|
+
super(input);
|
|
18224
18414
|
this.#client = input.client;
|
|
18225
18415
|
this.#resolveAccessToken = callerAccessToken(input.context);
|
|
18226
18416
|
}
|
|
@@ -18299,49 +18489,6 @@ var TrueFoundrySkillStore = class {
|
|
|
18299
18489
|
seenNames.add(row.name);
|
|
18300
18490
|
}
|
|
18301
18491
|
}
|
|
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
18492
|
};
|
|
18346
18493
|
|
|
18347
18494
|
// src/main.ts
|
|
@@ -18390,19 +18537,25 @@ function buildResolveSkillStore(options) {
|
|
|
18390
18537
|
if (client === void 0) {
|
|
18391
18538
|
return () => persistenceStore;
|
|
18392
18539
|
}
|
|
18393
|
-
return (
|
|
18540
|
+
return (requestContext) => new TrueFoundrySkillStore({
|
|
18394
18541
|
client,
|
|
18395
|
-
context:
|
|
18542
|
+
context: requestContext
|
|
18396
18543
|
});
|
|
18397
18544
|
}
|
|
18545
|
+
function buildTurnSkillsResolverStore(options) {
|
|
18546
|
+
const { persistenceStore, client } = options;
|
|
18547
|
+
if (client) {
|
|
18548
|
+
return new TrueFoundryAdminSkillStore({ client });
|
|
18549
|
+
}
|
|
18550
|
+
return persistenceStore;
|
|
18551
|
+
}
|
|
18398
18552
|
function buildResolveModelProviderStore(options) {
|
|
18399
|
-
return (
|
|
18553
|
+
return (rc, runAsAgent) => {
|
|
18400
18554
|
const { persistenceStore, client } = options;
|
|
18401
18555
|
if (client) {
|
|
18402
|
-
const requestContext = resolveRequestContext(c);
|
|
18403
18556
|
return new TrueFoundryModelProviderStore({
|
|
18404
18557
|
client,
|
|
18405
|
-
|
|
18558
|
+
requestContext: rc,
|
|
18406
18559
|
agent: runAsAgent,
|
|
18407
18560
|
logger: options.logger
|
|
18408
18561
|
});
|
|
@@ -18411,35 +18564,33 @@ function buildResolveModelProviderStore(options) {
|
|
|
18411
18564
|
};
|
|
18412
18565
|
}
|
|
18413
18566
|
function buildResolveMcpServerStore(options) {
|
|
18414
|
-
|
|
18415
|
-
|
|
18416
|
-
|
|
18417
|
-
|
|
18418
|
-
|
|
18567
|
+
const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
|
|
18568
|
+
store: options.persistenceStore,
|
|
18569
|
+
tokenStore: options.tokenStore,
|
|
18570
|
+
clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
|
|
18571
|
+
});
|
|
18572
|
+
return (rc, runAsAgent, perServerHeaders) => {
|
|
18573
|
+
const { client } = options;
|
|
18574
|
+
if (client) {
|
|
18419
18575
|
return new TrueFoundryMcpServerStore({
|
|
18420
18576
|
client,
|
|
18421
|
-
|
|
18577
|
+
requestContext: rc,
|
|
18422
18578
|
agent: runAsAgent,
|
|
18423
18579
|
logger: options.logger,
|
|
18424
|
-
perServerHeaders
|
|
18580
|
+
...perServerHeaders === void 0 ? {} : { perServerHeaders }
|
|
18425
18581
|
});
|
|
18426
18582
|
}
|
|
18427
|
-
const withAuthMcpPersistenceStore = new McpServerWithAuthStore({
|
|
18428
|
-
store: persistenceStore,
|
|
18429
|
-
tokenStore,
|
|
18430
|
-
clientName: configuration2.MCP_DCR_OAUTH_CLIENT_NAME
|
|
18431
|
-
});
|
|
18432
18583
|
return withAuthMcpPersistenceStore;
|
|
18433
18584
|
};
|
|
18434
18585
|
}
|
|
18435
18586
|
function buildResolveAgentStore(options) {
|
|
18436
18587
|
const { persistenceStore, client, db } = options;
|
|
18437
|
-
return (
|
|
18588
|
+
return (rc) => {
|
|
18438
18589
|
if (client) {
|
|
18439
18590
|
return new TrueFoundryAgentStore({
|
|
18440
18591
|
inner: persistenceStore,
|
|
18441
18592
|
client,
|
|
18442
|
-
context:
|
|
18593
|
+
context: rc,
|
|
18443
18594
|
db
|
|
18444
18595
|
});
|
|
18445
18596
|
}
|
|
@@ -18448,11 +18599,10 @@ function buildResolveAgentStore(options) {
|
|
|
18448
18599
|
}
|
|
18449
18600
|
function buildResolveSandboxProviderStore(options) {
|
|
18450
18601
|
const { persistenceStore } = options;
|
|
18451
|
-
if (
|
|
18452
|
-
return () =>
|
|
18602
|
+
if (isTrueFoundryModeEnabled2(configuration2)) {
|
|
18603
|
+
return () => new TrueFoundrySandboxProviderStore();
|
|
18453
18604
|
}
|
|
18454
|
-
|
|
18455
|
-
return () => trueFoundryStore;
|
|
18605
|
+
return () => persistenceStore;
|
|
18456
18606
|
}
|
|
18457
18607
|
async function createStandalonePersistence(options) {
|
|
18458
18608
|
const { sqlitePath, logger } = options;
|
|
@@ -18498,20 +18648,23 @@ async function createStandalonePersistence(options) {
|
|
|
18498
18648
|
const sandboxProviderStore = new SqliteSandboxProviderStore2(db);
|
|
18499
18649
|
const skillStore = new SqliteSkillStore2(db);
|
|
18500
18650
|
return {
|
|
18651
|
+
withTransaction: (callback) => db.transaction().execute(callback),
|
|
18501
18652
|
sessionStore: new SqliteSessionStore2(db),
|
|
18502
18653
|
sessionMetricsStore: new SqliteSessionMetricsStore2(db),
|
|
18654
|
+
mcpOAuthStore: mcpServerStore,
|
|
18655
|
+
tokenStore,
|
|
18656
|
+
scheduleStore: new SqliteScheduleStore2(db),
|
|
18503
18657
|
resolveModelProviderStore: () => modelProviderStore,
|
|
18504
18658
|
resolveMcpServerStore: () => mcpServerStore,
|
|
18659
|
+
resolveSandboxProviderStore: () => sandboxProviderStore,
|
|
18660
|
+
resolveSkillStore: () => skillStore,
|
|
18505
18661
|
resolveAgentStore: () => agentStore,
|
|
18506
18662
|
resolveImportAgentStore: () => agentStore,
|
|
18507
|
-
|
|
18508
|
-
|
|
18509
|
-
tokenStore,
|
|
18510
|
-
scheduleStore: new SqliteScheduleStore2(db),
|
|
18663
|
+
agentStore,
|
|
18664
|
+
turnSkillsResolverStore: skillStore,
|
|
18511
18665
|
destroyDb: () => db.destroy(),
|
|
18512
18666
|
redis: void 0,
|
|
18513
|
-
serviceFoundryClient: void 0
|
|
18514
|
-
resolveSkillStore: () => skillStore
|
|
18667
|
+
serviceFoundryClient: void 0
|
|
18515
18668
|
};
|
|
18516
18669
|
}
|
|
18517
18670
|
async function createDistributedPersistence(options) {
|
|
@@ -18560,11 +18713,22 @@ async function createDistributedPersistence(options) {
|
|
|
18560
18713
|
await migrateToLatest2(db);
|
|
18561
18714
|
logger.info("Distributed mode: postgres");
|
|
18562
18715
|
logger.info(`Executor id: ${executorId}`);
|
|
18716
|
+
const serviceFoundryClient = createServiceFoundryServerClient(logger);
|
|
18563
18717
|
const tokenStore = new PostgresOAuthTokenStore2(db);
|
|
18564
|
-
const agentStore = new PostgresAgentStore3(db);
|
|
18565
18718
|
const modelProviderStore = new PostgresModelProviderStore2(db);
|
|
18566
18719
|
const mcpServerStore = new PostgresMcpServerStore2(db);
|
|
18567
|
-
const
|
|
18720
|
+
const mcpServerWithAuthStore = new McpServerWithAuthStore({
|
|
18721
|
+
store: mcpServerStore,
|
|
18722
|
+
tokenStore,
|
|
18723
|
+
clientName: configuration3.MCP_DCR_OAUTH_CLIENT_NAME
|
|
18724
|
+
});
|
|
18725
|
+
const sandboxProviderStore = new PostgresSandboxProviderStore2(db);
|
|
18726
|
+
const skillStore = new PostgresSkillStore2(db);
|
|
18727
|
+
const agentStore = new PostgresAgentStore3(db);
|
|
18728
|
+
const turnSkillsResolverStore = buildTurnSkillsResolverStore({
|
|
18729
|
+
persistenceStore: skillStore,
|
|
18730
|
+
client: serviceFoundryClient
|
|
18731
|
+
});
|
|
18568
18732
|
const resolveModelProviderStore = buildResolveModelProviderStore({
|
|
18569
18733
|
persistenceStore: modelProviderStore,
|
|
18570
18734
|
client: serviceFoundryClient,
|
|
@@ -18599,49 +18763,51 @@ async function createDistributedPersistence(options) {
|
|
|
18599
18763
|
});
|
|
18600
18764
|
};
|
|
18601
18765
|
const resolveSandboxProviderStore = buildResolveSandboxProviderStore({
|
|
18602
|
-
persistenceStore:
|
|
18766
|
+
persistenceStore: sandboxProviderStore
|
|
18767
|
+
});
|
|
18768
|
+
const resolveSkillStore = buildResolveSkillStore({
|
|
18769
|
+
persistenceStore: skillStore,
|
|
18770
|
+
client: serviceFoundryClient
|
|
18603
18771
|
});
|
|
18604
|
-
const skillStore = new PostgresSkillStore2(db);
|
|
18605
18772
|
return {
|
|
18773
|
+
withTransaction: (callback) => db.transaction().execute(callback),
|
|
18606
18774
|
sessionStore: new PostgresSessionStore2(db),
|
|
18607
18775
|
sessionMetricsStore: new PostgresSessionMetricsStore2(db),
|
|
18776
|
+
mcpOAuthStore: mcpServerWithAuthStore,
|
|
18777
|
+
tokenStore,
|
|
18778
|
+
scheduleStore: new PostgresScheduleStore2(db),
|
|
18608
18779
|
resolveModelProviderStore,
|
|
18609
18780
|
resolveMcpServerStore,
|
|
18781
|
+
resolveSandboxProviderStore,
|
|
18782
|
+
resolveSkillStore,
|
|
18610
18783
|
resolveAgentStore,
|
|
18611
18784
|
resolveImportAgentStore,
|
|
18612
|
-
|
|
18613
|
-
|
|
18614
|
-
tokenStore,
|
|
18615
|
-
scheduleStore: new PostgresScheduleStore2(db),
|
|
18785
|
+
agentStore,
|
|
18786
|
+
turnSkillsResolverStore,
|
|
18616
18787
|
destroyDb: () => db.destroy(),
|
|
18617
18788
|
redis: await connectRedis2({ url: redisUrl, logger }),
|
|
18618
|
-
serviceFoundryClient
|
|
18619
|
-
resolveSkillStore: buildResolveSkillStore({
|
|
18620
|
-
persistenceStore: skillStore,
|
|
18621
|
-
client: serviceFoundryClient
|
|
18622
|
-
})
|
|
18789
|
+
serviceFoundryClient
|
|
18623
18790
|
};
|
|
18624
18791
|
}
|
|
18625
18792
|
async function createServerRuntime(persistence, logger) {
|
|
18626
18793
|
const {
|
|
18794
|
+
withTransaction,
|
|
18627
18795
|
sessionStore,
|
|
18628
18796
|
sessionMetricsStore,
|
|
18629
|
-
resolveModelProviderStore,
|
|
18630
|
-
resolveMcpServerStore,
|
|
18631
|
-
resolveAgentStore,
|
|
18632
|
-
resolveImportAgentStore,
|
|
18633
|
-
resolveSandboxProviderStore,
|
|
18634
|
-
withTransaction,
|
|
18635
18797
|
tokenStore,
|
|
18636
18798
|
scheduleStore,
|
|
18799
|
+
mcpOAuthStore,
|
|
18800
|
+
resolveImportAgentStore,
|
|
18801
|
+
agentStore,
|
|
18802
|
+
turnSkillsResolverStore,
|
|
18637
18803
|
destroyDb,
|
|
18638
18804
|
redis,
|
|
18639
|
-
serviceFoundryClient
|
|
18640
|
-
resolveSkillStore
|
|
18805
|
+
serviceFoundryClient
|
|
18641
18806
|
} = persistence;
|
|
18642
18807
|
const activeTurns = new ActiveTurnRegistry();
|
|
18643
18808
|
const requestReplyRouter = new RequestReplyRouter();
|
|
18644
18809
|
const eventSubscriptions = new EventSubscriptionRegistry(redis);
|
|
18810
|
+
const sessions = new Sessions({ sessionStore });
|
|
18645
18811
|
const oidc = isOidcConfigured2(configuration2) ? configuration2.OIDC : void 0;
|
|
18646
18812
|
if (oidc) {
|
|
18647
18813
|
logger.info("Auth is enabled", { issuer: oidc.OIDC_ISSUER_URL });
|
|
@@ -18671,9 +18837,23 @@ async function createServerRuntime(persistence, logger) {
|
|
|
18671
18837
|
const controller = configuration2.STANDALONE ? createController({
|
|
18672
18838
|
scheduleStore,
|
|
18673
18839
|
withTransaction,
|
|
18674
|
-
logger
|
|
18675
|
-
baseUrl: `http://localhost:${String(configuration2.PORT)}`
|
|
18840
|
+
logger
|
|
18676
18841
|
}) : void 0;
|
|
18842
|
+
const resolveModelProviderStore = (c, runAsAgent) => persistence.resolveModelProviderStore(resolveRequestContext(c), runAsAgent);
|
|
18843
|
+
const resolveMcpServerStore = (c, runAsAgent) => {
|
|
18844
|
+
if (c === void 0) {
|
|
18845
|
+
return mcpOAuthStore;
|
|
18846
|
+
}
|
|
18847
|
+
const rawPerServerHeaders = c.req.header(X_TFG_MCP_HEADERS);
|
|
18848
|
+
return persistence.resolveMcpServerStore(
|
|
18849
|
+
resolveRequestContext(c),
|
|
18850
|
+
runAsAgent,
|
|
18851
|
+
rawPerServerHeaders === void 0 ? void 0 : parsePerServerMcpHeaders(rawPerServerHeaders)
|
|
18852
|
+
);
|
|
18853
|
+
};
|
|
18854
|
+
const resolveAgentStore = (c) => persistence.resolveAgentStore(resolveRequestContext(c));
|
|
18855
|
+
const resolveSandboxProviderStore = (c) => persistence.resolveSandboxProviderStore(resolveRequestContext(c));
|
|
18856
|
+
const resolveSkillStore = (c) => persistence.resolveSkillStore(resolveRequestContext(c));
|
|
18677
18857
|
const app = createServerApp({
|
|
18678
18858
|
modelCatalog: ModelCatalog.load(),
|
|
18679
18859
|
mcpCatalog: McpCatalog.load(),
|
|
@@ -18684,12 +18864,15 @@ async function createServerRuntime(persistence, logger) {
|
|
|
18684
18864
|
resolveAgentStore,
|
|
18685
18865
|
resolveImportAgentStore,
|
|
18686
18866
|
resolveSandboxProviderStore,
|
|
18867
|
+
resolveSkillStore,
|
|
18687
18868
|
withTransaction,
|
|
18688
18869
|
tokenStore,
|
|
18689
18870
|
scheduleStore,
|
|
18871
|
+
agentStore,
|
|
18872
|
+
turnSkillsResolverStore,
|
|
18690
18873
|
sessionStore,
|
|
18691
18874
|
sessionMetricsStore,
|
|
18692
|
-
sessions
|
|
18875
|
+
sessions,
|
|
18693
18876
|
activeTurns,
|
|
18694
18877
|
redis,
|
|
18695
18878
|
requestReplyRouter,
|
|
@@ -18697,8 +18880,7 @@ async function createServerRuntime(persistence, logger) {
|
|
|
18697
18880
|
logger,
|
|
18698
18881
|
oidcClient,
|
|
18699
18882
|
authenticator,
|
|
18700
|
-
authorizer
|
|
18701
|
-
resolveSkillStore
|
|
18883
|
+
authorizer
|
|
18702
18884
|
});
|
|
18703
18885
|
return { activeTurns, app, controller, destroyDb, redis, requestReplyRouter };
|
|
18704
18886
|
}
|