@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.3
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/CHANGELOG.md +70 -0
- package/README.md +22 -7
- package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-N546FNNS.js} +38 -23
- package/dist/AgentCodeSnippets-N546FNNS.js.map +1 -0
- package/dist/AgentMetricChart-YWJYVYYA.js +15 -0
- package/dist/{AgentOverview-EEBHJC32.js → AgentOverview-VF74XC7I.js} +7 -7
- package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-RFR6LQMY.js} +19 -10
- package/dist/AgentSessionEventTimeline-RFR6LQMY.js.map +1 -0
- package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-27CQF6FX.js} +144 -57
- package/dist/AgentSessionEventTimelineChart-27CQF6FX.js.map +1 -0
- package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-4IVX2SGD.js} +36 -12
- package/dist/AgentSessions-4IVX2SGD.js.map +1 -0
- package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-R5VEP7BO.js} +162 -126
- package/dist/ConnectorSettings-R5VEP7BO.js.map +1 -0
- package/dist/{DockLayout-LM4AFMFY.js → DockLayout-F44RWGEY.js} +10 -10
- package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-SQ323AVM.js} +14 -12
- package/dist/DrawerLayout-SQ323AVM.js.map +1 -0
- package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-6QLS63HM.js} +22 -28
- package/dist/ModelSettings-6QLS63HM.js.map +1 -0
- package/dist/OpenUiFenceBlock-4ROX3G4X.js +9 -0
- package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-OLKDXIQS.js} +17 -21
- package/dist/SandboxSettings-OLKDXIQS.js.map +1 -0
- package/dist/SchedulesPage-TMOTK6DR.js +15 -0
- package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-GISAH2WU.js} +8 -8
- package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-EN33DUQ7.js} +171 -26
- package/dist/ShellRouteSync-EN33DUQ7.js.map +1 -0
- package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-35K4AKTC.js} +80 -58
- package/dist/SidebarLayout-35K4AKTC.js.map +1 -0
- package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-JSX2BTII.js} +24 -22
- package/dist/SkillSettings-JSX2BTII.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-6VCR7ES3.js} +9 -9
- package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-RKBSN2FZ.js} +10 -10
- package/dist/{chunk-ZTMKFZQ3.js → chunk-2O5EJ6QS.js} +4440 -3042
- package/dist/chunk-2O5EJ6QS.js.map +1 -0
- package/dist/chunk-6WCIL3H2.js +517 -0
- package/dist/chunk-6WCIL3H2.js.map +1 -0
- package/dist/{chunk-WVE3F724.js → chunk-73FQVITT.js} +21 -4
- package/dist/chunk-73FQVITT.js.map +1 -0
- package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
- package/dist/chunk-7AAO4UDQ.js.map +1 -0
- package/dist/{chunk-CYHJDKFB.js → chunk-F5QVQIBH.js} +172 -46
- package/dist/chunk-F5QVQIBH.js.map +1 -0
- package/dist/{chunk-FJW36PD7.js → chunk-GIPFF6FZ.js} +28 -24
- package/dist/chunk-GIPFF6FZ.js.map +1 -0
- package/dist/{chunk-6O6FWUDW.js → chunk-GSJAYYLR.js} +233 -195
- package/dist/chunk-GSJAYYLR.js.map +1 -0
- package/dist/{chunk-MPNSO7E6.js → chunk-J5BPHEDT.js} +2 -2
- package/dist/chunk-KR7WYHVF.js +195 -0
- package/dist/chunk-KR7WYHVF.js.map +1 -0
- package/dist/{chunk-DMMZSZTN.js → chunk-LUG7E6BL.js} +60 -16
- package/dist/chunk-LUG7E6BL.js.map +1 -0
- package/dist/chunk-LXJMINS6.js +587 -0
- package/dist/chunk-LXJMINS6.js.map +1 -0
- package/dist/{chunk-U7KURWW3.js → chunk-PT4EENB3.js} +244 -52
- package/dist/chunk-PT4EENB3.js.map +1 -0
- package/dist/{chunk-XAU7QFG3.js → chunk-Q6TCT7ZJ.js} +68 -256
- package/dist/chunk-Q6TCT7ZJ.js.map +1 -0
- package/dist/{chunk-ZKNUMH2M.js → chunk-XLFOXQKZ.js} +13 -11
- package/dist/chunk-XLFOXQKZ.js.map +1 -0
- package/dist/{chunk-M62XY4NC.js → chunk-XY6LZQES.js} +235 -108
- package/dist/chunk-XY6LZQES.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +316 -94
- package/dist/index.js +65 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +36 -13
- package/dist/plugins/trueforge-agent-server-adapter/index.js +69 -34
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -4
- package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
- package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
- package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +0 -1
- package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +0 -1
- package/dist/AgentSessions-3MPDZASK.js.map +0 -1
- package/dist/ConnectorSettings-MXFRWWR6.js.map +0 -1
- package/dist/DrawerLayout-JR3O6RRB.js.map +0 -1
- package/dist/ModelSettings-G7IFNC2Y.js.map +0 -1
- package/dist/OpenUiFenceBlock-2TV5TQ6P.js +0 -9
- package/dist/SandboxSettings-NXAANMAX.js.map +0 -1
- package/dist/SchedulesPage-KKLUDO6B.js +0 -15
- package/dist/ShellRouteSync-CEBETGEJ.js.map +0 -1
- package/dist/SidebarLayout-A2HJPPHS.js.map +0 -1
- package/dist/SkillSettings-FGGMSUNO.js.map +0 -1
- package/dist/chunk-2XPPBEYF.js +0 -74
- package/dist/chunk-2XPPBEYF.js.map +0 -1
- package/dist/chunk-6O6FWUDW.js.map +0 -1
- package/dist/chunk-7Z2C2K7F.js +0 -578
- package/dist/chunk-7Z2C2K7F.js.map +0 -1
- package/dist/chunk-CYHJDKFB.js.map +0 -1
- package/dist/chunk-DMMZSZTN.js.map +0 -1
- package/dist/chunk-FJW36PD7.js.map +0 -1
- package/dist/chunk-M62XY4NC.js.map +0 -1
- package/dist/chunk-QC42MLAK.js.map +0 -1
- package/dist/chunk-SFZNIO6U.js +0 -18
- package/dist/chunk-SFZNIO6U.js.map +0 -1
- package/dist/chunk-U7KURWW3.js.map +0 -1
- package/dist/chunk-WVE3F724.js.map +0 -1
- package/dist/chunk-XAU7QFG3.js.map +0 -1
- package/dist/chunk-ZKNUMH2M.js.map +0 -1
- package/dist/chunk-ZTMKFZQ3.js.map +0 -1
- /package/dist/{AgentMetricChart-JPU3MFQ2.js.map → AgentMetricChart-YWJYVYYA.js.map} +0 -0
- /package/dist/{AgentOverview-EEBHJC32.js.map → AgentOverview-VF74XC7I.js.map} +0 -0
- /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-F44RWGEY.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-4ROX3G4X.js.map} +0 -0
- /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-TMOTK6DR.js.map} +0 -0
- /package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-GISAH2WU.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-6VCR7ES3.js.map} +0 -0
- /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-RKBSN2FZ.js.map} +0 -0
- /package/dist/{chunk-MPNSO7E6.js.map → chunk-J5BPHEDT.js.map} +0 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
clearScheduleShareSearch
|
|
3
|
-
|
|
2
|
+
clearScheduleShareSearch,
|
|
3
|
+
readScheduleShareSearch,
|
|
4
|
+
writeScheduleShareSearch
|
|
5
|
+
} from "./chunk-KR7WYHVF.js";
|
|
4
6
|
import {
|
|
5
7
|
readSessionShareSearch,
|
|
6
8
|
writeSessionShareSearch
|
|
7
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-PT4EENB3.js";
|
|
8
10
|
|
|
9
11
|
// src/routing/paths.ts
|
|
10
12
|
var DEFAULTS = {
|
|
@@ -13,6 +15,7 @@ var DEFAULTS = {
|
|
|
13
15
|
library: "/library",
|
|
14
16
|
libraryAgent: "/library/:agentId",
|
|
15
17
|
schedules: "/schedules",
|
|
18
|
+
buildAgent: "/build-agent",
|
|
16
19
|
agent: "/agents/:agentName",
|
|
17
20
|
session: "/sessions/:sessionId",
|
|
18
21
|
sessionsBrowser: "/sessions"
|
|
@@ -35,6 +38,7 @@ function resolveRoutesConfig(routes) {
|
|
|
35
38
|
library: resolveOptional(paths?.library, DEFAULTS.library),
|
|
36
39
|
libraryAgent: resolveOptional(paths?.libraryAgent, DEFAULTS.libraryAgent),
|
|
37
40
|
schedules: resolveOptional(paths?.schedules, DEFAULTS.schedules),
|
|
41
|
+
buildAgent: resolveOptional(paths?.buildAgent, DEFAULTS.buildAgent),
|
|
38
42
|
agent: resolveOptional(paths?.agent, DEFAULTS.agent),
|
|
39
43
|
session: resolveOptional(paths?.session, DEFAULTS.session),
|
|
40
44
|
sessionsBrowser: resolveOptional(paths?.sessionsBrowser, DEFAULTS.sessionsBrowser)
|
|
@@ -58,6 +62,8 @@ function buildPath(place, routes) {
|
|
|
58
62
|
return routes.libraryAgent == null ? null : fillTemplate(routes.libraryAgent, place.agentId);
|
|
59
63
|
case "schedules":
|
|
60
64
|
return routes.schedules;
|
|
65
|
+
case "buildAgent":
|
|
66
|
+
return routes.buildAgent;
|
|
61
67
|
case "agent":
|
|
62
68
|
return routes.agent == null ? null : fillTemplate(routes.agent, place.agentName);
|
|
63
69
|
case "session":
|
|
@@ -88,12 +94,20 @@ function sanitizeSearchForPlace(place, search) {
|
|
|
88
94
|
clearScheduleShareSearch(params);
|
|
89
95
|
} else if (place.type === "libraryAgent") {
|
|
90
96
|
const share = readSessionShareSearch(search);
|
|
97
|
+
const scheduleShare = readScheduleShareSearch(search);
|
|
91
98
|
writeSessionShareSearch(params, {
|
|
92
99
|
view: null,
|
|
93
100
|
timeRange: null,
|
|
94
101
|
...share.sessionId != null && share.agentId !== place.agentId ? { sessionId: null, agentId: null } : {}
|
|
95
102
|
});
|
|
96
103
|
clearScheduleShareSearch(params);
|
|
104
|
+
if (share.tab === "schedules") {
|
|
105
|
+
writeScheduleShareSearch(params, {
|
|
106
|
+
status: scheduleShare.status,
|
|
107
|
+
q: scheduleShare.q,
|
|
108
|
+
isNew: scheduleShare.isNew
|
|
109
|
+
});
|
|
110
|
+
}
|
|
97
111
|
} else if (place.type === "schedules") {
|
|
98
112
|
writeSessionShareSearch(params, {
|
|
99
113
|
sessionId: null,
|
|
@@ -158,6 +172,9 @@ function matchPath(pathname, routes) {
|
|
|
158
172
|
if (routes.schedules != null && normalized === routes.schedules) {
|
|
159
173
|
return { type: "schedules" };
|
|
160
174
|
}
|
|
175
|
+
if (routes.buildAgent != null && normalized === routes.buildAgent) {
|
|
176
|
+
return { type: "buildAgent" };
|
|
177
|
+
}
|
|
161
178
|
if (routes.agent != null) {
|
|
162
179
|
const agentName = matchTemplate(routes.agent, segments);
|
|
163
180
|
if (agentName != null) return { type: "agent", agentName };
|
|
@@ -197,4 +214,4 @@ export {
|
|
|
197
214
|
matchLocation,
|
|
198
215
|
placesEqual
|
|
199
216
|
};
|
|
200
|
-
//# sourceMappingURL=chunk-
|
|
217
|
+
//# sourceMappingURL=chunk-73FQVITT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/routing/paths.ts"],"sourcesContent":["import {\n clearScheduleShareSearch,\n readScheduleShareSearch,\n writeScheduleShareSearch,\n} from '../utils/scheduleShareUrl.js';\nimport { readSessionShareSearch, writeSessionShareSearch } from '../utils/sessionShareUrl.js';\nimport type { ResolvedRoutes, RoutePlace, RoutesConfig } from './types.js';\n\nconst DEFAULTS = {\n root: '/',\n settings: '/settings',\n library: '/library',\n libraryAgent: '/library/:agentId',\n schedules: '/schedules',\n buildAgent: '/build-agent',\n agent: '/agents/:agentName',\n session: '/sessions/:sessionId',\n sessionsBrowser: '/sessions',\n} as const;\n\nfunction normalizePath(path: string): string {\n const trimmed = path.trim();\n const withLead = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n // Drop a trailing slash except for the root itself.\n return withLead.length > 1 && withLead.endsWith('/') ? withLead.slice(0, -1) : withLead;\n}\n\nfunction resolveOptional(value: string | false | undefined, fallback: string): string | null {\n if (value === false) return null;\n return normalizePath(value ?? fallback);\n}\n\nexport function resolveRoutesConfig(routes?: RoutesConfig): ResolvedRoutes {\n const paths = routes?.paths;\n return {\n basename: routes?.basename ?? '',\n root: normalizePath(paths?.root ?? DEFAULTS.root),\n settings: resolveOptional(paths?.settings, DEFAULTS.settings),\n library: resolveOptional(paths?.library, DEFAULTS.library),\n libraryAgent: resolveOptional(paths?.libraryAgent, DEFAULTS.libraryAgent),\n schedules: resolveOptional(paths?.schedules, DEFAULTS.schedules),\n buildAgent: resolveOptional(paths?.buildAgent, DEFAULTS.buildAgent),\n agent: resolveOptional(paths?.agent, DEFAULTS.agent),\n session: resolveOptional(paths?.session, DEFAULTS.session),\n sessionsBrowser: resolveOptional(paths?.sessionsBrowser, DEFAULTS.sessionsBrowser),\n };\n}\n\nfunction splitSegments(path: string): string[] {\n return path.split('/').filter(segment => segment.length > 0);\n}\n\n/** Fill a single-param template (`/agents/:agentName`) with an encoded value. */\nfunction fillTemplate(template: string, value: string): string {\n return (\n '/' +\n splitSegments(template)\n .map(segment => (segment.startsWith(':') ? encodeURIComponent(value) : segment))\n .join('/')\n );\n}\n\n/** Build the URL path for a place, or `null` when that place has no configured route. */\nexport function buildPath(place: RoutePlace, routes: ResolvedRoutes): string | null {\n switch (place.type) {\n case 'root':\n return routes.root;\n case 'settings':\n return routes.settings;\n case 'library':\n return routes.library;\n case 'libraryAgent':\n return routes.libraryAgent == null ? null : fillTemplate(routes.libraryAgent, place.agentId);\n case 'schedules':\n return routes.schedules;\n case 'buildAgent':\n return routes.buildAgent;\n case 'agent':\n return routes.agent == null ? null : fillTemplate(routes.agent, place.agentName);\n case 'session':\n return routes.session == null ? null : fillTemplate(routes.session, place.sessionId);\n case 'sessionsBrowser':\n return routes.sessionsBrowser;\n }\n}\n\n/**\n * Absolute href that boots the shell on a history session (`/sessions/:id`).\n * Includes `routes.basename` and clears place-owned share query keys.\n */\nexport function buildSessionResumeHref({\n sessionId,\n routes,\n href = typeof window === 'undefined' ? 'http://localhost/' : window.location.href,\n}: {\n sessionId: string;\n routes: ResolvedRoutes;\n href?: string;\n}): string | null {\n const sessionPath = buildPath({ type: 'session', sessionId }, routes);\n if (sessionPath == null) return null;\n const url = new URL(href);\n const basename = routes.basename.endsWith('/') ? routes.basename.slice(0, -1) : routes.basename;\n url.pathname = `${basename}${sessionPath}` || '/';\n url.search = sanitizeSearchForPlace({ type: 'session', sessionId }, url.search);\n url.hash = '';\n return url.toString();\n}\n\n/**\n * Remove query state owned by a different shell place while preserving host\n * parameters. Settings is an overlay, so it retains the underlying place state.\n */\nexport function sanitizeSearchForPlace(place: RoutePlace, search: string): string {\n if (place.type === 'settings') return search;\n\n const params = new URLSearchParams(search.startsWith('?') ? search.slice(1) : search);\n if (place.type === 'sessionsBrowser') {\n writeSessionShareSearch(params, { tab: null });\n clearScheduleShareSearch(params);\n } else if (place.type === 'libraryAgent') {\n const share = readSessionShareSearch(search);\n const scheduleShare = readScheduleShareSearch(search);\n writeSessionShareSearch(params, {\n view: null,\n timeRange: null,\n ...(share.sessionId != null && share.agentId !== place.agentId ? { sessionId: null, agentId: null } : {}),\n });\n clearScheduleShareSearch(params);\n if (share.tab === 'schedules') {\n writeScheduleShareSearch(params, {\n status: scheduleShare.status,\n q: scheduleShare.q,\n isNew: scheduleShare.isNew,\n });\n }\n } else if (place.type === 'schedules') {\n writeSessionShareSearch(params, {\n sessionId: null,\n agentId: null,\n tab: null,\n view: null,\n timeRange: null,\n });\n // Keep `agent` / `status` / `q` — owned by the schedules place.\n } else {\n writeSessionShareSearch(params, {\n sessionId: null,\n agentId: null,\n tab: null,\n view: null,\n timeRange: null,\n });\n clearScheduleShareSearch(params);\n }\n const next = params.toString();\n return next.length > 0 ? `?${next}` : '';\n}\n\n/** Percent-decode a segment; `null` when the URL carries a malformed escape. */\nfunction decodeSegment(segment: string): string | null {\n try {\n return decodeURIComponent(segment);\n } catch {\n return null;\n }\n}\n\n/** Match a single-param template against concrete segments; returns the decoded param or null. */\nfunction matchTemplate(template: string, segments: string[]): string | null {\n const templateSegments = splitSegments(template);\n if (templateSegments.length !== segments.length) return null;\n let param: string | null = null;\n for (const [i, tpl] of templateSegments.entries()) {\n const seg = segments[i];\n if (seg === undefined) return null;\n if (tpl.startsWith(':')) {\n // A malformed escape is an unusable id, so the path simply does not match.\n const decoded = decodeSegment(seg);\n if (decoded == null) return null;\n param = decoded;\n } else if (tpl !== seg) {\n return null;\n }\n }\n return param;\n}\n\n/** Parse a (basename-relative) pathname into a place, or `null` when unrecognized. */\nexport function matchPath(pathname: string, routes: ResolvedRoutes): RoutePlace | null {\n const normalized = normalizePath(pathname);\n const segments = splitSegments(normalized);\n\n if (routes.settings != null && normalized === routes.settings) {\n return { type: 'settings' };\n }\n if (routes.library != null && normalized === routes.library) {\n return { type: 'library' };\n }\n if (routes.sessionsBrowser != null && normalized === routes.sessionsBrowser) {\n return { type: 'sessionsBrowser' };\n }\n if (routes.libraryAgent != null) {\n const agentId = matchTemplate(routes.libraryAgent, segments);\n if (agentId != null) return { type: 'libraryAgent', agentId };\n }\n if (routes.schedules != null && normalized === routes.schedules) {\n return { type: 'schedules' };\n }\n if (routes.buildAgent != null && normalized === routes.buildAgent) {\n return { type: 'buildAgent' };\n }\n if (routes.agent != null) {\n const agentName = matchTemplate(routes.agent, segments);\n if (agentName != null) return { type: 'agent', agentName };\n }\n if (routes.session != null) {\n const sessionId = matchTemplate(routes.session, segments);\n if (sessionId != null) return { type: 'session', sessionId };\n }\n if (normalized === routes.root) {\n return { type: 'root' };\n }\n return null;\n}\n\n/** Pathname place, or library agent from `?agentId=` when the path is root. */\nexport function matchLocation({\n pathname,\n search,\n routes,\n}: {\n pathname: string;\n search: string;\n routes: ResolvedRoutes;\n}): RoutePlace | null {\n const matched = matchPath(pathname, routes);\n if (matched == null || matched.type !== 'root') return matched;\n const { agentId } = readSessionShareSearch(search);\n return agentId != null ? { type: 'libraryAgent', agentId } : matched;\n}\n\nexport function placesEqual(a: RoutePlace, b: RoutePlace): boolean {\n if (a.type !== b.type) return false;\n if (a.type === 'agent' && b.type === 'agent') return a.agentName === b.agentName;\n if (a.type === 'libraryAgent' && b.type === 'libraryAgent') return a.agentId === b.agentId;\n if (a.type === 'session' && b.type === 'session') return a.sessionId === b.sessionId;\n return true;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -5,7 +5,7 @@ function createTrueFoundryServer(opts) {
|
|
|
5
5
|
getModels: opts.getModels,
|
|
6
6
|
getSkills: opts.getSkills,
|
|
7
7
|
getMcp: opts.getMcp,
|
|
8
|
-
...opts.
|
|
8
|
+
...opts.getMcpConnector === void 0 ? {} : { getMcpConnector: opts.getMcpConnector },
|
|
9
9
|
...opts.getMcpTools === void 0 ? {} : { getMcpTools: opts.getMcpTools },
|
|
10
10
|
searchAgents: opts.searchAgents,
|
|
11
11
|
saveAgent: opts.saveAgent,
|
|
@@ -23,7 +23,8 @@ function createTrueFoundryServer(opts) {
|
|
|
23
23
|
...opts.catalog != null ? { catalog: opts.catalog } : {},
|
|
24
24
|
...opts.sessions != null ? { sessions: opts.sessions } : {},
|
|
25
25
|
...opts.metrics != null ? { metrics: opts.metrics } : {},
|
|
26
|
-
...opts.schedules != null ? { schedules: opts.schedules } : {}
|
|
26
|
+
...opts.schedules != null ? { schedules: opts.schedules } : {},
|
|
27
|
+
...opts.permissions != null ? { permissions: opts.permissions } : {}
|
|
27
28
|
};
|
|
28
29
|
return server;
|
|
29
30
|
}
|
|
@@ -31,4 +32,4 @@ function createTrueFoundryServer(opts) {
|
|
|
31
32
|
export {
|
|
32
33
|
createTrueFoundryServer
|
|
33
34
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-7AAO4UDQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/createTrueFoundryServer.ts"],"sourcesContent":["import type {\n AgentBuilderCapabilitiesResponse,\n AgentBuilderServer,\n AgentChatServer,\n AgentLibraryEntry,\n AgentMetricsServer,\n AgentSessionsServer,\n AgentSkill,\n AgentSpec,\n CatalogServer,\n ConnectorState,\n ModelSelection,\n PermissionsServer,\n SaveAgentRequest,\n SaveAgentResult,\n ScheduleServer,\n SearchAgentsParams,\n} from './types.js';\n\nexport type CreateTrueFoundryServerOptions<\n TSpec extends AgentSpec = AgentSpec,\n TModel extends ModelSelection = ModelSelection,\n TSkill extends AgentSkill = AgentSkill,\n TMcp extends ConnectorState = ConnectorState,\n TAgent extends AgentLibraryEntry = AgentLibraryEntry,\n TSave extends SaveAgentResult = SaveAgentResult,\n TCatalog extends CatalogServer = CatalogServer,\n TCapabilities extends AgentBuilderCapabilitiesResponse = AgentBuilderCapabilitiesResponse,\n TSessions extends AgentSessionsServer<TSpec> = AgentSessionsServer<TSpec>,\n TMetrics extends AgentMetricsServer = AgentMetricsServer,\n TSchedules extends ScheduleServer = ScheduleServer,\n TPermissions extends PermissionsServer = PermissionsServer,\n> = {\n /** Chat port — e.g. from `@truefoundry/agent-server-adapter`. */\n chatServer: AgentChatServer<TSpec>;\n getCapabilities: () => Promise<TCapabilities>;\n getModels: () => Promise<TModel[]>;\n getSkills: () => Promise<TSkill[]>;\n getMcp: () => Promise<TMcp[]>;\n getMcpConnector?: AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities>['getMcpConnector'];\n getMcpTools?: AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities>['getMcpTools'];\n searchAgents: (req?: SearchAgentsParams) => Promise<TAgent[]>;\n saveAgent: (req: SaveAgentRequest<TSpec>) => Promise<TSave>;\n deleteAgent?: (req: { agentName: string }) => Promise<void>;\n /** Settings catalog (models + connectors). Optional. */\n catalog?: TCatalog;\n /** Optional agent-detail port (Overview + Use In Code). */\n sessions?: TSessions;\n /** Optional aggregate metrics + chart port. */\n metrics?: TMetrics;\n /** Schedules listing + CRUD. Optional. */\n schedules?: TSchedules;\n /** Per-resource grants. Omit to leave actions enabled. */\n permissions?: TPermissions;\n};\n\nexport type TrueFoundryServer<\n TSpec extends AgentSpec = AgentSpec,\n TModel extends ModelSelection = ModelSelection,\n TSkill extends AgentSkill = AgentSkill,\n TMcp extends ConnectorState = ConnectorState,\n TAgent extends AgentLibraryEntry = AgentLibraryEntry,\n TSave extends SaveAgentResult = SaveAgentResult,\n TCatalog extends CatalogServer = CatalogServer,\n TCapabilities extends AgentBuilderCapabilitiesResponse = AgentBuilderCapabilitiesResponse,\n TSessions extends AgentSessionsServer<TSpec> = AgentSessionsServer<TSpec>,\n TMetrics extends AgentMetricsServer = AgentMetricsServer,\n TSchedules extends ScheduleServer = ScheduleServer,\n TPermissions extends PermissionsServer = PermissionsServer,\n> = AgentChatServer<TSpec> &\n AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities> & {\n catalog?: TCatalog;\n sessions?: TSessions;\n metrics?: TMetrics;\n schedules?: TSchedules;\n permissions?: TPermissions;\n };\n\n/**\n * Composes an `AgentChatServer` with host-provided builder catalog callbacks\n * and an optional settings `catalog`.\n * Gateway wiring lives in the host (or `@truefoundry/agent-server-adapter`).\n */\nexport function createTrueFoundryServer<\n TSpec extends AgentSpec = AgentSpec,\n TModel extends ModelSelection = ModelSelection,\n TSkill extends AgentSkill = AgentSkill,\n TMcp extends ConnectorState = ConnectorState,\n TAgent extends AgentLibraryEntry = AgentLibraryEntry,\n TSave extends SaveAgentResult = SaveAgentResult,\n TCatalog extends CatalogServer = CatalogServer,\n TCapabilities extends AgentBuilderCapabilitiesResponse = AgentBuilderCapabilitiesResponse,\n TSessions extends AgentSessionsServer<TSpec> = AgentSessionsServer<TSpec>,\n TMetrics extends AgentMetricsServer = AgentMetricsServer,\n TSchedules extends ScheduleServer = ScheduleServer,\n TPermissions extends PermissionsServer = PermissionsServer,\n>(\n opts: CreateTrueFoundryServerOptions<\n TSpec,\n TModel,\n TSkill,\n TMcp,\n TAgent,\n TSave,\n TCatalog,\n TCapabilities,\n TSessions,\n TMetrics,\n TSchedules,\n TPermissions\n >,\n): TrueFoundryServer<\n TSpec,\n TModel,\n TSkill,\n TMcp,\n TAgent,\n TSave,\n TCatalog,\n TCapabilities,\n TSessions,\n TMetrics,\n TSchedules,\n TPermissions\n> {\n const builder: AgentBuilderServer<TSpec, TModel, TSkill, TMcp, TAgent, TSave, TCapabilities> = {\n getCapabilities: opts.getCapabilities,\n getModels: opts.getModels,\n getSkills: opts.getSkills,\n getMcp: opts.getMcp,\n ...(opts.getMcpConnector === undefined ? {} : { getMcpConnector: opts.getMcpConnector }),\n ...(opts.getMcpTools === undefined ? {} : { getMcpTools: opts.getMcpTools }),\n searchAgents: opts.searchAgents,\n saveAgent: opts.saveAgent,\n deleteAgent: async req => {\n if (opts.deleteAgent) {\n await opts.deleteAgent(req);\n return;\n }\n throw new Error('deleteAgent is host-owned. Pass deleteAgent to createTrueFoundryServer.');\n },\n };\n\n const server: TrueFoundryServer<\n TSpec,\n TModel,\n TSkill,\n TMcp,\n TAgent,\n TSave,\n TCatalog,\n TCapabilities,\n TSessions,\n TMetrics,\n TSchedules,\n TPermissions\n > = {\n ...opts.chatServer,\n ...builder,\n ...(opts.catalog != null ? { catalog: opts.catalog } : {}),\n ...(opts.sessions != null ? { sessions: opts.sessions } : {}),\n ...(opts.metrics != null ? { metrics: opts.metrics } : {}),\n ...(opts.schedules != null ? { schedules: opts.schedules } : {}),\n ...(opts.permissions != null ? { permissions: opts.permissions } : {}),\n };\n return server;\n}\n"],"mappings":";AAmFO,SAAS,wBAcd,MA2BA;AACA,QAAM,UAAyF;AAAA,IAC7F,iBAAiB,KAAK;AAAA,IACtB,WAAW,KAAK;AAAA,IAChB,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,oBAAoB,SAAY,CAAC,IAAI,EAAE,iBAAiB,KAAK,gBAAgB;AAAA,IACtF,GAAI,KAAK,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY;AAAA,IAC1E,cAAc,KAAK;AAAA,IACnB,WAAW,KAAK;AAAA,IAChB,aAAa,OAAM,QAAO;AACxB,UAAI,KAAK,aAAa;AACpB,cAAM,KAAK,YAAY,GAAG;AAC1B;AAAA,MACF;AACA,YAAM,IAAI,MAAM,yEAAyE;AAAA,IAC3F;AAAA,EACF;AAEA,QAAM,SAaF;AAAA,IACF,GAAG,KAAK;AAAA,IACR,GAAG;AAAA,IACH,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,IACxD,GAAI,KAAK,YAAY,OAAO,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC;AAAA,IAC3D,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAAA,IACxD,GAAI,KAAK,aAAa,OAAO,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,IAC9D,GAAI,KAAK,eAAe,OAAO,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,EACtE;AACA,SAAO;AACT;","names":[]}
|
|
@@ -10,46 +10,87 @@ import {
|
|
|
10
10
|
} from "./chunk-Y6S4OVVQ.js";
|
|
11
11
|
import {
|
|
12
12
|
IS_CREATE_AGENT_METADATA_KEY,
|
|
13
|
-
isCreateAgentMetadataValue
|
|
13
|
+
isCreateAgentMetadataValue,
|
|
14
|
+
sessionIsCreateAgent
|
|
14
15
|
} from "./chunk-RDXBMTP5.js";
|
|
15
16
|
import {
|
|
17
|
+
ActiveSessionPermissionsProvider,
|
|
16
18
|
AgentConfigInstructionsProvider,
|
|
19
|
+
CurrentUserProvider,
|
|
17
20
|
SlotsProvider,
|
|
18
21
|
ToasterProvider,
|
|
19
22
|
modelPatchWithReasoningEffort,
|
|
20
23
|
mountName,
|
|
21
24
|
useToaster
|
|
22
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-2O5EJ6QS.js";
|
|
23
26
|
import {
|
|
24
27
|
DraftCatalogProvider,
|
|
25
28
|
Spinner,
|
|
26
|
-
getErrorMessage,
|
|
27
29
|
useDraftCatalog
|
|
28
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-Q6TCT7ZJ.js";
|
|
29
31
|
import {
|
|
30
32
|
DEFAULT_AGENT_CONFIG,
|
|
31
33
|
ServerProvider,
|
|
32
34
|
ShellModeProvider,
|
|
35
|
+
getErrorMessage,
|
|
36
|
+
isSessionsChromeEnabled,
|
|
33
37
|
readSessionShareSearch,
|
|
38
|
+
useOptionalAgentSessionsServer,
|
|
39
|
+
useOptionalShellMode,
|
|
34
40
|
useServerCapabilities,
|
|
35
41
|
useShellMode,
|
|
36
42
|
withCapabilitiesSandbox
|
|
37
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-PT4EENB3.js";
|
|
38
44
|
import {
|
|
45
|
+
useAui,
|
|
39
46
|
useAuiState
|
|
40
47
|
} from "./chunk-M6MHLVSO.js";
|
|
41
48
|
import {
|
|
42
49
|
cn
|
|
43
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-LXJMINS6.js";
|
|
44
51
|
|
|
45
52
|
// src/containers/TrueFoundryChatProvider.tsx
|
|
46
|
-
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
53
|
+
import { AssistantRuntimeProvider, useAuiState as useAuiState2 } from "@assistant-ui/react";
|
|
47
54
|
import {
|
|
48
55
|
trueFoundryAttachmentAdapter,
|
|
49
56
|
useTrueFoundryAgentRuntime
|
|
50
57
|
} from "@truefoundry/assistant-ui-runtime";
|
|
51
58
|
import { useCallback, useMemo } from "react";
|
|
52
59
|
import { jsx } from "react/jsx-runtime";
|
|
60
|
+
function ActiveSessionPermissionScope({
|
|
61
|
+
locallyCreatedSessionIds,
|
|
62
|
+
children
|
|
63
|
+
}) {
|
|
64
|
+
const remoteId = useAuiState2((state) => state.threadListItem.remoteId);
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
66
|
+
ActiveSessionPermissionsProvider,
|
|
67
|
+
{
|
|
68
|
+
sessionId: remoteId,
|
|
69
|
+
assumeManage: remoteId != null && locallyCreatedSessionIds.has(remoteId),
|
|
70
|
+
children
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function runtimeServer({
|
|
75
|
+
server,
|
|
76
|
+
locallyCreatedSessionIds
|
|
77
|
+
}) {
|
|
78
|
+
return {
|
|
79
|
+
...server,
|
|
80
|
+
async createSession(request) {
|
|
81
|
+
const session = await server.createSession(request);
|
|
82
|
+
locallyCreatedSessionIds.add(session.id);
|
|
83
|
+
return session;
|
|
84
|
+
},
|
|
85
|
+
async listSessions(request) {
|
|
86
|
+
const result = await server.listSessions(request);
|
|
87
|
+
return {
|
|
88
|
+
...result,
|
|
89
|
+
data: result.data.filter((session) => !sessionIsCreateAgent(session))
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
53
94
|
function ChatRuntimeScope({
|
|
54
95
|
server,
|
|
55
96
|
agent,
|
|
@@ -62,6 +103,12 @@ function ChatRuntimeScope({
|
|
|
62
103
|
}) {
|
|
63
104
|
const { showError } = useToaster();
|
|
64
105
|
const reportError = onError ?? showError;
|
|
106
|
+
const localSessionState = useMemo(() => ({ server, ids: /* @__PURE__ */ new Set() }), [server]);
|
|
107
|
+
const locallyCreatedSessionIds = localSessionState.ids;
|
|
108
|
+
const historyServer = useMemo(
|
|
109
|
+
() => runtimeServer({ server, locallyCreatedSessionIds }),
|
|
110
|
+
[locallyCreatedSessionIds, server]
|
|
111
|
+
);
|
|
65
112
|
const resolvedOnError = useCallback(
|
|
66
113
|
(error) => {
|
|
67
114
|
notifyComposerBusyFailure();
|
|
@@ -70,10 +117,11 @@ function ChatRuntimeScope({
|
|
|
70
117
|
[reportError]
|
|
71
118
|
);
|
|
72
119
|
const runtime = useTrueFoundryAgentRuntime({
|
|
73
|
-
server,
|
|
120
|
+
server: historyServer,
|
|
74
121
|
agent,
|
|
75
122
|
agentName,
|
|
76
123
|
listSessionsAgentId,
|
|
124
|
+
listSessionsCreatedByMe: true,
|
|
77
125
|
initialSessionId,
|
|
78
126
|
onError: resolvedOnError,
|
|
79
127
|
adapters: {
|
|
@@ -81,7 +129,7 @@ function ChatRuntimeScope({
|
|
|
81
129
|
attachments: adapters?.attachments ?? trueFoundryAttachmentAdapter
|
|
82
130
|
}
|
|
83
131
|
});
|
|
84
|
-
return /* @__PURE__ */ jsx(AssistantRuntimeProvider, { runtime, children });
|
|
132
|
+
return /* @__PURE__ */ jsx(AssistantRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(ActiveSessionPermissionScope, { locallyCreatedSessionIds, children }) });
|
|
85
133
|
}
|
|
86
134
|
function TrueFoundryChatProvider(props) {
|
|
87
135
|
const { server, initialSessionId, adapters, onError, children, agent, agentName, listSessionsAgentId } = props;
|
|
@@ -127,7 +175,6 @@ function reconcileDraftSpecPreferences({
|
|
|
127
175
|
models,
|
|
128
176
|
skills,
|
|
129
177
|
connectors,
|
|
130
|
-
connectorsHasMore = false,
|
|
131
178
|
skillsEnabled
|
|
132
179
|
}) {
|
|
133
180
|
const update = {};
|
|
@@ -142,11 +189,9 @@ function reconcileDraftSpecPreferences({
|
|
|
142
189
|
);
|
|
143
190
|
}
|
|
144
191
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
update.mcpServers = nextMcpServers;
|
|
149
|
-
}
|
|
192
|
+
const nextMcpServers = filterMounts(agentSpec.mcpServers, new Set(connectors.map((connector) => connector.name)));
|
|
193
|
+
if (nextMcpServers !== agentSpec.mcpServers) {
|
|
194
|
+
update.mcpServers = nextMcpServers;
|
|
150
195
|
}
|
|
151
196
|
if (skillsEnabled === false) {
|
|
152
197
|
if (agentSpec.skills !== void 0 && agentSpec.skills.length > 0) {
|
|
@@ -195,7 +240,7 @@ function DraftSpecPreferenceBridge() {
|
|
|
195
240
|
const updateAgentSpec = useTrueFoundryUpdateAgentSpec();
|
|
196
241
|
const capabilities = useServerCapabilities();
|
|
197
242
|
const sandboxEnabled = capabilities?.sandbox.enabled;
|
|
198
|
-
const { models, skills, connectors,
|
|
243
|
+
const { models, skills, connectors, loaded, error, ensureLoaded } = useDraftCatalog();
|
|
199
244
|
const isPlainDraft = mode.status === "active" && mode.isMutable && mode.agentId == null && pendingSessionId == null;
|
|
200
245
|
const preferenceKind = mode.status === "active" && mode.isMutable && mode.isCreateAgent ? "agent" : "chat";
|
|
201
246
|
useEffect(() => {
|
|
@@ -220,7 +265,6 @@ function DraftSpecPreferenceBridge() {
|
|
|
220
265
|
models,
|
|
221
266
|
skills,
|
|
222
267
|
connectors,
|
|
223
|
-
connectorsHasMore,
|
|
224
268
|
skillsEnabled: capabilities?.skill.enabled
|
|
225
269
|
});
|
|
226
270
|
if (Object.keys(update).length > 0) {
|
|
@@ -230,7 +274,6 @@ function DraftSpecPreferenceBridge() {
|
|
|
230
274
|
agentSpec,
|
|
231
275
|
capabilities?.skill.enabled,
|
|
232
276
|
connectors,
|
|
233
|
-
connectorsHasMore,
|
|
234
277
|
error,
|
|
235
278
|
isPlainDraft,
|
|
236
279
|
loaded,
|
|
@@ -241,11 +284,28 @@ function DraftSpecPreferenceBridge() {
|
|
|
241
284
|
return null;
|
|
242
285
|
}
|
|
243
286
|
|
|
244
|
-
// src/routing/
|
|
287
|
+
// src/routing/HistorySessionSwitchBridge.tsx
|
|
245
288
|
import { useEffect as useEffect2 } from "react";
|
|
289
|
+
function HistorySessionSwitchBridge() {
|
|
290
|
+
const shell = useOptionalShellMode();
|
|
291
|
+
const aui = useAui();
|
|
292
|
+
const pendingSessionId = shell?.pendingSessionId;
|
|
293
|
+
const pendingSessionEpoch = shell?.pendingSessionEpoch ?? 0;
|
|
294
|
+
useEffect2(() => {
|
|
295
|
+
if (pendingSessionId == null) return;
|
|
296
|
+
void Promise.resolve(aui.threads().switchToThread(pendingSessionId)).catch(() => void 0);
|
|
297
|
+
}, [aui, pendingSessionId, pendingSessionEpoch]);
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// src/routing/LibrarySessionShareBoot.tsx
|
|
302
|
+
import { useEffect as useEffect3 } from "react";
|
|
246
303
|
function LibrarySessionShareBoot() {
|
|
247
304
|
const { openLibraryAgent, setSessionsOpen } = useShellMode();
|
|
248
|
-
|
|
305
|
+
const sessions = useOptionalAgentSessionsServer();
|
|
306
|
+
const sessionsEnabled = isSessionsChromeEnabled({ sessions });
|
|
307
|
+
useEffect3(() => {
|
|
308
|
+
if (!sessionsEnabled) return;
|
|
249
309
|
const share = readSessionShareSearch(window.location.search);
|
|
250
310
|
if (share.view === "sessions") {
|
|
251
311
|
setSessionsOpen(true);
|
|
@@ -253,23 +313,71 @@ function LibrarySessionShareBoot() {
|
|
|
253
313
|
}
|
|
254
314
|
if (share.agentId == null) return;
|
|
255
315
|
openLibraryAgent(share.agentId);
|
|
256
|
-
}, [openLibraryAgent, setSessionsOpen]);
|
|
316
|
+
}, [openLibraryAgent, sessionsEnabled, setSessionsOpen]);
|
|
257
317
|
return null;
|
|
258
318
|
}
|
|
259
319
|
|
|
260
320
|
// src/routing/RemoteIdRouteBridge.tsx
|
|
261
|
-
import { useEffect as
|
|
321
|
+
import { useEffect as useEffect4 } from "react";
|
|
262
322
|
function RemoteIdRouteBridge({ onRemoteIdChange }) {
|
|
263
323
|
const remoteId = useAuiState((s) => s.threadListItem.remoteId);
|
|
264
|
-
|
|
324
|
+
useEffect4(() => {
|
|
265
325
|
onRemoteIdChange(remoteId ?? void 0);
|
|
266
326
|
}, [remoteId, onRemoteIdChange]);
|
|
267
327
|
return null;
|
|
268
328
|
}
|
|
269
329
|
|
|
330
|
+
// src/server/sessionListCache.ts
|
|
331
|
+
var SESSION_LIST_TTL_MS = 3e4;
|
|
332
|
+
function createSessionListCache() {
|
|
333
|
+
return /* @__PURE__ */ new Map();
|
|
334
|
+
}
|
|
335
|
+
function cacheKey(request) {
|
|
336
|
+
const rest = { ...request };
|
|
337
|
+
delete rest.startTimestamp;
|
|
338
|
+
return JSON.stringify(rest, Object.keys(rest).sort());
|
|
339
|
+
}
|
|
340
|
+
function withSessionListCache({
|
|
341
|
+
server,
|
|
342
|
+
cache
|
|
343
|
+
}) {
|
|
344
|
+
const { deleteSession } = server;
|
|
345
|
+
return {
|
|
346
|
+
...server,
|
|
347
|
+
listSessions(request) {
|
|
348
|
+
const key = cacheKey(request);
|
|
349
|
+
const now = Date.now();
|
|
350
|
+
const entry = cache.get(key);
|
|
351
|
+
if (entry !== void 0 && now - entry.at < SESSION_LIST_TTL_MS) return entry.page;
|
|
352
|
+
const page = server.listSessions(request);
|
|
353
|
+
cache.set(key, { at: now, page });
|
|
354
|
+
void page.catch(() => {
|
|
355
|
+
if (cache.get(key)?.page === page) cache.delete(key);
|
|
356
|
+
});
|
|
357
|
+
return page;
|
|
358
|
+
},
|
|
359
|
+
async createSession(request) {
|
|
360
|
+
const result = await server.createSession(request);
|
|
361
|
+
cache.clear();
|
|
362
|
+
return result;
|
|
363
|
+
},
|
|
364
|
+
async updateSession(request) {
|
|
365
|
+
const result = await server.updateSession(request);
|
|
366
|
+
cache.clear();
|
|
367
|
+
return result;
|
|
368
|
+
},
|
|
369
|
+
...deleteSession != null ? {
|
|
370
|
+
deleteSession: async (request) => {
|
|
371
|
+
await deleteSession.call(server, request);
|
|
372
|
+
cache.clear();
|
|
373
|
+
}
|
|
374
|
+
} : {}
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
|
|
270
378
|
// src/containers/useResolvedServer.ts
|
|
271
379
|
import { createTrueFoundryAgentUIServer } from "@truefoundry/assistant-ui-runtime/plugins/truefoundry-agent-server-adapter";
|
|
272
|
-
import { useEffect as
|
|
380
|
+
import { useEffect as useEffect5, useState } from "react";
|
|
273
381
|
var DEFAULT_CAPABILITIES = {
|
|
274
382
|
data: {
|
|
275
383
|
sandbox: { enabled: true },
|
|
@@ -283,14 +391,18 @@ function isBuiltInConfig(config) {
|
|
|
283
391
|
function hasGetCapabilities(server) {
|
|
284
392
|
return typeof Reflect.get(server, "getCapabilities") === "function";
|
|
285
393
|
}
|
|
286
|
-
function toAgentUIServer(server, catalog) {
|
|
394
|
+
function toAgentUIServer(server, catalog, permissions) {
|
|
287
395
|
const getCapabilities = hasGetCapabilities(server) ? () => server.getCapabilities() : async () => DEFAULT_CAPABILITIES;
|
|
288
396
|
const withCapabilities = { ...server, getCapabilities };
|
|
289
|
-
const
|
|
290
|
-
|
|
397
|
+
const withOptionalPorts = {
|
|
398
|
+
...withCapabilities,
|
|
399
|
+
...catalog == null ? {} : { catalog },
|
|
400
|
+
...permissions == null ? {} : { permissions }
|
|
401
|
+
};
|
|
402
|
+
if (!isAgentUIServer(withOptionalPorts)) {
|
|
291
403
|
throw new Error("TrueForgeUI: runtime adapter returned an incomplete AgentUIServer");
|
|
292
404
|
}
|
|
293
|
-
return
|
|
405
|
+
return withOptionalPorts;
|
|
294
406
|
}
|
|
295
407
|
function isAgentUIServer(value) {
|
|
296
408
|
return typeof Reflect.get(value, "createSession") === "function" && typeof Reflect.get(value, "listSessions") === "function" && typeof Reflect.get(value, "getSession") === "function" && typeof Reflect.get(value, "updateSession") === "function" && typeof Reflect.get(value, "createTurn") === "function" && typeof Reflect.get(value, "cancelSession") === "function" && typeof Reflect.get(value, "listTurns") === "function" && typeof Reflect.get(value, "getTurn") === "function" && typeof Reflect.get(value, "listEvents") === "function" && typeof Reflect.get(value, "getCapabilities") === "function" && typeof Reflect.get(value, "getModels") === "function" && typeof Reflect.get(value, "getSkills") === "function" && typeof Reflect.get(value, "getMcp") === "function" && typeof Reflect.get(value, "searchAgents") === "function" && typeof Reflect.get(value, "saveAgent") === "function";
|
|
@@ -306,13 +418,14 @@ function useResolvedServer(config, onError) {
|
|
|
306
418
|
const trueforgeToken = builtIn?.type === "trueforge" ? builtIn.token ?? "" : "";
|
|
307
419
|
const trueforgeFetch = builtIn?.type === "trueforge" ? builtIn.fetch : void 0;
|
|
308
420
|
const catalog = builtIn?.catalog;
|
|
421
|
+
const permissions = builtIn?.permissions;
|
|
309
422
|
const [state, setState] = useState(() => {
|
|
310
423
|
if (directServer) {
|
|
311
424
|
return { status: "ready", server: directServer, error: null };
|
|
312
425
|
}
|
|
313
426
|
return { status: "loading", server: null, error: null };
|
|
314
427
|
});
|
|
315
|
-
|
|
428
|
+
useEffect5(() => {
|
|
316
429
|
if (directServer) {
|
|
317
430
|
setState({ status: "ready", server: directServer, error: null });
|
|
318
431
|
return;
|
|
@@ -326,22 +439,23 @@ function useResolvedServer(config, onError) {
|
|
|
326
439
|
...trueforgeBaseUrl ? { baseUrl: trueforgeBaseUrl } : {},
|
|
327
440
|
...trueforgeToken ? { token: trueforgeToken } : {},
|
|
328
441
|
...trueforgeFetch !== void 0 ? { fetch: trueforgeFetch } : {},
|
|
329
|
-
...catalog != null ? { catalog } : {}
|
|
442
|
+
...catalog != null ? { catalog } : {},
|
|
443
|
+
...permissions != null ? { permissions } : {}
|
|
330
444
|
});
|
|
331
445
|
}
|
|
332
|
-
const
|
|
446
|
+
const runtimeServer2 = await createTrueFoundryAgentUIServer({
|
|
333
447
|
apiKey,
|
|
334
448
|
cpURL: controlPlaneURL,
|
|
335
449
|
...gatewayPlaneURL ? { gatewayURL: gatewayPlaneURL } : {}
|
|
336
450
|
});
|
|
337
|
-
return toAgentUIServer(
|
|
451
|
+
return toAgentUIServer(runtimeServer2, catalog, permissions);
|
|
338
452
|
};
|
|
339
453
|
void resolve().then((server) => {
|
|
340
454
|
if (cancelled) return;
|
|
341
455
|
try {
|
|
342
456
|
setState({
|
|
343
457
|
status: "ready",
|
|
344
|
-
server: type === "trueforge" ? toAgentUIServer(server, void 0) : server,
|
|
458
|
+
server: type === "trueforge" ? toAgentUIServer(server, void 0, void 0) : server,
|
|
345
459
|
error: null
|
|
346
460
|
});
|
|
347
461
|
} catch (error) {
|
|
@@ -366,6 +480,7 @@ function useResolvedServer(config, onError) {
|
|
|
366
480
|
trueforgeToken,
|
|
367
481
|
trueforgeFetch,
|
|
368
482
|
catalog,
|
|
483
|
+
permissions,
|
|
369
484
|
onError
|
|
370
485
|
]);
|
|
371
486
|
return state;
|
|
@@ -373,11 +488,11 @@ function useResolvedServer(config, onError) {
|
|
|
373
488
|
|
|
374
489
|
// src/containers/TrueForgeUIShell.tsx
|
|
375
490
|
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
376
|
-
var SidebarLayout = lazy(() => import("./SidebarLayout-
|
|
377
|
-
var DrawerLayout = lazy(() => import("./DrawerLayout-
|
|
378
|
-
var DockLayout = lazy(() => import("./DockLayout-
|
|
379
|
-
var WidgetLayout = lazy(() => import("./WidgetLayout-
|
|
380
|
-
var ShellRouteSync = lazy(() => import("./ShellRouteSync-
|
|
491
|
+
var SidebarLayout = lazy(() => import("./SidebarLayout-35K4AKTC.js").then((m) => ({ default: m.SidebarLayout })));
|
|
492
|
+
var DrawerLayout = lazy(() => import("./DrawerLayout-SQ323AVM.js").then((m) => ({ default: m.DrawerLayout })));
|
|
493
|
+
var DockLayout = lazy(() => import("./DockLayout-F44RWGEY.js").then((m) => ({ default: m.DockLayout })));
|
|
494
|
+
var WidgetLayout = lazy(() => import("./WidgetLayout-RKBSN2FZ.js").then((m) => ({ default: m.WidgetLayout })));
|
|
495
|
+
var ShellRouteSync = lazy(() => import("./ShellRouteSync-EN33DUQ7.js").then((m) => ({ default: m.ShellRouteSync })));
|
|
381
496
|
function LayoutFallback({ className }) {
|
|
382
497
|
return /* @__PURE__ */ jsx2(
|
|
383
498
|
"div",
|
|
@@ -455,8 +570,9 @@ function ChatProviderFromShell({
|
|
|
455
570
|
server,
|
|
456
571
|
...providerRest
|
|
457
572
|
}) {
|
|
458
|
-
const { mode, runtimeKey, listSessionsAgentId, pendingSessionId } = useShellMode();
|
|
573
|
+
const { mode, runtimeKey, historyAgentFilter, listSessionsAgentId, pendingSessionId } = useShellMode();
|
|
459
574
|
const isCreateAgent = mode.status === "active" && mode.isMutable && mode.isCreateAgent;
|
|
575
|
+
const [sessionListCache] = useState2(createSessionListCache);
|
|
460
576
|
const serverWithCreateIntent = useMemo2(() => {
|
|
461
577
|
return {
|
|
462
578
|
...server,
|
|
@@ -474,6 +590,14 @@ function ChatProviderFromShell({
|
|
|
474
590
|
}
|
|
475
591
|
};
|
|
476
592
|
}, [server, isCreateAgent]);
|
|
593
|
+
const cachedRuntimeServer = useMemo2(
|
|
594
|
+
() => withSessionListCache({ server: serverWithCreateIntent, cache: sessionListCache }),
|
|
595
|
+
[serverWithCreateIntent, sessionListCache]
|
|
596
|
+
);
|
|
597
|
+
const runtimeServer2 = useMemo2(() => {
|
|
598
|
+
if (historyAgentFilter == null || historyAgentFilter.agentId != null) return cachedRuntimeServer;
|
|
599
|
+
return { ...cachedRuntimeServer, listSessions: async () => ({ data: [] }) };
|
|
600
|
+
}, [cachedRuntimeServer, historyAgentFilter]);
|
|
477
601
|
const draftDefaultAgentSpec = useMemo2(() => {
|
|
478
602
|
if (mode.status === "active" && mode.isMutable) {
|
|
479
603
|
return mode.agentSpec ?? { model: { name: "openai-main/gpt-4.1" } };
|
|
@@ -502,22 +626,23 @@ function ChatProviderFromShell({
|
|
|
502
626
|
defaultAgentSpec: draftDefaultAgentSpec
|
|
503
627
|
};
|
|
504
628
|
}, [mode, draftDefaultAgentSpec, pendingSessionId]);
|
|
505
|
-
return /* @__PURE__ */ jsx2(
|
|
629
|
+
return /* @__PURE__ */ jsx2(DraftCatalogProvider, { children: /* @__PURE__ */ jsx2(
|
|
506
630
|
TrueFoundryChatProvider,
|
|
507
631
|
{
|
|
508
632
|
...providerRest,
|
|
509
|
-
server:
|
|
633
|
+
server: runtimeServer2,
|
|
510
634
|
agent,
|
|
511
635
|
listSessionsAgentId,
|
|
512
636
|
initialSessionId: pendingSessionId ?? hostInitialSessionId,
|
|
513
|
-
children: /* @__PURE__ */
|
|
637
|
+
children: /* @__PURE__ */ jsxs(AgentConfigInstructionsProvider, { children: [
|
|
514
638
|
/* @__PURE__ */ jsx2(DraftSpecPreferenceBridge, {}),
|
|
639
|
+
/* @__PURE__ */ jsx2(HistorySessionSwitchBridge, {}),
|
|
515
640
|
onRemoteIdChange != null ? /* @__PURE__ */ jsx2(RemoteIdRouteBridge, { onRemoteIdChange }) : null,
|
|
516
641
|
children
|
|
517
|
-
] })
|
|
642
|
+
] })
|
|
518
643
|
},
|
|
519
644
|
runtimeKey
|
|
520
|
-
);
|
|
645
|
+
) });
|
|
521
646
|
}
|
|
522
647
|
function TrueForgeUIShell(props) {
|
|
523
648
|
const {
|
|
@@ -530,6 +655,7 @@ function TrueForgeUIShell(props) {
|
|
|
530
655
|
server: serverConfig,
|
|
531
656
|
onError,
|
|
532
657
|
customActionRenderers,
|
|
658
|
+
currentUser,
|
|
533
659
|
resolvedRoutes,
|
|
534
660
|
routes: _routes,
|
|
535
661
|
...providerRest
|
|
@@ -567,7 +693,7 @@ function TrueForgeUIShell(props) {
|
|
|
567
693
|
)
|
|
568
694
|
] });
|
|
569
695
|
const visibilityTree = layout === "widget" ? /* @__PURE__ */ jsx2(WidgetVisibilityProvider, { children: shellTree }) : shellTree;
|
|
570
|
-
return /* @__PURE__ */ jsx2(SlotsProvider, { overrides, theme, children: /* @__PURE__ */ jsx2(CustomActionRenderersProvider, { renderers: customActionRenderers, children: /* @__PURE__ */ jsx2(ServerProvider, { server, children: resolvedRoutes != null ? /* @__PURE__ */ jsx2(ResolvedRoutesProvider, { routes: resolvedRoutes, children: visibilityTree }) : visibilityTree }) }) });
|
|
696
|
+
return /* @__PURE__ */ jsx2(SlotsProvider, { overrides, theme, children: /* @__PURE__ */ jsx2(CurrentUserProvider, { currentUser, children: /* @__PURE__ */ jsx2(CustomActionRenderersProvider, { renderers: customActionRenderers, children: /* @__PURE__ */ jsx2(ServerProvider, { server, children: resolvedRoutes != null ? /* @__PURE__ */ jsx2(ResolvedRoutesProvider, { routes: resolvedRoutes, children: visibilityTree }) : visibilityTree }) }) }) });
|
|
571
697
|
}
|
|
572
698
|
|
|
573
699
|
export {
|
|
@@ -575,4 +701,4 @@ export {
|
|
|
575
701
|
ServerInitLoader,
|
|
576
702
|
TrueForgeUIShell
|
|
577
703
|
};
|
|
578
|
-
//# sourceMappingURL=chunk-
|
|
704
|
+
//# sourceMappingURL=chunk-F5QVQIBH.js.map
|