@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.10
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 +143 -0
- package/README.md +23 -8
- package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-RJBB4DDE.js} +38 -23
- package/dist/AgentCodeSnippets-RJBB4DDE.js.map +1 -0
- package/dist/AgentMetricChart-UPGSJ2WP.js +15 -0
- package/dist/{AgentOverview-EEBHJC32.js → AgentOverview-U5WIQXZN.js} +11 -9
- package/dist/AgentOverview-U5WIQXZN.js.map +1 -0
- package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-GRGIQTRE.js} +19 -10
- package/dist/AgentSessionEventTimeline-GRGIQTRE.js.map +1 -0
- package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-GNF4VOUT.js} +144 -57
- package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js.map +1 -0
- package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-5OTF2BUW.js} +72 -24
- package/dist/AgentSessions-5OTF2BUW.js.map +1 -0
- package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-HDKGLDCY.js} +162 -126
- package/dist/ConnectorSettings-HDKGLDCY.js.map +1 -0
- package/dist/{DockLayout-LM4AFMFY.js → DockLayout-D2FPQCAL.js} +10 -10
- package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-HUV7RAWL.js} +14 -12
- package/dist/DrawerLayout-HUV7RAWL.js.map +1 -0
- package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-VNQ7HPKH.js} +22 -28
- package/dist/ModelSettings-VNQ7HPKH.js.map +1 -0
- package/dist/OpenUiFenceBlock-KPZFLUSC.js +9 -0
- package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-ZLXGMFBF.js} +17 -21
- package/dist/SandboxSettings-ZLXGMFBF.js.map +1 -0
- package/dist/SchedulesPage-QKYI2Z3A.js +15 -0
- package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-RVVYXOJW.js} +9 -9
- package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-RVVYXOJW.js.map} +1 -1
- package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-SJXFKUAJ.js} +171 -26
- package/dist/ShellRouteSync-SJXFKUAJ.js.map +1 -0
- package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-KYA76FQ7.js} +80 -58
- package/dist/SidebarLayout-KYA76FQ7.js.map +1 -0
- package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-7OHT7FPI.js} +24 -22
- package/dist/SkillSettings-7OHT7FPI.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-LKG4XLW6.js} +9 -9
- package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-W2RGGOQ3.js} +10 -10
- package/dist/{chunk-U7KURWW3.js → chunk-2GIZY3JJ.js} +276 -54
- package/dist/chunk-2GIZY3JJ.js.map +1 -0
- package/dist/{chunk-WVE3F724.js → chunk-2QTH6JHX.js} +21 -4
- package/dist/chunk-2QTH6JHX.js.map +1 -0
- package/dist/{chunk-XAU7QFG3.js → chunk-3ZW74FHC.js} +68 -256
- package/dist/chunk-3ZW74FHC.js.map +1 -0
- package/dist/{chunk-FJW36PD7.js → chunk-67ZO7Z2W.js} +28 -24
- package/dist/chunk-67ZO7Z2W.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-MPNSO7E6.js → chunk-CG75X77Q.js} +2 -2
- package/dist/chunk-DPPOEFBD.js +517 -0
- package/dist/chunk-DPPOEFBD.js.map +1 -0
- package/dist/{chunk-6O6FWUDW.js → chunk-EPAL2HD5.js} +641 -388
- package/dist/chunk-EPAL2HD5.js.map +1 -0
- package/dist/{chunk-ZTMKFZQ3.js → chunk-GG23N2GW.js} +5099 -3295
- package/dist/chunk-GG23N2GW.js.map +1 -0
- package/dist/chunk-JCL3Q7RW.js +587 -0
- package/dist/chunk-JCL3Q7RW.js.map +1 -0
- package/dist/{chunk-M62XY4NC.js → chunk-JKEBMGLH.js} +235 -108
- package/dist/chunk-JKEBMGLH.js.map +1 -0
- package/dist/{chunk-DMMZSZTN.js → chunk-KSGNKS2D.js} +60 -16
- package/dist/chunk-KSGNKS2D.js.map +1 -0
- package/dist/{chunk-CYHJDKFB.js → chunk-PCI6VMB5.js} +189 -52
- package/dist/chunk-PCI6VMB5.js.map +1 -0
- package/dist/{chunk-ZKNUMH2M.js → chunk-PQ7VWBQQ.js} +13 -11
- package/dist/chunk-PQ7VWBQQ.js.map +1 -0
- package/dist/chunk-T6QQV5LK.js +238 -0
- package/dist/chunk-T6QQV5LK.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +369 -108
- package/dist/index.js +69 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +49 -14
- package/dist/plugins/trueforge-agent-server-adapter/index.js +138 -50
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -4
- package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
- package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
- package/dist/AgentOverview-EEBHJC32.js.map +0 -1
- 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-UPGSJ2WP.js.map} +0 -0
- /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-D2FPQCAL.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-KPZFLUSC.js.map} +0 -0
- /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-QKYI2Z3A.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-LKG4XLW6.js.map} +0 -0
- /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-W2RGGOQ3.js.map} +0 -0
- /package/dist/{chunk-MPNSO7E6.js.map → chunk-CG75X77Q.js.map} +0 -0
|
@@ -5,6 +5,7 @@ var ServerContext = createContext(null);
|
|
|
5
5
|
var ServerCapabilitiesContext = createContext(null);
|
|
6
6
|
function ServerProvider({ server, children }) {
|
|
7
7
|
const [capabilities, setCapabilities] = useState(null);
|
|
8
|
+
const [capabilitiesSettled, setCapabilitiesSettled] = useState(false);
|
|
8
9
|
const cancelActiveRequestRef = useRef(null);
|
|
9
10
|
const refreshCapabilities = useCallback(() => {
|
|
10
11
|
cancelActiveRequestRef.current?.();
|
|
@@ -15,18 +16,21 @@ function ServerProvider({ server, children }) {
|
|
|
15
16
|
void server.getCapabilities().then((response) => {
|
|
16
17
|
if (!cancelled) setCapabilities(response.data);
|
|
17
18
|
}).catch(() => {
|
|
19
|
+
}).finally(() => {
|
|
20
|
+
if (!cancelled) setCapabilitiesSettled(true);
|
|
18
21
|
});
|
|
19
22
|
}, [server]);
|
|
20
23
|
useEffect(() => {
|
|
21
24
|
setCapabilities(null);
|
|
25
|
+
setCapabilitiesSettled(false);
|
|
22
26
|
refreshCapabilities();
|
|
23
27
|
return () => {
|
|
24
28
|
cancelActiveRequestRef.current?.();
|
|
25
29
|
};
|
|
26
30
|
}, [refreshCapabilities]);
|
|
27
31
|
const capabilitiesValue = useMemo(
|
|
28
|
-
() => ({ capabilities, refresh: refreshCapabilities }),
|
|
29
|
-
[capabilities, refreshCapabilities]
|
|
32
|
+
() => ({ capabilities, settled: capabilitiesSettled, refresh: refreshCapabilities }),
|
|
33
|
+
[capabilities, capabilitiesSettled, refreshCapabilities]
|
|
30
34
|
);
|
|
31
35
|
return /* @__PURE__ */ jsx(ServerContext.Provider, { value: server, children: /* @__PURE__ */ jsx(ServerCapabilitiesContext.Provider, { value: capabilitiesValue, children }) });
|
|
32
36
|
}
|
|
@@ -43,6 +47,9 @@ function useOptionalServer() {
|
|
|
43
47
|
function useServerCapabilities() {
|
|
44
48
|
return useContext(ServerCapabilitiesContext)?.capabilities ?? null;
|
|
45
49
|
}
|
|
50
|
+
function useServerCapabilitiesSettled() {
|
|
51
|
+
return useContext(ServerCapabilitiesContext)?.settled ?? false;
|
|
52
|
+
}
|
|
46
53
|
function useOptionalRefreshServerCapabilities() {
|
|
47
54
|
return useContext(ServerCapabilitiesContext)?.refresh ?? null;
|
|
48
55
|
}
|
|
@@ -86,6 +93,9 @@ function useScheduleServer() {
|
|
|
86
93
|
function useOptionalScheduleServer() {
|
|
87
94
|
return useOptionalServer()?.schedules ?? null;
|
|
88
95
|
}
|
|
96
|
+
function useOptionalPermissionsServer() {
|
|
97
|
+
return useOptionalServer()?.permissions ?? null;
|
|
98
|
+
}
|
|
89
99
|
|
|
90
100
|
// src/utils/sessionShareUrl.ts
|
|
91
101
|
var SESSION_ID_QUERY = "sessionId";
|
|
@@ -99,8 +109,11 @@ var SESSION_TIME_WINDOW_QUERY = "s_tw";
|
|
|
99
109
|
var SESSION_TIME_BUFFER_MS = 5 * 60 * 1e3;
|
|
100
110
|
var SESSION_CUSTOM_RANGE_MAX_DAYS = 70;
|
|
101
111
|
var DEFAULT_SESSION_TIME_WINDOW_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
112
|
+
var DEFAULT_METRICS_TIME_WINDOW_MS = 24 * 60 * 60 * 1e3;
|
|
102
113
|
function parseLibraryAgentTab(value) {
|
|
103
|
-
if (value === "overview" || value === "sessions" || value === "code" || value === "metrics")
|
|
114
|
+
if (value === "overview" || value === "sessions" || value === "schedules" || value === "code" || value === "metrics") {
|
|
115
|
+
return value;
|
|
116
|
+
}
|
|
104
117
|
return null;
|
|
105
118
|
}
|
|
106
119
|
function nonEmpty(value) {
|
|
@@ -118,6 +131,13 @@ function defaultSessionTimeRange(now = Date.now()) {
|
|
|
118
131
|
timeWindowMs: DEFAULT_SESSION_TIME_WINDOW_MS
|
|
119
132
|
};
|
|
120
133
|
}
|
|
134
|
+
function defaultMetricsTimeRange(now = Date.now()) {
|
|
135
|
+
return {
|
|
136
|
+
startTs: now - DEFAULT_METRICS_TIME_WINDOW_MS,
|
|
137
|
+
endTs: now,
|
|
138
|
+
timeWindowMs: DEFAULT_METRICS_TIME_WINDOW_MS
|
|
139
|
+
};
|
|
140
|
+
}
|
|
121
141
|
function sessionTimeRangeFromCreatedAt(createdAt) {
|
|
122
142
|
const createdAtMs = new Date(createdAt).getTime();
|
|
123
143
|
if (Number.isNaN(createdAtMs)) return null;
|
|
@@ -138,12 +158,13 @@ function readSessionShareSearch(search) {
|
|
|
138
158
|
const endTs = parseMs(params.get(SESSION_END_TIME_QUERY));
|
|
139
159
|
const timeWindowMs = parseMs(params.get(SESSION_TIME_WINDOW_QUERY));
|
|
140
160
|
const view = params.get(SESSIONS_VIEW_QUERY);
|
|
161
|
+
const now = Date.now();
|
|
141
162
|
return {
|
|
142
163
|
sessionId: nonEmpty(params.get(SESSION_ID_QUERY)),
|
|
143
164
|
agentId: nonEmpty(params.get(AGENT_ID_QUERY)),
|
|
144
165
|
tab: parseLibraryAgentTab(params.get(AGENT_TAB_QUERY)),
|
|
145
166
|
view: view === SESSIONS_VIEW_VALUE ? SESSIONS_VIEW_VALUE : null,
|
|
146
|
-
timeRange: startTs != null && endTs != null ? { startTs, endTs } : timeWindowMs != null ? { startTs:
|
|
167
|
+
timeRange: startTs != null && endTs != null ? { startTs, endTs } : timeWindowMs != null ? { startTs: now - timeWindowMs, endTs: now, timeWindowMs } : null
|
|
147
168
|
};
|
|
148
169
|
}
|
|
149
170
|
function libraryAgentTabFromSearch(share, agentId) {
|
|
@@ -200,12 +221,37 @@ function replaceSessionShareSearch(next) {
|
|
|
200
221
|
return url.search;
|
|
201
222
|
}
|
|
202
223
|
|
|
203
|
-
// src/server/
|
|
224
|
+
// src/server/serverChrome.ts
|
|
204
225
|
function isSettingsChromeEnabled({
|
|
205
226
|
catalog,
|
|
206
227
|
capabilities
|
|
207
228
|
}) {
|
|
208
|
-
return catalog != null && capabilities?.settings?.enabled
|
|
229
|
+
return catalog != null && capabilities?.settings?.enabled === true;
|
|
230
|
+
}
|
|
231
|
+
function isSessionsChromeEnabled({ sessions }) {
|
|
232
|
+
return sessions != null;
|
|
233
|
+
}
|
|
234
|
+
function isSchedulesChromeEnabled({ schedules }) {
|
|
235
|
+
return schedules != null;
|
|
236
|
+
}
|
|
237
|
+
function isMetricsChromeEnabled({ metrics }) {
|
|
238
|
+
return metrics != null;
|
|
239
|
+
}
|
|
240
|
+
function toEffectiveRoutes({
|
|
241
|
+
routes,
|
|
242
|
+
catalog,
|
|
243
|
+
capabilities,
|
|
244
|
+
sessions,
|
|
245
|
+
schedules
|
|
246
|
+
}) {
|
|
247
|
+
const sessionsEnabled = isSessionsChromeEnabled({ sessions });
|
|
248
|
+
return {
|
|
249
|
+
...routes,
|
|
250
|
+
settings: isSettingsChromeEnabled({ catalog, capabilities }) ? routes.settings : null,
|
|
251
|
+
sessionsBrowser: sessionsEnabled ? routes.sessionsBrowser : null,
|
|
252
|
+
libraryAgent: sessionsEnabled ? routes.libraryAgent : null,
|
|
253
|
+
schedules: isSchedulesChromeEnabled({ schedules }) ? routes.schedules : null
|
|
254
|
+
};
|
|
209
255
|
}
|
|
210
256
|
|
|
211
257
|
// src/server/ShellModeContext.tsx
|
|
@@ -368,6 +414,7 @@ function ShellModeProvider({
|
|
|
368
414
|
const capabilities = useServerCapabilities();
|
|
369
415
|
const catalog = useOptionalCatalogServer();
|
|
370
416
|
const refreshCapabilities = useOptionalRefreshServerCapabilities();
|
|
417
|
+
const sessionsServer = useOptionalAgentSessionsServer();
|
|
371
418
|
const scheduleServer = useOptionalScheduleServer();
|
|
372
419
|
const chatSeedRef = useRef2(
|
|
373
420
|
readDraftSpecPreferences("chat") ?? selectDraftSpecPreferences(mutableSeedFromConfig(agentConfig), "chat")
|
|
@@ -392,24 +439,29 @@ function ShellModeProvider({
|
|
|
392
439
|
const [schedulesOpenState, setSchedulesOpenState] = useState2(false);
|
|
393
440
|
const [historyAgentFilter, setHistoryAgentFilter] = useState2(null);
|
|
394
441
|
const [pendingSessionId, setPendingSessionId] = useState2(void 0);
|
|
442
|
+
const [pendingSessionEpoch, setPendingSessionEpoch] = useState2(0);
|
|
395
443
|
const settingsEnabled = isSettingsChromeEnabled({ catalog, capabilities });
|
|
396
444
|
const settingsOpen = settingsEnabled && settingsOpenState;
|
|
397
|
-
const
|
|
445
|
+
const sessionsEnabled = isSessionsChromeEnabled({ sessions: sessionsServer });
|
|
446
|
+
const schedulesEnabled = isSchedulesChromeEnabled({ schedules: scheduleServer });
|
|
398
447
|
const schedulesOpen = schedulesEnabled && schedulesOpenState;
|
|
399
448
|
const libraryOpen = isLibraryEnabled && libraryOpenState;
|
|
400
|
-
const sessionsOpen = sessionsOpenState;
|
|
401
|
-
const setSessionsOpen = useCallback2(
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
449
|
+
const sessionsOpen = sessionsEnabled && sessionsOpenState;
|
|
450
|
+
const setSessionsOpen = useCallback2(
|
|
451
|
+
(open) => {
|
|
452
|
+
if (open) {
|
|
453
|
+
setSettingsOpenState(false);
|
|
454
|
+
setAgentConfigOpenState(false);
|
|
455
|
+
setLibraryOpenState(false);
|
|
456
|
+
setLibraryAgentId(null);
|
|
457
|
+
setSchedulesOpenState(false);
|
|
458
|
+
} else {
|
|
459
|
+
replaceSessionShareSearch({ view: null });
|
|
460
|
+
}
|
|
461
|
+
setSessionsOpenState(sessionsEnabled && open);
|
|
462
|
+
},
|
|
463
|
+
[sessionsEnabled]
|
|
464
|
+
);
|
|
413
465
|
const setLibraryOpen = useCallback2(
|
|
414
466
|
(open) => {
|
|
415
467
|
if (!isLibraryEnabled) return;
|
|
@@ -426,7 +478,7 @@ function ShellModeProvider({
|
|
|
426
478
|
);
|
|
427
479
|
const openLibraryAgent = useCallback2(
|
|
428
480
|
(agentId) => {
|
|
429
|
-
if (!isLibraryEnabled) return;
|
|
481
|
+
if (!isLibraryEnabled || !sessionsEnabled) return;
|
|
430
482
|
setSettingsOpenState(false);
|
|
431
483
|
setAgentConfigOpenState(false);
|
|
432
484
|
setSessionsOpen(false);
|
|
@@ -434,7 +486,7 @@ function ShellModeProvider({
|
|
|
434
486
|
setLibraryOpenState(true);
|
|
435
487
|
setLibraryAgentId(agentId);
|
|
436
488
|
},
|
|
437
|
-
[isLibraryEnabled, setSessionsOpen]
|
|
489
|
+
[isLibraryEnabled, sessionsEnabled, setSessionsOpen]
|
|
438
490
|
);
|
|
439
491
|
const closeLibraryAgent = useCallback2(() => {
|
|
440
492
|
setLibraryAgentId(null);
|
|
@@ -482,10 +534,16 @@ function ShellModeProvider({
|
|
|
482
534
|
[schedulesEnabled, setSessionsOpen]
|
|
483
535
|
);
|
|
484
536
|
useEffect2(() => {
|
|
485
|
-
if (
|
|
537
|
+
if (catalog == null || capabilities?.settings?.enabled === false) {
|
|
486
538
|
setSettingsOpenState(false);
|
|
487
539
|
}
|
|
488
|
-
}, [
|
|
540
|
+
}, [capabilities?.settings?.enabled, catalog]);
|
|
541
|
+
useEffect2(() => {
|
|
542
|
+
if (!sessionsEnabled) {
|
|
543
|
+
setSessionsOpenState(false);
|
|
544
|
+
setLibraryAgentId(null);
|
|
545
|
+
}
|
|
546
|
+
}, [sessionsEnabled]);
|
|
489
547
|
useEffect2(() => {
|
|
490
548
|
if (!schedulesEnabled) {
|
|
491
549
|
setSchedulesOpenState(false);
|
|
@@ -515,7 +573,7 @@ function ShellModeProvider({
|
|
|
515
573
|
const listSessionsAgentId = useMemo2(() => {
|
|
516
574
|
if (locked) return lockedAgentName;
|
|
517
575
|
if (!isLibraryEnabled) return void 0;
|
|
518
|
-
return historyAgentFilter
|
|
576
|
+
return historyAgentFilter?.agentId;
|
|
519
577
|
}, [locked, lockedAgentName, isLibraryEnabled, historyAgentFilter]);
|
|
520
578
|
const bumpEpoch = useCallback2((isMutable) => {
|
|
521
579
|
if (isMutable) setMutableEpoch((n) => n + 1);
|
|
@@ -539,6 +597,7 @@ function ShellModeProvider({
|
|
|
539
597
|
isCreateAgent,
|
|
540
598
|
agentId: req.agentId,
|
|
541
599
|
agentName: req.agentName,
|
|
600
|
+
description: req.description,
|
|
542
601
|
agentSpec: req.agentSpec ?? (kind === "agent" ? agentSeedRef.current : chatSeedRef.current),
|
|
543
602
|
locked: false
|
|
544
603
|
});
|
|
@@ -564,6 +623,15 @@ function ShellModeProvider({
|
|
|
564
623
|
agentName,
|
|
565
624
|
locked: false
|
|
566
625
|
});
|
|
626
|
+
if (req.agentId != null) {
|
|
627
|
+
setHistoryAgentFilter({
|
|
628
|
+
agentId: req.agentId,
|
|
629
|
+
agentName,
|
|
630
|
+
intent: "try-agent"
|
|
631
|
+
});
|
|
632
|
+
} else {
|
|
633
|
+
setHistoryAgentFilter(null);
|
|
634
|
+
}
|
|
567
635
|
bumpEpoch(false);
|
|
568
636
|
},
|
|
569
637
|
[isComposerEnabled, isLibraryEnabled, bumpEpoch, setSettingsOpen, setSessionsOpen, setSchedulesOpen]
|
|
@@ -579,6 +647,7 @@ function ShellModeProvider({
|
|
|
579
647
|
isCreateAgent: true,
|
|
580
648
|
agentId: req.agentId,
|
|
581
649
|
agentName: req.agentName,
|
|
650
|
+
description: req.description,
|
|
582
651
|
agentSpec: req.agentSpec,
|
|
583
652
|
locked: false
|
|
584
653
|
};
|
|
@@ -595,13 +664,32 @@ function ShellModeProvider({
|
|
|
595
664
|
const openDraft = useCallback2(() => {
|
|
596
665
|
if (!isComposerEnabled) return;
|
|
597
666
|
refreshCapabilities?.();
|
|
667
|
+
setHistoryAgentFilter(null);
|
|
598
668
|
selectLibraryAgent({ isMutable: true, isCreateAgent: false, agentSpec: chatSeedRef.current });
|
|
599
669
|
}, [isComposerEnabled, refreshCapabilities, selectLibraryAgent]);
|
|
670
|
+
const isActiveAgentBuilder = effectiveMode.status === "active" && effectiveMode.isMutable && effectiveMode.isCreateAgent;
|
|
600
671
|
const openAgentBuilder = useCallback2(() => {
|
|
601
672
|
if (!isComposerEnabled) return;
|
|
602
673
|
refreshCapabilities?.();
|
|
674
|
+
if (isActiveAgentBuilder) {
|
|
675
|
+
setSettingsOpen(false);
|
|
676
|
+
setLibraryOpenState(false);
|
|
677
|
+
setLibraryAgentId(null);
|
|
678
|
+
setSessionsOpen(false);
|
|
679
|
+
setSchedulesOpen(false);
|
|
680
|
+
setAgentConfigOpenState(true);
|
|
681
|
+
return;
|
|
682
|
+
}
|
|
603
683
|
selectLibraryAgent({ isMutable: true, isCreateAgent: true, agentSpec: agentSeedRef.current });
|
|
604
|
-
}, [
|
|
684
|
+
}, [
|
|
685
|
+
isActiveAgentBuilder,
|
|
686
|
+
isComposerEnabled,
|
|
687
|
+
refreshCapabilities,
|
|
688
|
+
selectLibraryAgent,
|
|
689
|
+
setSchedulesOpen,
|
|
690
|
+
setSessionsOpen,
|
|
691
|
+
setSettingsOpen
|
|
692
|
+
]);
|
|
605
693
|
const sandboxEnabled = capabilities?.sandbox.enabled;
|
|
606
694
|
const rememberDraftSpec = useCallback2(
|
|
607
695
|
(agentSpec, kind = "chat") => {
|
|
@@ -610,7 +698,7 @@ function ShellModeProvider({
|
|
|
610
698
|
if (kind === "chat") {
|
|
611
699
|
chatSeedRef.current = preferences;
|
|
612
700
|
} else {
|
|
613
|
-
agentSeedRef.current =
|
|
701
|
+
agentSeedRef.current = withCapabilitiesSandbox(agentSpec, sandboxEnabled);
|
|
614
702
|
}
|
|
615
703
|
writeDraftSpecPreferences(kind, preferences);
|
|
616
704
|
},
|
|
@@ -623,15 +711,22 @@ function ShellModeProvider({
|
|
|
623
711
|
isMutable: isMutableOpt,
|
|
624
712
|
isCreateAgent: isCreateAgentOpt
|
|
625
713
|
}) => {
|
|
714
|
+
const isMutable = isMutableOpt ?? agentName == null;
|
|
715
|
+
if (isMutable) {
|
|
716
|
+
if (!isComposerEnabled) return;
|
|
717
|
+
} else if (locked) {
|
|
718
|
+
if (agentName == null || lockedAgentName !== agentName) return;
|
|
719
|
+
} else if (!isLibraryEnabled) {
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
626
722
|
setSettingsOpen(false);
|
|
627
723
|
setLibraryOpenState(false);
|
|
628
724
|
setLibraryAgentId(null);
|
|
629
725
|
setSessionsOpen(false);
|
|
630
726
|
setSchedulesOpen(false);
|
|
631
727
|
setPendingSessionId(sessionId);
|
|
632
|
-
|
|
728
|
+
setPendingSessionEpoch((n) => n + 1);
|
|
633
729
|
if (isMutable) {
|
|
634
|
-
if (!isComposerEnabled) return;
|
|
635
730
|
const isCreateAgent = isCreateAgentOpt === true;
|
|
636
731
|
setMode({
|
|
637
732
|
status: "active",
|
|
@@ -641,12 +736,6 @@ function ShellModeProvider({
|
|
|
641
736
|
locked: false
|
|
642
737
|
});
|
|
643
738
|
setAgentConfigOpenState(isCreateAgent);
|
|
644
|
-
bumpEpoch(true);
|
|
645
|
-
return;
|
|
646
|
-
}
|
|
647
|
-
if (locked) {
|
|
648
|
-
if (agentName == null || lockedAgentName !== agentName) return;
|
|
649
|
-
} else if (!isLibraryEnabled) {
|
|
650
739
|
return;
|
|
651
740
|
}
|
|
652
741
|
setAgentConfigOpenState(false);
|
|
@@ -657,18 +746,8 @@ function ShellModeProvider({
|
|
|
657
746
|
locked: false,
|
|
658
747
|
...agentName != null ? { agentId: agentName, agentName } : {}
|
|
659
748
|
});
|
|
660
|
-
bumpEpoch(false);
|
|
661
749
|
},
|
|
662
|
-
[
|
|
663
|
-
isLibraryEnabled,
|
|
664
|
-
isComposerEnabled,
|
|
665
|
-
locked,
|
|
666
|
-
lockedAgentName,
|
|
667
|
-
bumpEpoch,
|
|
668
|
-
setSettingsOpen,
|
|
669
|
-
setSessionsOpen,
|
|
670
|
-
setSchedulesOpen
|
|
671
|
-
]
|
|
750
|
+
[isLibraryEnabled, isComposerEnabled, locked, lockedAgentName, setSettingsOpen, setSessionsOpen, setSchedulesOpen]
|
|
672
751
|
);
|
|
673
752
|
const clearChat = useCallback2(() => {
|
|
674
753
|
if (effectiveMode.status === "idle") return;
|
|
@@ -702,12 +781,8 @@ function ShellModeProvider({
|
|
|
702
781
|
}, [isLibraryEnabled, isComposerEnabled, setSettingsOpen, setSchedulesOpen, bumpEpoch]);
|
|
703
782
|
const runtimeKey = useMemo2(() => {
|
|
704
783
|
if (effectiveMode.status === "idle") return "idle";
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
}
|
|
708
|
-
const id = effectiveMode.agentId ?? effectiveMode.agentName ?? "";
|
|
709
|
-
return `immut:${id}:${pendingSessionId ?? ""}:${clearEpoch}`;
|
|
710
|
-
}, [effectiveMode, mutableEpoch, clearEpoch, pendingSessionId]);
|
|
784
|
+
return `chat:${mutableEpoch}:${clearEpoch}`;
|
|
785
|
+
}, [effectiveMode.status, mutableEpoch, clearEpoch]);
|
|
711
786
|
const value = useMemo2(
|
|
712
787
|
() => ({
|
|
713
788
|
mode: effectiveMode,
|
|
@@ -744,6 +819,7 @@ function ShellModeProvider({
|
|
|
744
819
|
setHistoryAgentFilter,
|
|
745
820
|
listSessionsAgentId,
|
|
746
821
|
pendingSessionId,
|
|
822
|
+
pendingSessionEpoch,
|
|
747
823
|
agentsListEpoch,
|
|
748
824
|
invalidateAgentsList
|
|
749
825
|
}),
|
|
@@ -780,6 +856,7 @@ function ShellModeProvider({
|
|
|
780
856
|
historyAgentFilter,
|
|
781
857
|
listSessionsAgentId,
|
|
782
858
|
pendingSessionId,
|
|
859
|
+
pendingSessionEpoch,
|
|
783
860
|
agentsListEpoch,
|
|
784
861
|
invalidateAgentsList
|
|
785
862
|
]
|
|
@@ -803,11 +880,149 @@ function shellIsCreateAgent(mode) {
|
|
|
803
880
|
return mode.status === "active" && mode.isMutable && mode.isCreateAgent;
|
|
804
881
|
}
|
|
805
882
|
|
|
883
|
+
// src/utils/getErrorMessage.ts
|
|
884
|
+
function isRecord(value) {
|
|
885
|
+
return value != null && typeof value === "object";
|
|
886
|
+
}
|
|
887
|
+
function readNonEmptyString(value) {
|
|
888
|
+
return typeof value === "string" && value.trim() !== "" ? value : void 0;
|
|
889
|
+
}
|
|
890
|
+
var LITERAL_ESCAPE_PATTERN = /\\(?:[nrtbfv0'"\\]|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2})/;
|
|
891
|
+
var REAL_CONTROL_PATTERN = /[\n\t\b\f\v]/;
|
|
892
|
+
function decodeLiteralEscapes(text) {
|
|
893
|
+
let out = "";
|
|
894
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
895
|
+
const char = text[i];
|
|
896
|
+
if (char !== "\\" || i + 1 >= text.length) {
|
|
897
|
+
out += char;
|
|
898
|
+
continue;
|
|
899
|
+
}
|
|
900
|
+
const next = text[i + 1];
|
|
901
|
+
switch (next) {
|
|
902
|
+
case "n":
|
|
903
|
+
out += "\n";
|
|
904
|
+
i += 1;
|
|
905
|
+
break;
|
|
906
|
+
case "t":
|
|
907
|
+
out += " ";
|
|
908
|
+
i += 1;
|
|
909
|
+
break;
|
|
910
|
+
case "r":
|
|
911
|
+
out += "\r";
|
|
912
|
+
i += 1;
|
|
913
|
+
break;
|
|
914
|
+
case "b":
|
|
915
|
+
out += "\b";
|
|
916
|
+
i += 1;
|
|
917
|
+
break;
|
|
918
|
+
case "f":
|
|
919
|
+
out += "\f";
|
|
920
|
+
i += 1;
|
|
921
|
+
break;
|
|
922
|
+
case "v":
|
|
923
|
+
out += "\v";
|
|
924
|
+
i += 1;
|
|
925
|
+
break;
|
|
926
|
+
case "0":
|
|
927
|
+
out += "\0";
|
|
928
|
+
i += 1;
|
|
929
|
+
break;
|
|
930
|
+
case "\\":
|
|
931
|
+
out += "\\";
|
|
932
|
+
i += 1;
|
|
933
|
+
break;
|
|
934
|
+
case '"':
|
|
935
|
+
out += '"';
|
|
936
|
+
i += 1;
|
|
937
|
+
break;
|
|
938
|
+
case "'":
|
|
939
|
+
out += "'";
|
|
940
|
+
i += 1;
|
|
941
|
+
break;
|
|
942
|
+
case "u": {
|
|
943
|
+
const hex = text.slice(i + 2, i + 6);
|
|
944
|
+
if (/^[0-9a-fA-F]{4}$/.test(hex)) {
|
|
945
|
+
out += String.fromCharCode(Number.parseInt(hex, 16));
|
|
946
|
+
i += 5;
|
|
947
|
+
} else {
|
|
948
|
+
out += char;
|
|
949
|
+
}
|
|
950
|
+
break;
|
|
951
|
+
}
|
|
952
|
+
case "x": {
|
|
953
|
+
const hex = text.slice(i + 2, i + 4);
|
|
954
|
+
if (/^[0-9a-fA-F]{2}$/.test(hex)) {
|
|
955
|
+
out += String.fromCharCode(Number.parseInt(hex, 16));
|
|
956
|
+
i += 3;
|
|
957
|
+
} else {
|
|
958
|
+
out += char;
|
|
959
|
+
}
|
|
960
|
+
break;
|
|
961
|
+
}
|
|
962
|
+
default:
|
|
963
|
+
out += char;
|
|
964
|
+
break;
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
return out;
|
|
968
|
+
}
|
|
969
|
+
function decodeErrorMessageEscapes(text) {
|
|
970
|
+
const normalized = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
971
|
+
if (REAL_CONTROL_PATTERN.test(normalized) || !LITERAL_ESCAPE_PATTERN.test(normalized)) {
|
|
972
|
+
return normalized;
|
|
973
|
+
}
|
|
974
|
+
return decodeLiteralEscapes(normalized).replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
975
|
+
}
|
|
976
|
+
function messageFromErrorShaped(value) {
|
|
977
|
+
if (!isRecord(value)) return void 0;
|
|
978
|
+
const direct = readNonEmptyString(value.message);
|
|
979
|
+
if (direct != null) return direct;
|
|
980
|
+
if (isRecord(value.error)) {
|
|
981
|
+
return readNonEmptyString(value.error.message);
|
|
982
|
+
}
|
|
983
|
+
return void 0;
|
|
984
|
+
}
|
|
985
|
+
function stringifyError(error) {
|
|
986
|
+
if (typeof error === "string") return error;
|
|
987
|
+
if (isRecord(error)) {
|
|
988
|
+
try {
|
|
989
|
+
return JSON.stringify(error);
|
|
990
|
+
} catch {
|
|
991
|
+
return Object.prototype.toString.call(error);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
return String(error);
|
|
995
|
+
}
|
|
996
|
+
function getErrorMessage(error, fallback) {
|
|
997
|
+
if (typeof error === "string") {
|
|
998
|
+
const trimmed = error.trim();
|
|
999
|
+
if (trimmed !== "") return decodeErrorMessageEscapes(error);
|
|
1000
|
+
return fallback != null ? decodeErrorMessageEscapes(fallback) : decodeErrorMessageEscapes(error);
|
|
1001
|
+
}
|
|
1002
|
+
if (isRecord(error) && "body" in error) {
|
|
1003
|
+
const fromBody = messageFromErrorShaped(error.body);
|
|
1004
|
+
if (fromBody != null) return decodeErrorMessageEscapes(fromBody);
|
|
1005
|
+
if (error.body != null) {
|
|
1006
|
+
if (typeof error.body === "string") {
|
|
1007
|
+
const trimmed = error.body.trim();
|
|
1008
|
+
if (trimmed !== "") return decodeErrorMessageEscapes(error.body);
|
|
1009
|
+
} else {
|
|
1010
|
+
return stringifyError(error.body);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
const fromShape = messageFromErrorShaped(error);
|
|
1015
|
+
if (fromShape != null) return decodeErrorMessageEscapes(fromShape);
|
|
1016
|
+
if (fallback != null) return decodeErrorMessageEscapes(fallback);
|
|
1017
|
+
return stringifyError(error);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
806
1020
|
export {
|
|
807
1021
|
ServerProvider,
|
|
808
1022
|
useServer,
|
|
809
1023
|
useOptionalServer,
|
|
810
1024
|
useServerCapabilities,
|
|
1025
|
+
useServerCapabilitiesSettled,
|
|
811
1026
|
useOptionalRefreshServerCapabilities,
|
|
812
1027
|
useCatalogServer,
|
|
813
1028
|
useOptionalCatalogServer,
|
|
@@ -817,8 +1032,10 @@ export {
|
|
|
817
1032
|
useOptionalAgentMetricsServer,
|
|
818
1033
|
useScheduleServer,
|
|
819
1034
|
useOptionalScheduleServer,
|
|
1035
|
+
useOptionalPermissionsServer,
|
|
820
1036
|
SESSION_CUSTOM_RANGE_MAX_DAYS,
|
|
821
1037
|
defaultSessionTimeRange,
|
|
1038
|
+
defaultMetricsTimeRange,
|
|
822
1039
|
sessionTimeRangeFromCreatedAt,
|
|
823
1040
|
resolveSessionTimeRange,
|
|
824
1041
|
readSessionShareSearch,
|
|
@@ -829,12 +1046,17 @@ export {
|
|
|
829
1046
|
replaceSessionShareSearch,
|
|
830
1047
|
withCapabilitiesSandbox,
|
|
831
1048
|
isSettingsChromeEnabled,
|
|
1049
|
+
isSessionsChromeEnabled,
|
|
1050
|
+
isSchedulesChromeEnabled,
|
|
1051
|
+
isMetricsChromeEnabled,
|
|
1052
|
+
toEffectiveRoutes,
|
|
832
1053
|
DEFAULT_AGENT_CONFIG,
|
|
833
1054
|
libraryAgentId,
|
|
834
1055
|
ShellModeProvider,
|
|
835
1056
|
useShellMode,
|
|
836
1057
|
useOptionalShellMode,
|
|
837
1058
|
shellIsMutable,
|
|
838
|
-
shellIsCreateAgent
|
|
1059
|
+
shellIsCreateAgent,
|
|
1060
|
+
getErrorMessage
|
|
839
1061
|
};
|
|
840
|
-
//# sourceMappingURL=chunk-
|
|
1062
|
+
//# sourceMappingURL=chunk-2GIZY3JJ.js.map
|