@truefoundry/trueforge-ui 0.3.0 → 0.4.0-rc.0

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/NOTICE +1 -1
  3. package/README.md +26 -89
  4. package/dist/{AgentCodeSnippets-EK7KMIY2.js → AgentCodeSnippets-BPC6TD7K.js} +7 -7
  5. package/dist/AgentMetricChart-T6DZZ37Y.js +15 -0
  6. package/dist/{AgentOverview-5UPMYHT2.js → AgentOverview-BFU7EO4Y.js} +7 -7
  7. package/dist/{AgentSessionEventTimeline-V6NPCYMW.js → AgentSessionEventTimeline-ATVBTYDF.js} +7 -7
  8. package/dist/{AgentSessionEventTimelineChart-YQWZBQCG.js → AgentSessionEventTimelineChart-H577STKW.js} +7 -7
  9. package/dist/{AgentSessions-WNYVVB6Q.js → AgentSessions-GDLBXFIK.js} +8 -8
  10. package/dist/{ConnectorSettings-O4I24244.js → ConnectorSettings-FYNF6J3F.js} +7 -7
  11. package/dist/{DockLayout-JMBZVMGB.js → DockLayout-SGUOMZ5E.js} +10 -10
  12. package/dist/{DrawerLayout-E6G3IF6R.js → DrawerLayout-MJJYQDCW.js} +11 -11
  13. package/dist/{ModelSettings-ZVXMXIU4.js → ModelSettings-6EW7U2MP.js} +9 -9
  14. package/dist/ModelSettings-6EW7U2MP.js.map +1 -0
  15. package/dist/OpenUiFenceBlock-BZPFNXWZ.js +9 -0
  16. package/dist/{SandboxSettings-H6BA2DJQ.js → SandboxSettings-HQVBGHXZ.js} +7 -7
  17. package/dist/SchedulesPage-ZO3PJY4J.js +15 -0
  18. package/dist/{SettingsBuilder-VA3VGWZC.js → SettingsBuilder-FODMI7HG.js} +20 -11
  19. package/dist/SettingsBuilder-FODMI7HG.js.map +1 -0
  20. package/dist/{ShellRouteSync-ZT4PBE6T.js → ShellRouteSync-4I5BP2VY.js} +4 -4
  21. package/dist/{SidebarLayout-ICXEN7ZL.js → SidebarLayout-ZLWG2YGO.js} +12 -12
  22. package/dist/{SkillSettings-F5JGGFXR.js → SkillSettings-AFSAOU6O.js} +7 -7
  23. package/dist/{TrueForgeUIWithRouter-MKJ7IEWG.js → TrueForgeUIWithRouter-RQX5XWGI.js} +9 -9
  24. package/dist/WebSearchSettings-BW4CWGRR.js +322 -0
  25. package/dist/WebSearchSettings-BW4CWGRR.js.map +1 -0
  26. package/dist/{WidgetLayout-J7ZRW3V3.js → WidgetLayout-WIPKUIL4.js} +10 -10
  27. package/dist/chunk-6UACSIIY.js +587 -0
  28. package/dist/chunk-6UACSIIY.js.map +1 -0
  29. package/dist/{chunk-U7WONUMR.js → chunk-7S7A3PNP.js} +6 -4
  30. package/dist/chunk-7S7A3PNP.js.map +1 -0
  31. package/dist/{chunk-VTOW2UIX.js → chunk-GHXA46A2.js} +78 -43
  32. package/dist/chunk-GHXA46A2.js.map +1 -0
  33. package/dist/{chunk-7AAO4UDQ.js → chunk-HCGDDQ4G.js} +5 -5
  34. package/dist/chunk-HCGDDQ4G.js.map +1 -0
  35. package/dist/{chunk-SCIEO6CF.js → chunk-HDMBSLDC.js} +2 -2
  36. package/dist/{chunk-KZK2PQ4A.js → chunk-MLMR26WQ.js} +244 -152
  37. package/dist/chunk-MLMR26WQ.js.map +1 -0
  38. package/dist/{chunk-BREN6OSX.js → chunk-Q22RHDYS.js} +42 -61
  39. package/dist/chunk-Q22RHDYS.js.map +1 -0
  40. package/dist/{chunk-WFIA627Q.js → chunk-QKFMAQ7O.js} +2 -2
  41. package/dist/{chunk-7VWUB5OV.js → chunk-TFQWCBFQ.js} +12 -12
  42. package/dist/chunk-TFQWCBFQ.js.map +1 -0
  43. package/dist/{chunk-JEAULQNF.js → chunk-TJGGIEF6.js} +3 -3
  44. package/dist/{chunk-KDCVFHPZ.js → chunk-TX6PB3DY.js} +3 -3
  45. package/dist/{chunk-MEW7WZ7Q.js → chunk-VBZXCX7Y.js} +253 -99
  46. package/dist/chunk-VBZXCX7Y.js.map +1 -0
  47. package/dist/{chunk-QI4HGU5E.js → chunk-Y47LJKXD.js} +13 -19
  48. package/dist/{chunk-QI4HGU5E.js.map → chunk-Y47LJKXD.js.map} +1 -1
  49. package/dist/{chunk-MB7Z5FPI.js → chunk-YN5ZBBQM.js} +9 -9
  50. package/dist/{chunk-UN7WPTTK.js → chunk-ZYJ2SBF7.js} +2 -2
  51. package/dist/createTrueForgeServer-DiSooQdh.d.ts +42 -0
  52. package/dist/index.d.ts +45 -39
  53. package/dist/index.js +43 -43
  54. package/dist/index.js.map +1 -1
  55. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +57 -894
  56. package/dist/plugins/trueforge-agent-server-adapter/index.js +110 -7
  57. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  58. package/dist/styles.css +1 -1
  59. package/package.json +8 -7
  60. package/dist/AgentMetricChart-UZCYOC4M.js +0 -15
  61. package/dist/ModelSettings-ZVXMXIU4.js.map +0 -1
  62. package/dist/OpenUiFenceBlock-F3YVDKAG.js +0 -9
  63. package/dist/SchedulesPage-FS2QZ5KB.js +0 -15
  64. package/dist/SettingsBuilder-VA3VGWZC.js.map +0 -1
  65. package/dist/chunk-7AAO4UDQ.js.map +0 -1
  66. package/dist/chunk-7VWUB5OV.js.map +0 -1
  67. package/dist/chunk-BREN6OSX.js.map +0 -1
  68. package/dist/chunk-KZK2PQ4A.js.map +0 -1
  69. package/dist/chunk-MEW7WZ7Q.js.map +0 -1
  70. package/dist/chunk-NXK4XW4U.js +0 -587
  71. package/dist/chunk-NXK4XW4U.js.map +0 -1
  72. package/dist/chunk-U7WONUMR.js.map +0 -1
  73. package/dist/chunk-VTOW2UIX.js.map +0 -1
  74. package/dist/createTrueFoundryServer-B_FYhSdn.d.ts +0 -42
  75. /package/dist/{AgentCodeSnippets-EK7KMIY2.js.map → AgentCodeSnippets-BPC6TD7K.js.map} +0 -0
  76. /package/dist/{AgentMetricChart-UZCYOC4M.js.map → AgentMetricChart-T6DZZ37Y.js.map} +0 -0
  77. /package/dist/{AgentOverview-5UPMYHT2.js.map → AgentOverview-BFU7EO4Y.js.map} +0 -0
  78. /package/dist/{AgentSessionEventTimeline-V6NPCYMW.js.map → AgentSessionEventTimeline-ATVBTYDF.js.map} +0 -0
  79. /package/dist/{AgentSessionEventTimelineChart-YQWZBQCG.js.map → AgentSessionEventTimelineChart-H577STKW.js.map} +0 -0
  80. /package/dist/{AgentSessions-WNYVVB6Q.js.map → AgentSessions-GDLBXFIK.js.map} +0 -0
  81. /package/dist/{ConnectorSettings-O4I24244.js.map → ConnectorSettings-FYNF6J3F.js.map} +0 -0
  82. /package/dist/{DockLayout-JMBZVMGB.js.map → DockLayout-SGUOMZ5E.js.map} +0 -0
  83. /package/dist/{DrawerLayout-E6G3IF6R.js.map → DrawerLayout-MJJYQDCW.js.map} +0 -0
  84. /package/dist/{OpenUiFenceBlock-F3YVDKAG.js.map → OpenUiFenceBlock-BZPFNXWZ.js.map} +0 -0
  85. /package/dist/{SandboxSettings-H6BA2DJQ.js.map → SandboxSettings-HQVBGHXZ.js.map} +0 -0
  86. /package/dist/{SchedulesPage-FS2QZ5KB.js.map → SchedulesPage-ZO3PJY4J.js.map} +0 -0
  87. /package/dist/{ShellRouteSync-ZT4PBE6T.js.map → ShellRouteSync-4I5BP2VY.js.map} +0 -0
  88. /package/dist/{SidebarLayout-ICXEN7ZL.js.map → SidebarLayout-ZLWG2YGO.js.map} +0 -0
  89. /package/dist/{SkillSettings-F5JGGFXR.js.map → SkillSettings-AFSAOU6O.js.map} +0 -0
  90. /package/dist/{TrueForgeUIWithRouter-MKJ7IEWG.js.map → TrueForgeUIWithRouter-RQX5XWGI.js.map} +0 -0
  91. /package/dist/{WidgetLayout-J7ZRW3V3.js.map → WidgetLayout-WIPKUIL4.js.map} +0 -0
  92. /package/dist/{chunk-SCIEO6CF.js.map → chunk-HDMBSLDC.js.map} +0 -0
  93. /package/dist/{chunk-WFIA627Q.js.map → chunk-QKFMAQ7O.js.map} +0 -0
  94. /package/dist/{chunk-JEAULQNF.js.map → chunk-TJGGIEF6.js.map} +0 -0
  95. /package/dist/{chunk-KDCVFHPZ.js.map → chunk-TX6PB3DY.js.map} +0 -0
  96. /package/dist/{chunk-MB7Z5FPI.js.map → chunk-YN5ZBBQM.js.map} +0 -0
  97. /package/dist/{chunk-UN7WPTTK.js.map → chunk-ZYJ2SBF7.js.map} +0 -0
@@ -24,11 +24,11 @@ import {
24
24
  preloadMonaco,
25
25
  useThemeMode,
26
26
  useToaster
27
- } from "./chunk-KZK2PQ4A.js";
27
+ } from "./chunk-MLMR26WQ.js";
28
28
  import {
29
29
  DraftCatalogProvider,
30
30
  useDraftCatalog
31
- } from "./chunk-KDCVFHPZ.js";
31
+ } from "./chunk-TX6PB3DY.js";
32
32
  import {
33
33
  DEFAULT_AGENT_CONFIG,
34
34
  ServerProvider,
@@ -42,21 +42,21 @@ import {
42
42
  useShellMode,
43
43
  withCapabilitiesSandbox,
44
44
  withCapabilitiesWebSearch
45
- } from "./chunk-U7WONUMR.js";
45
+ } from "./chunk-7S7A3PNP.js";
46
46
  import {
47
47
  useAui,
48
48
  useAuiState
49
49
  } from "./chunk-M6MHLVSO.js";
50
50
  import {
51
51
  cn
52
- } from "./chunk-NXK4XW4U.js";
52
+ } from "./chunk-6UACSIIY.js";
53
53
 
54
- // src/containers/TrueFoundryChatProvider.tsx
54
+ // src/containers/TrueForgeChatProvider.tsx
55
55
  import { AssistantRuntimeProvider, useAuiState as useAuiState2 } from "@assistant-ui/react";
56
56
  import {
57
- trueFoundryAttachmentAdapter,
58
- useTrueFoundryAgentRuntime
59
- } from "@truefoundry/assistant-ui-runtime";
57
+ trueForgeAttachmentAdapter,
58
+ useTrueForgeAgentRuntime
59
+ } from "@truefoundry/trueforge-assistant-ui-runtime";
60
60
  import { useCallback, useMemo } from "react";
61
61
  import { jsx } from "react/jsx-runtime";
62
62
  function ActiveSessionPermissionScope({
@@ -118,7 +118,7 @@ function ChatRuntimeScope({
118
118
  },
119
119
  [reportError]
120
120
  );
121
- const runtime = useTrueFoundryAgentRuntime({
121
+ const runtime = useTrueForgeAgentRuntime({
122
122
  server: historyServer,
123
123
  agent,
124
124
  agentName,
@@ -128,12 +128,12 @@ function ChatRuntimeScope({
128
128
  onError: resolvedOnError,
129
129
  adapters: {
130
130
  ...adapters,
131
- attachments: adapters?.attachments ?? trueFoundryAttachmentAdapter
131
+ attachments: adapters?.attachments ?? trueForgeAttachmentAdapter
132
132
  }
133
133
  });
134
134
  return /* @__PURE__ */ jsx(AssistantRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(ActiveSessionPermissionScope, { locallyCreatedSessionIds, children }) });
135
135
  }
136
- function TrueFoundryChatProvider(props) {
136
+ function TrueForgeChatProvider(props) {
137
137
  const { server, initialSessionId, adapters, onError, children, agent, agentName, listSessionsAgentId } = props;
138
138
  const stableServer = useMemo(() => server, [server]);
139
139
  return /* @__PURE__ */ jsx(ToasterProvider, { children: /* @__PURE__ */ jsx(
@@ -156,7 +156,7 @@ import { lazy, Suspense, useCallback as useCallback2, useEffect as useEffect6, u
156
156
  import { ThinkingOrb } from "thinking-orbs";
157
157
 
158
158
  // src/atoms/draft/DraftSpecPreferenceBridge.tsx
159
- import { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from "@truefoundry/assistant-ui-runtime";
159
+ import { useTrueForgeAgentSpec, useTrueForgeUpdateAgentSpec } from "@truefoundry/trueforge-assistant-ui-runtime";
160
160
  import { useEffect } from "react";
161
161
  function readDraftSandboxEnabled(spec) {
162
162
  if (spec.config === void 0) return void 0;
@@ -247,8 +247,8 @@ function reconcileDraftWebSearch({
247
247
  }
248
248
  function DraftSpecPreferenceBridge() {
249
249
  const { mode, pendingSessionId, rememberDraftSpec } = useShellMode();
250
- const { agentSpec } = useTrueFoundryAgentSpec();
251
- const updateAgentSpec = useTrueFoundryUpdateAgentSpec();
250
+ const { agentSpec } = useTrueForgeAgentSpec();
251
+ const updateAgentSpec = useTrueForgeUpdateAgentSpec();
252
252
  const capabilities = useServerCapabilities();
253
253
  const sandboxEnabled = capabilities?.sandbox.enabled;
254
254
  const webSearchEnabled = capabilities?.webSearch?.enabled;
@@ -362,7 +362,7 @@ function withSessionListCache({
362
362
  server,
363
363
  cache
364
364
  }) {
365
- const { deleteSession } = server;
365
+ const { deleteSession, renameSession } = server;
366
366
  return {
367
367
  ...server,
368
368
  listSessions(request) {
@@ -392,12 +392,17 @@ function withSessionListCache({
392
392
  await deleteSession.call(server, request);
393
393
  cache.clear();
394
394
  }
395
+ } : {},
396
+ ...renameSession != null ? {
397
+ renameSession: async (request) => {
398
+ await renameSession.call(server, request);
399
+ cache.clear();
400
+ }
395
401
  } : {}
396
402
  };
397
403
  }
398
404
 
399
405
  // src/containers/useResolvedServer.ts
400
- import { createTrueFoundryAgentUIServer } from "@truefoundry/assistant-ui-runtime/plugins/truefoundry-agent-server-adapter";
401
406
  import { useEffect as useEffect5, useState } from "react";
402
407
  var DEFAULT_CAPABILITIES = {
403
408
  data: {
@@ -408,7 +413,7 @@ var DEFAULT_CAPABILITIES = {
408
413
  }
409
414
  };
410
415
  function isBuiltInConfig(config) {
411
- return typeof config === "object" && config !== null && "type" in config && (config.type === "truefoundry" || config.type === "trueforge");
416
+ return typeof config === "object" && config !== null && "type" in config && config.type === "trueforge";
412
417
  }
413
418
  function hasGetCapabilities(server) {
414
419
  return typeof Reflect.get(server, "getCapabilities") === "function";
@@ -432,13 +437,9 @@ function isAgentUIServer(value) {
432
437
  function useResolvedServer(config, onError) {
433
438
  const builtIn = isBuiltInConfig(config) ? config : null;
434
439
  const directServer = isBuiltInConfig(config) ? null : config;
435
- const type = builtIn?.type;
436
- const apiKey = builtIn?.type === "truefoundry" ? builtIn.apiKey : "";
437
- const controlPlaneURL = builtIn?.type === "truefoundry" ? builtIn.controlPlaneURL : "";
438
- const gatewayPlaneURL = builtIn?.type === "truefoundry" ? builtIn.gatewayPlaneURL ?? "" : "";
439
- const trueforgeBaseUrl = builtIn?.type === "trueforge" ? builtIn.baseUrl ?? "" : "";
440
- const trueforgeToken = builtIn?.type === "trueforge" ? builtIn.token ?? "" : "";
441
- const trueforgeFetch = builtIn?.type === "trueforge" ? builtIn.fetch : void 0;
440
+ const trueforgeBaseUrl = builtIn?.baseUrl ?? "";
441
+ const trueforgeToken = builtIn?.token ?? "";
442
+ const trueforgeFetch = builtIn?.fetch;
442
443
  const catalog = builtIn?.catalog;
443
444
  const permissions = builtIn?.permissions;
444
445
  const [state, setState] = useState(() => {
@@ -455,29 +456,21 @@ function useResolvedServer(config, onError) {
455
456
  let cancelled = false;
456
457
  setState({ status: "loading", server: null, error: null });
457
458
  const resolve = async () => {
458
- if (type === "trueforge") {
459
- const { createTrueForgeAgentUIServer } = await import("./plugins/trueforge-agent-server-adapter/index.js");
460
- return createTrueForgeAgentUIServer({
461
- ...trueforgeBaseUrl ? { baseUrl: trueforgeBaseUrl } : {},
462
- ...trueforgeToken ? { token: trueforgeToken } : {},
463
- ...trueforgeFetch !== void 0 ? { fetch: trueforgeFetch } : {},
464
- ...catalog != null ? { catalog } : {},
465
- ...permissions != null ? { permissions } : {}
466
- });
467
- }
468
- const runtimeServer2 = await createTrueFoundryAgentUIServer({
469
- apiKey,
470
- cpURL: controlPlaneURL,
471
- ...gatewayPlaneURL ? { gatewayURL: gatewayPlaneURL } : {}
459
+ const { createTrueForgeAgentUIServer } = await import("./plugins/trueforge-agent-server-adapter/index.js");
460
+ return createTrueForgeAgentUIServer({
461
+ ...trueforgeBaseUrl ? { baseUrl: trueforgeBaseUrl } : {},
462
+ ...trueforgeToken ? { token: trueforgeToken } : {},
463
+ ...trueforgeFetch !== void 0 ? { fetch: trueforgeFetch } : {},
464
+ ...catalog != null ? { catalog } : {},
465
+ ...permissions != null ? { permissions } : {}
472
466
  });
473
- return toAgentUIServer(runtimeServer2, catalog, permissions);
474
467
  };
475
468
  void resolve().then((server) => {
476
469
  if (cancelled) return;
477
470
  try {
478
471
  setState({
479
472
  status: "ready",
480
- server: type === "trueforge" ? toAgentUIServer(server, void 0, void 0) : server,
473
+ server: toAgentUIServer(server, void 0, void 0),
481
474
  error: null
482
475
  });
483
476
  } catch (error) {
@@ -492,29 +485,17 @@ function useResolvedServer(config, onError) {
492
485
  return () => {
493
486
  cancelled = true;
494
487
  };
495
- }, [
496
- type,
497
- directServer,
498
- apiKey,
499
- controlPlaneURL,
500
- gatewayPlaneURL,
501
- trueforgeBaseUrl,
502
- trueforgeToken,
503
- trueforgeFetch,
504
- catalog,
505
- permissions,
506
- onError
507
- ]);
488
+ }, [directServer, trueforgeBaseUrl, trueforgeToken, trueforgeFetch, catalog, permissions, onError]);
508
489
  return state;
509
490
  }
510
491
 
511
492
  // src/containers/TrueForgeUIShell.tsx
512
493
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
513
- var SidebarLayout = lazy(() => import("./SidebarLayout-ICXEN7ZL.js").then((m) => ({ default: m.SidebarLayout })));
514
- var DrawerLayout = lazy(() => import("./DrawerLayout-E6G3IF6R.js").then((m) => ({ default: m.DrawerLayout })));
515
- var DockLayout = lazy(() => import("./DockLayout-JMBZVMGB.js").then((m) => ({ default: m.DockLayout })));
516
- var WidgetLayout = lazy(() => import("./WidgetLayout-J7ZRW3V3.js").then((m) => ({ default: m.WidgetLayout })));
517
- var ShellRouteSync = lazy(() => import("./ShellRouteSync-ZT4PBE6T.js").then((m) => ({ default: m.ShellRouteSync })));
494
+ var SidebarLayout = lazy(() => import("./SidebarLayout-ZLWG2YGO.js").then((m) => ({ default: m.SidebarLayout })));
495
+ var DrawerLayout = lazy(() => import("./DrawerLayout-MJJYQDCW.js").then((m) => ({ default: m.DrawerLayout })));
496
+ var DockLayout = lazy(() => import("./DockLayout-SGUOMZ5E.js").then((m) => ({ default: m.DockLayout })));
497
+ var WidgetLayout = lazy(() => import("./WidgetLayout-WIPKUIL4.js").then((m) => ({ default: m.WidgetLayout })));
498
+ var ShellRouteSync = lazy(() => import("./ShellRouteSync-4I5BP2VY.js").then((m) => ({ default: m.ShellRouteSync })));
518
499
  function LayoutFallback({ className }) {
519
500
  return /* @__PURE__ */ jsx2(
520
501
  "div",
@@ -659,7 +640,7 @@ function ChatProviderFromShell({
659
640
  };
660
641
  }, [mode, draftDefaultAgentSpec, pendingSessionId]);
661
642
  return /* @__PURE__ */ jsx2(DraftCatalogProvider, { children: /* @__PURE__ */ jsx2(
662
- TrueFoundryChatProvider,
643
+ TrueForgeChatProvider,
663
644
  {
664
645
  ...providerRest,
665
646
  server: runtimeServer2,
@@ -732,8 +713,8 @@ function TrueForgeUIShell(props) {
732
713
  }
733
714
 
734
715
  export {
735
- TrueFoundryChatProvider,
716
+ TrueForgeChatProvider,
736
717
  ServerInitLoader,
737
718
  TrueForgeUIShell
738
719
  };
739
- //# sourceMappingURL=chunk-BREN6OSX.js.map
720
+ //# sourceMappingURL=chunk-Q22RHDYS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/containers/TrueForgeChatProvider.tsx","../src/containers/TrueForgeUIShell.tsx","../src/atoms/draft/DraftSpecPreferenceBridge.tsx","../src/routing/HistorySessionSwitchBridge.tsx","../src/routing/LibrarySessionShareBoot.tsx","../src/routing/RemoteIdRouteBridge.tsx","../src/server/sessionListCache.ts","../src/containers/useResolvedServer.ts"],"sourcesContent":["'use client';\n\nimport { AssistantRuntimeProvider, useAuiState } from '@assistant-ui/react';\nimport {\n trueForgeAttachmentAdapter,\n useTrueForgeAgentRuntime,\n type TrueForgeAgentConfig,\n type UseTrueForgeAgentRuntimeOptions,\n} from '@truefoundry/trueforge-assistant-ui-runtime';\nimport { useCallback, useMemo, type ReactNode } from 'react';\n\nimport { sessionIsCreateAgent } from '../atoms/lib/sessionCreateAgent.js';\nimport { notifyComposerBusyFailure } from '../hooks/useComposerBusyState.js';\nimport { ActiveSessionPermissionsProvider } from '../hooks/useResourcePermissions.js';\nimport type { AgentUIServer } from '../server/types.js';\nimport { ToasterProvider, useToaster } from './ToasterContainer.js';\n\ntype RuntimeAdapters = NonNullable<UseTrueForgeAgentRuntimeOptions['adapters']>;\n\nfunction ActiveSessionPermissionScope({\n locallyCreatedSessionIds,\n children,\n}: {\n locallyCreatedSessionIds: ReadonlySet<string>;\n children: ReactNode;\n}) {\n const remoteId = useAuiState(state => state.threadListItem.remoteId);\n return (\n <ActiveSessionPermissionsProvider\n sessionId={remoteId}\n assumeManage={remoteId != null && locallyCreatedSessionIds.has(remoteId)}\n >\n {children}\n </ActiveSessionPermissionsProvider>\n );\n}\n\nfunction runtimeServer({\n server,\n locallyCreatedSessionIds,\n}: {\n server: AgentUIServer;\n locallyCreatedSessionIds: Set<string>;\n}): AgentUIServer {\n return {\n ...server,\n async createSession(request) {\n const session = await server.createSession(request);\n locallyCreatedSessionIds.add(session.id);\n return session;\n },\n async listSessions(request) {\n const result = await server.listSessions(request);\n return {\n ...result,\n data: result.data.filter(session => !sessionIsCreateAgent(session)),\n };\n },\n };\n}\n\nexport type TrueForgeChatProviderProps = {\n server: AgentUIServer;\n initialSessionId?: string;\n adapters?: RuntimeAdapters;\n onError?: (error: unknown) => void;\n children: ReactNode;\n /** Discriminated agent source. Prefer over legacy `agentName`. */\n agent?: TrueForgeAgentConfig;\n /** Legacy named-agent shorthand. Prefer `agent: { mode: \"named\", agentName }`. */\n agentName?: string;\n /** Forwarded to `listSessions({ agentId })` for history filtering. */\n listSessionsAgentId?: string;\n};\n\nfunction ChatRuntimeScope({\n server,\n agent,\n agentName,\n listSessionsAgentId,\n initialSessionId,\n adapters,\n onError,\n children,\n}: {\n server: AgentUIServer;\n agent?: TrueForgeAgentConfig;\n agentName?: string;\n listSessionsAgentId?: string;\n initialSessionId?: string;\n adapters?: RuntimeAdapters;\n onError?: (error: unknown) => void;\n children: ReactNode;\n}) {\n const { showError } = useToaster();\n const reportError = onError ?? showError;\n const localSessionState = useMemo(() => ({ server, ids: new Set<string>() }), [server]);\n const locallyCreatedSessionIds = localSessionState.ids;\n const historyServer = useMemo(\n () => runtimeServer({ server, locallyCreatedSessionIds }),\n [locallyCreatedSessionIds, server],\n );\n // composer().send() is void and swallows onNew rejections; clear optimistic\n // busy when the runtime reports a pre-stream failure (e.g. createSession).\n const resolvedOnError = useCallback(\n (error: unknown) => {\n notifyComposerBusyFailure();\n reportError(error);\n },\n [reportError],\n );\n\n const runtime = useTrueForgeAgentRuntime({\n server: historyServer as never,\n agent,\n agentName,\n listSessionsAgentId,\n listSessionsCreatedByMe: true,\n initialSessionId,\n onError: resolvedOnError,\n adapters: {\n ...adapters,\n attachments: adapters?.attachments ?? trueForgeAttachmentAdapter,\n },\n });\n\n return (\n <AssistantRuntimeProvider runtime={runtime as never}>\n <ActiveSessionPermissionScope locallyCreatedSessionIds={locallyCreatedSessionIds}>\n {children}\n </ActiveSessionPermissionScope>\n </AssistantRuntimeProvider>\n );\n}\n\n/**\n * Chat shell: wires `useTrueForgeAgentRuntime` from `server` and provides\n * assistant-ui + error toasts.\n */\nexport function TrueForgeChatProvider(props: TrueForgeChatProviderProps) {\n const { server, initialSessionId, adapters, onError, children, agent, agentName, listSessionsAgentId } = props;\n\n const stableServer = useMemo(() => server, [server]);\n\n return (\n <ToasterProvider>\n <ChatRuntimeScope\n server={stableServer}\n agent={agent}\n agentName={agentName}\n listSessionsAgentId={listSessionsAgentId}\n initialSessionId={initialSessionId}\n adapters={adapters}\n onError={onError}\n >\n {children}\n </ChatRuntimeScope>\n </ToasterProvider>\n );\n}\n","'use client';\n\nimport type {\n TrueForgeAgentConfig,\n UseTrueForgeAgentRuntimeOptions,\n} from '@truefoundry/trueforge-assistant-ui-runtime';\nimport { lazy, Suspense, useCallback, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport { ThinkingOrb } from 'thinking-orbs';\n\nimport { AgentConfigInstructionsProvider } from '../atoms/draft/AgentConfigInstructionsContext.js';\nimport { DraftCatalogProvider } from '../atoms/draft/DraftCatalogProvider.js';\nimport { DraftSpecPreferenceBridge } from '../atoms/draft/DraftSpecPreferenceBridge.js';\nimport { cn } from '../atoms/lib/cn.js';\nimport { IS_CREATE_AGENT_METADATA_KEY, isCreateAgentMetadataValue } from '../atoms/lib/sessionCreateAgent.js';\nimport { preloadMonaco } from '../atoms/monacoPreload.js';\nimport { CurrentUserProvider, type CurrentUser } from '../contexts/CurrentUserContext.js';\nimport { WidgetVisibilityProvider } from '../layouts/WidgetVisibilityContext.js';\nimport { HistorySessionSwitchBridge } from '../routing/HistorySessionSwitchBridge.js';\nimport { LibrarySessionShareBoot } from '../routing/LibrarySessionShareBoot.js';\nimport { RemoteIdRouteBridge } from '../routing/RemoteIdRouteBridge.js';\nimport { ResolvedRoutesProvider } from '../routing/ResolvedRoutesContext.js';\nimport type { ResolvedRoutes, RoutesConfig } from '../routing/types.js';\nimport { CustomActionRenderersProvider, type CustomActionRenderers } from '../server/CustomActionRenderersContext.js';\nimport { ServerProvider } from '../server/ServerContext.js';\nimport { createSessionListCache, withSessionListCache } from '../server/sessionListCache.js';\nimport { DEFAULT_AGENT_CONFIG, ShellModeProvider, useShellMode, type AgentConfig } from '../server/ShellModeContext.js';\nimport type { TrueForgeServerConfig } from '../server/TrueForgeServerConfig.js';\nimport type { AgentUIServer, CreateSessionRequest } from '../server/types.js';\nimport { SlotsProvider, useThemeMode, type SlotOverrides } from '../theme/SlotsProvider.js';\nimport type { LayoutProp, ThemeConfig } from '../theme/types.js';\nimport { getErrorMessage } from '../utils/getErrorMessage.js';\nimport { TrueForgeChatProvider, type TrueForgeChatProviderProps } from './TrueForgeChatProvider.js';\nimport { useResolvedServer } from './useResolvedServer.js';\n\nconst SidebarLayout = lazy(() => import('../layouts/SidebarLayout.js').then(m => ({ default: m.SidebarLayout })));\nconst DrawerLayout = lazy(() => import('../layouts/DrawerLayout.js').then(m => ({ default: m.DrawerLayout })));\nconst DockLayout = lazy(() => import('../layouts/DockLayout.js').then(m => ({ default: m.DockLayout })));\nconst WidgetLayout = lazy(() => import('../layouts/WidgetLayout.js').then(m => ({ default: m.WidgetLayout })));\nconst ShellRouteSync = lazy(() => import('../routing/ShellRouteSync.js').then(m => ({ default: m.ShellRouteSync })));\n\nexport type ChatLayout = 'sidebar' | 'drawer' | 'dock' | 'widget';\n\ntype RuntimeAdapters = NonNullable<UseTrueForgeAgentRuntimeOptions['adapters']>;\n\nexport type TrueForgeUIProps = {\n server: TrueForgeServerConfig;\n /** Built-in layout string or a custom layout component. Defaults to `\"sidebar\"`. */\n layout?: LayoutProp;\n overrides?: SlotOverrides;\n theme?: ThemeConfig;\n className?: string;\n initialSessionId?: string;\n adapters?: RuntimeAdapters;\n onError?: (error: unknown) => void;\n /**\n * Agent / library / composer shell mode.\n * Defaults to `{ mode: \"AgentLibraryWithComposer\" }`.\n */\n agentConfig?: AgentConfig;\n /** Open settings on first paint only (host boot with no models configured). */\n initialSettingsOpen?: boolean;\n /**\n * Host UI for pending client-side tools, keyed by tool name.\n * When a pending tool matches, the composer mounts that component instead of Ask User.\n */\n customActionRenderers?: CustomActionRenderers;\n /**\n * Sync shell navigation to the browser URL via react-router (opt-in).\n * Requires `react-router-dom` in the host. Leave off for dock/widget embeds\n * and hosts that own their own router. Defaults to `false`.\n */\n withRouter?: boolean;\n /** URL path customization; only honored when `withRouter`. */\n routes?: RoutesConfig;\n /** Optional identity rendered by the default `UserAvatar` slot. */\n currentUser?: CurrentUser;\n};\n\nexport type TrueForgeUIShellProps = Omit<TrueForgeUIProps, 'withRouter'> & { resolvedRoutes?: ResolvedRoutes };\n\nfunction LayoutFallback({ className }: { className?: string }) {\n return (\n <div\n className={className}\n style={{\n height: '100%',\n minHeight: '12rem',\n background:\n 'linear-gradient(90deg, color-mix(in oklab, var(--secondary-bg) 55%, transparent) 25%, color-mix(in oklab, var(--secondary-bg) 25%, transparent) 50%, color-mix(in oklab, var(--secondary-bg) 55%, transparent) 75%)',\n backgroundSize: '200% 100%',\n animation: 'tfy-aui-pulse 1.2s ease-in-out infinite',\n }}\n aria-hidden\n />\n );\n}\n\n/** Shown while a built-in agent UI server resolves. */\nexport function ServerInitLoader({ className }: { className?: string }) {\n // Outside ThemeProvider (Suspense), useThemeMode falls back to light.\n const themeMode = useThemeMode();\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n className={cn(\n 'flex h-full min-h-48 w-full flex-1 items-center justify-center bg-primary-bg text-text-secondary',\n className,\n )}\n >\n <ThinkingOrb\n state=\"connecting\"\n speed={1}\n theme={themeMode}\n paused={false}\n aria-hidden\n size={64}\n style={{ width: '4.5rem', height: '4.5rem' }}\n />\n </div>\n );\n}\n\nfunction ServerInitError({ error, className }: { error: unknown; className?: string }) {\n const message = getErrorMessage(error, 'Failed to initialize server');\n return (\n <div\n role=\"alert\"\n className={cn(\n 'flex h-full min-h-48 items-center justify-center bg-primary-bg px-6 text-center text-sm text-failure-bg',\n className,\n )}\n >\n {message}\n </div>\n );\n}\n\nfunction isBuiltInLayout(layout: LayoutProp): layout is ChatLayout {\n return layout === 'sidebar' || layout === 'drawer' || layout === 'dock' || layout === 'widget';\n}\n\nfunction BuiltInLayoutView({ layout, className }: { layout: ChatLayout; className?: string }) {\n switch (layout) {\n case 'sidebar':\n return <SidebarLayout className={className} />;\n case 'drawer':\n return <DrawerLayout className={className} />;\n case 'dock':\n return <DockLayout className={className} />;\n case 'widget':\n return <WidgetLayout className={className} />;\n }\n}\n\nfunction LayoutChildren({ layout, className }: { layout: LayoutProp; className?: string }) {\n if (isBuiltInLayout(layout)) {\n return (\n <Suspense fallback={<LayoutFallback className={className} />}>\n <BuiltInLayoutView layout={layout} className={className} />\n </Suspense>\n );\n }\n const HostLayout = layout;\n return <HostLayout className={className} />;\n}\n\nfunction ChatProviderFromShell({\n children,\n initialSessionId: hostInitialSessionId,\n onRemoteIdChange,\n server,\n ...providerRest\n}: {\n children: ReactNode;\n /** When routing, reports the active thread's remote id up to `ShellRouteSync`. */\n onRemoteIdChange?: (id: string | undefined) => void;\n} & Omit<TrueForgeChatProviderProps, 'agent' | 'agentName' | 'listSessionsAgentId' | 'children'>) {\n const { mode, runtimeKey, historyAgentFilter, listSessionsAgentId, pendingSessionId } = useShellMode();\n\n const isCreateAgent = mode.status === 'active' && mode.isMutable && mode.isCreateAgent;\n\n // Keep one isolated cache per shell, preserved across chat runtime remounts.\n const [sessionListCache] = useState(createSessionListCache);\n\n const serverWithCreateIntent = useMemo((): AgentUIServer => {\n return {\n ...server,\n createSession: request => {\n if (request.agentSpec === undefined) {\n return server.createSession(request);\n }\n const withMetadata: CreateSessionRequest & { metadata: Record<string, string> } = {\n ...request,\n metadata: {\n [IS_CREATE_AGENT_METADATA_KEY]: isCreateAgentMetadataValue(isCreateAgent),\n },\n };\n return server.createSession(withMetadata);\n },\n };\n }, [server, isCreateAgent]);\n\n const cachedRuntimeServer = useMemo(\n () => withSessionListCache({ server: serverWithCreateIntent, cache: sessionListCache }),\n [serverWithCreateIntent, sessionListCache],\n );\n const runtimeServer = useMemo<AgentUIServer>(() => {\n if (historyAgentFilter == null || historyAgentFilter.agentId != null) return cachedRuntimeServer;\n // Do not expose an unfiltered page under a filter label while its backend id resolves.\n return { ...cachedRuntimeServer, listSessions: async () => ({ data: [] }) };\n }, [cachedRuntimeServer, historyAgentFilter]);\n\n // Freeze draft seed for the life of this runtimeKey so bindMutableAgent (identity /\n // instructions on shell) does not push a new defaultAgentSpec into the runtime.\n const draftDefaultAgentSpec = useMemo(() => {\n if (mode.status === 'active' && mode.isMutable) {\n return mode.agentSpec ?? { model: { name: 'openai-main/gpt-4.1' } };\n }\n return { model: { name: 'openai-main/gpt-4.1' } };\n // runtimeKey is the remount boundary for mutable chats.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- intentionally keyed on runtimeKey only\n }, [runtimeKey]);\n\n const agent: TrueForgeAgentConfig = useMemo(() => {\n // idle uses a placeholder draft so layout chrome (useAui) still mounts;\n // layouts render an empty CTA instead of the thread.\n if (mode.status === 'idle') {\n return {\n mode: 'draft',\n defaultAgentSpec: { model: { name: 'openai-main/gpt-4.1' } },\n };\n }\n // Runtime still uses named|draft; shell mutability maps onto that adapter.\n if (!mode.isMutable) {\n const agentName = mode.agentName ?? mode.agentId ?? pendingSessionId;\n if (agentName == null) {\n // Active immutable without identity should not happen; keep chrome mounted.\n return {\n mode: 'draft',\n defaultAgentSpec: { model: { name: 'openai-main/gpt-4.1' } },\n };\n }\n return { mode: 'named', agentName };\n }\n return {\n mode: 'draft',\n defaultAgentSpec: draftDefaultAgentSpec,\n };\n }, [mode, draftDefaultAgentSpec, pendingSessionId]);\n\n return (\n <DraftCatalogProvider>\n <TrueForgeChatProvider\n key={runtimeKey}\n {...providerRest}\n server={runtimeServer}\n agent={agent}\n listSessionsAgentId={listSessionsAgentId}\n initialSessionId={pendingSessionId ?? hostInitialSessionId}\n >\n <AgentConfigInstructionsProvider>\n <DraftSpecPreferenceBridge />\n <HistorySessionSwitchBridge />\n {onRemoteIdChange != null ? <RemoteIdRouteBridge onRemoteIdChange={onRemoteIdChange} /> : null}\n {children}\n </AgentConfigInstructionsProvider>\n </TrueForgeChatProvider>\n </DraftCatalogProvider>\n );\n}\n\n/** Internal shell. `resolvedRoutes` present iff mounted under `TrueForgeUIWithRouter`. */\nexport function TrueForgeUIShell(props: TrueForgeUIShellProps) {\n const {\n layout = 'sidebar',\n overrides,\n theme,\n className,\n agentConfig = DEFAULT_AGENT_CONFIG,\n initialSettingsOpen = false,\n server: serverConfig,\n onError,\n customActionRenderers,\n currentUser,\n resolvedRoutes,\n routes: _routes,\n ...providerRest\n } = props;\n\n const resolved = useResolvedServer(serverConfig, onError);\n const [activeRemoteId, setActiveRemoteId] = useState<string | undefined>(undefined);\n const handleRemoteIdChange = useCallback((id: string | undefined) => setActiveRemoteId(id), []);\n\n // Warm Monaco while the shell boots so tool request/response cards paint faster.\n useEffect(() => {\n void preloadMonaco();\n }, []);\n\n if (resolved.status === 'loading') {\n return (\n <SlotsProvider overrides={overrides} theme={theme}>\n <ServerInitLoader className={className} />\n </SlotsProvider>\n );\n }\n\n if (resolved.status === 'error') {\n return (\n <SlotsProvider overrides={overrides} theme={theme}>\n <ServerInitError error={resolved.error} className={className} />\n </SlotsProvider>\n );\n }\n\n const server = resolved.server;\n const layoutTree = <LayoutChildren layout={layout} className={className} />;\n\n const shellTree = (\n <ShellModeProvider agentConfig={agentConfig} initialSettingsOpen={initialSettingsOpen}>\n <LibrarySessionShareBoot />\n {resolvedRoutes != null ? (\n <Suspense fallback={null}>\n <ShellRouteSync\n routes={resolvedRoutes}\n activeRemoteId={activeRemoteId}\n initialSettingsOpen={initialSettingsOpen}\n />\n </Suspense>\n ) : null}\n <ChatProviderFromShell\n server={server}\n onError={onError}\n onRemoteIdChange={resolvedRoutes != null ? handleRemoteIdChange : undefined}\n {...providerRest}\n >\n {layoutTree}\n </ChatProviderFromShell>\n </ShellModeProvider>\n );\n // Widget visibility provider is used to control the visibility of the widget with isolated state\n const visibilityTree =\n layout === 'widget' ? <WidgetVisibilityProvider>{shellTree}</WidgetVisibilityProvider> : shellTree;\n\n return (\n <SlotsProvider overrides={overrides} theme={theme}>\n <CurrentUserProvider currentUser={currentUser}>\n <CustomActionRenderersProvider renderers={customActionRenderers}>\n <ServerProvider server={server}>\n {resolvedRoutes != null ? (\n <ResolvedRoutesProvider routes={resolvedRoutes}>{visibilityTree}</ResolvedRoutesProvider>\n ) : (\n visibilityTree\n )}\n </ServerProvider>\n </CustomActionRenderersProvider>\n </CurrentUserProvider>\n </SlotsProvider>\n );\n}\n","'use client';\n\nimport { useTrueForgeAgentSpec, useTrueForgeUpdateAgentSpec } from '@truefoundry/trueforge-assistant-ui-runtime';\nimport { useEffect } from 'react';\n\nimport {\n type DraftPreferenceKind,\n withCapabilitiesSandbox,\n withCapabilitiesWebSearch,\n} from '../../server/draftSpecPreferences.js';\nimport { useServerCapabilities } from '../../server/ServerContext.js';\nimport { useShellMode } from '../../server/ShellModeContext.js';\nimport type { AgentSkill, AgentSpec, ConnectorState, ModelSelection } from '../../server/types.js';\nimport { mountName } from '../lib/mountName.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { modelPatchWithReasoningEffort } from './reasoningEffort.js';\n\nfunction readDraftSandboxEnabled(spec: AgentSpec): boolean | undefined {\n if (spec.config === undefined) return undefined;\n // `sandbox` is draft runtime config and may be absent from AgentRuntimeConfig typings.\n const sandbox = Reflect.get(spec.config, 'sandbox');\n if (typeof sandbox !== 'object' || sandbox === null) return undefined;\n const enabled = Reflect.get(sandbox, 'enabled');\n return typeof enabled === 'boolean' ? enabled : undefined;\n}\n\nfunction filterMounts<T extends object>(mounts: T[] | undefined, availableNames: Set<string>): T[] | undefined {\n if (mounts === undefined) return undefined;\n const filtered = mounts.filter(mount => {\n const name = mountName(mount);\n return name !== null && availableNames.has(name);\n });\n return filtered.length === mounts.length ? mounts : filtered;\n}\n\nexport function reconcileDraftSpecPreferences({\n agentSpec,\n models,\n skills,\n connectors,\n skillsEnabled,\n}: {\n agentSpec: AgentSpec;\n models: ModelSelection[];\n skills: AgentSkill[];\n connectors: ConnectorState[];\n skillsEnabled: boolean | undefined;\n}): Partial<AgentSpec> {\n const update: Partial<AgentSpec> = {};\n const selectedModel = agentSpec.model.name.trim();\n if (!models.some(model => model.name === selectedModel)) {\n const fallback = models[0];\n if (fallback !== undefined) {\n update.model = modelPatchWithReasoningEffort(\n fallback.name,\n agentSpec.model.params,\n fallback.properties.reasoningEfforts,\n );\n }\n }\n\n const nextMcpServers = filterMounts(agentSpec.mcpServers, new Set(connectors.map(connector => connector.name)));\n if (nextMcpServers !== agentSpec.mcpServers) {\n update.mcpServers = nextMcpServers;\n }\n\n if (skillsEnabled === false) {\n // Only clear when there is something to clear — a fresh `[]` each call would\n // fail reference equality and loop `updateAgentSpec` forever.\n if (agentSpec.skills !== undefined && agentSpec.skills.length > 0) {\n update.skills = [];\n }\n } else {\n const nextSkills = filterMounts(agentSpec.skills, new Set(skills.map(skill => skill.name)));\n if (nextSkills !== agentSpec.skills) {\n update.skills = nextSkills;\n }\n }\n\n return update;\n}\n\nexport function reconcileDraftSandbox({\n agentSpec,\n sandboxEnabled,\n kind = 'agent',\n}: {\n agentSpec: AgentSpec;\n sandboxEnabled: boolean | null | undefined;\n kind?: DraftPreferenceKind;\n}): Partial<AgentSpec> {\n if (kind === 'chat') {\n if (sandboxEnabled == null) return {};\n const current = readDraftSandboxEnabled(agentSpec);\n if (sandboxEnabled === true && current !== true) {\n return {\n config: {\n ...agentSpec.config,\n sandbox: { ...agentSpec.config?.sandbox, enabled: true },\n },\n };\n }\n if (sandboxEnabled === false && current === true) {\n return {\n config: {\n ...agentSpec.config,\n sandbox: { ...agentSpec.config?.sandbox, enabled: false },\n },\n };\n }\n return {};\n }\n\n const nextSpec = withCapabilitiesSandbox(agentSpec, sandboxEnabled);\n return nextSpec === agentSpec ? {} : { config: nextSpec.config };\n}\n\nexport function reconcileDraftWebSearch({\n agentSpec,\n webSearchEnabled,\n kind = 'agent',\n}: {\n agentSpec: AgentSpec;\n webSearchEnabled: boolean | null | undefined;\n kind?: DraftPreferenceKind;\n}): Partial<AgentSpec> {\n const nextSpec = withCapabilitiesWebSearch({ spec: agentSpec, webSearchEnabled, kind });\n return nextSpec === agentSpec ? {} : { config: nextSpec.config };\n}\n\n/**\n * Mirrors plain-draft composer choices into the shell seed and removes catalog\n * entries that disappeared since those choices were stored.\n * New Chat and New Agent keep separate seeds; chat never persists runtime config.\n */\nexport function DraftSpecPreferenceBridge() {\n const { mode, pendingSessionId, rememberDraftSpec } = useShellMode();\n const { agentSpec } = useTrueForgeAgentSpec();\n const updateAgentSpec = useTrueForgeUpdateAgentSpec();\n const capabilities = useServerCapabilities();\n const sandboxEnabled = capabilities?.sandbox.enabled;\n const webSearchEnabled = capabilities?.webSearch?.enabled;\n const { models, skills, connectors, loaded, error, ensureLoaded } = useDraftCatalog();\n const isMutableDraft = mode.status === 'active' && mode.isMutable && pendingSessionId == null;\n const isPlainDraft = isMutableDraft && mode.agentId == null;\n const preferenceKind = mode.status === 'active' && mode.isMutable && mode.isCreateAgent ? 'agent' : 'chat';\n // New Chat forces on; New Agent + edit existing only fill when absent.\n const webSearchKind: DraftPreferenceKind =\n mode.status === 'active' && mode.isMutable && (mode.isCreateAgent || mode.agentId != null) ? 'agent' : 'chat';\n\n useEffect(() => {\n if (isPlainDraft) ensureLoaded();\n }, [ensureLoaded, isPlainDraft]);\n\n useEffect(() => {\n if (isPlainDraft && agentSpec != null) {\n rememberDraftSpec(agentSpec, preferenceKind);\n }\n }, [agentSpec, isPlainDraft, preferenceKind, rememberDraftSpec]);\n\n useEffect(() => {\n // New Chat mirrors capabilities onto the live draft; New Agent only disables when unavailable.\n if (!isPlainDraft || agentSpec == null || updateAgentSpec == null) return;\n const update = reconcileDraftSandbox({ agentSpec, sandboxEnabled, kind: preferenceKind });\n if (Object.keys(update).length > 0) {\n updateAgentSpec(update);\n }\n }, [agentSpec, isPlainDraft, preferenceKind, sandboxEnabled, updateAgentSpec]);\n\n useEffect(() => {\n // Apply to New Chat / New Agent / edit-existing mutable drafts.\n if (!isMutableDraft || agentSpec == null || updateAgentSpec == null) return;\n const update = reconcileDraftWebSearch({ agentSpec, webSearchEnabled, kind: webSearchKind });\n if (Object.keys(update).length > 0) {\n updateAgentSpec(update);\n }\n }, [agentSpec, isMutableDraft, webSearchEnabled, webSearchKind, updateAgentSpec]);\n\n useEffect(() => {\n if (!isPlainDraft || agentSpec == null || updateAgentSpec == null || !loaded || error != null) return;\n\n const update = reconcileDraftSpecPreferences({\n agentSpec,\n models,\n skills,\n connectors,\n skillsEnabled: capabilities?.skill.enabled,\n });\n if (Object.keys(update).length > 0) {\n updateAgentSpec(update);\n }\n }, [\n agentSpec,\n capabilities?.skill.enabled,\n connectors,\n error,\n isPlainDraft,\n loaded,\n models,\n skills,\n updateAgentSpec,\n ]);\n\n return null;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { useAui } from '../assistant-ui.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\n\n/** Switches history sessions in place to preserve mounted chat state to prevent flickering */\nexport function HistorySessionSwitchBridge() {\n const shell = useOptionalShellMode();\n const aui = useAui();\n const pendingSessionId = shell?.pendingSessionId;\n const pendingSessionEpoch = shell?.pendingSessionEpoch ?? 0;\n\n useEffect(() => {\n if (pendingSessionId == null) return;\n void Promise.resolve(aui.threads().switchToThread(pendingSessionId)).catch(() => undefined);\n }, [aui, pendingSessionId, pendingSessionEpoch]);\n\n return null;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { useOptionalAgentSessionsServer } from '../server/ServerContext.js';\nimport { useShellMode } from '../server/ShellModeContext.js';\nimport { isSessionsChromeEnabled } from '../server/serverChrome.js';\nimport { readSessionShareSearch } from '../utils/sessionShareUrl.js';\n\n/** Open the sessions browser or a library agent from the share query — with or without `withRouter`. */\nexport function LibrarySessionShareBoot() {\n const { openLibraryAgent, setSessionsOpen } = useShellMode();\n const sessions = useOptionalAgentSessionsServer();\n const sessionsEnabled = isSessionsChromeEnabled({ sessions });\n\n useEffect(() => {\n if (!sessionsEnabled) return;\n const share = readSessionShareSearch(window.location.search);\n if (share.view === 'sessions') {\n setSessionsOpen(true);\n return;\n }\n if (share.agentId == null) return;\n openLibraryAgent(share.agentId);\n }, [openLibraryAgent, sessionsEnabled, setSessionsOpen]);\n\n return null;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { useAuiState } from '../assistant-ui.js';\n\n/**\n * Observes the active thread's remote id (assigned once a fresh chat persists)\n * and lifts it to the parent so `ShellRouteSync` can mirror it to `/sessions/:id`.\n * Lives inside the chat runtime, so it remounts with `runtimeKey`; reporting is\n * idempotent, so that is harmless. Carries no react-router dependency.\n */\nexport function RemoteIdRouteBridge({ onRemoteIdChange }: { onRemoteIdChange: (id: string | undefined) => void }) {\n const remoteId = useAuiState(s => s.threadListItem.remoteId);\n useEffect(() => {\n onRemoteIdChange(remoteId ?? undefined);\n }, [remoteId, onRemoteIdChange]);\n return null;\n}\n","import type { AgentUIServer, ListSessionsParams } from './types.js';\n\n/** Cached pages go stale after this window so external session changes surface. */\nconst SESSION_LIST_TTL_MS = 30_000;\n\ntype SessionListPage = ReturnType<AgentUIServer['listSessions']>;\n\ntype CacheEntry = { at: number; page: SessionListPage };\n\nexport type SessionListCache = Map<string, CacheEntry>;\n\nexport function createSessionListCache(): SessionListCache {\n return new Map();\n}\n\n// `startTimestamp` is a rolling \"now − 1 year\" that differs on every call;\n// keying on it would make each request unique and defeat the cache.\nfunction cacheKey(request: ListSessionsParams | undefined): string {\n const rest: ListSessionsParams = { ...request };\n delete rest.startTimestamp;\n return JSON.stringify(rest, Object.keys(rest).sort());\n}\n\n/** Deduplicates session pages and invalidates them after mutations or TTL expiry. */\nexport function withSessionListCache({\n server,\n cache,\n}: {\n server: AgentUIServer;\n cache: SessionListCache;\n}): AgentUIServer {\n const { deleteSession, renameSession } = server;\n return {\n ...server,\n listSessions(request) {\n const key = cacheKey(request);\n const now = Date.now();\n const entry = cache.get(key);\n if (entry !== undefined && now - entry.at < SESSION_LIST_TTL_MS) return entry.page;\n const page = server.listSessions(request);\n cache.set(key, { at: now, page });\n // Allow failed pages to be retried.\n void page.catch(() => {\n if (cache.get(key)?.page === page) cache.delete(key);\n });\n return page;\n },\n async createSession(request) {\n const result = await server.createSession(request);\n cache.clear();\n return result;\n },\n async updateSession(request) {\n const result = await server.updateSession(request);\n cache.clear();\n return result;\n },\n ...(deleteSession != null\n ? {\n deleteSession: async (request: { sessionId: string }) => {\n await deleteSession.call(server, request);\n cache.clear();\n },\n }\n : {}),\n ...(renameSession != null\n ? {\n renameSession: async (request: { sessionId: string; title: string }) => {\n await renameSession.call(server, request);\n cache.clear();\n },\n }\n : {}),\n };\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport type { TrueForgeBuiltInServerConfig, TrueForgeServerConfig } from '../server/TrueForgeServerConfig.js';\nimport type {\n AgentBuilderCapabilitiesResponse,\n AgentUIServer,\n CatalogServer,\n PermissionsServer,\n} from '../server/types.js';\n\nexport type ResolvedServerState =\n | { status: 'loading'; server: null; error: null }\n | { status: 'ready'; server: AgentUIServer; error: null }\n | { status: 'error'; server: null; error: unknown };\n\n/** Fallback when an older runtime adapter omits `getCapabilities`. */\nconst DEFAULT_CAPABILITIES = {\n data: {\n sandbox: { enabled: true },\n skill: { enabled: true },\n settings: { enabled: true },\n webSearch: { enabled: false },\n },\n} satisfies AgentBuilderCapabilitiesResponse;\n\nfunction isBuiltInConfig(config: TrueForgeServerConfig): config is TrueForgeBuiltInServerConfig {\n return typeof config === 'object' && config !== null && 'type' in config && config.type === 'trueforge';\n}\n\nfunction hasGetCapabilities(\n server: object,\n): server is { getCapabilities: () => Promise<AgentBuilderCapabilitiesResponse> } {\n return typeof Reflect.get(server, 'getCapabilities') === 'function';\n}\n\n/**\n * Attach optional host ports and ensure `getCapabilities` exists on the composed port.\n */\nfunction toAgentUIServer(\n server: object,\n catalog: CatalogServer | undefined,\n permissions: PermissionsServer | undefined,\n): AgentUIServer {\n const getCapabilities = hasGetCapabilities(server)\n ? () => server.getCapabilities()\n : async () => DEFAULT_CAPABILITIES;\n const withCapabilities = { ...server, getCapabilities };\n const withOptionalPorts = {\n ...withCapabilities,\n ...(catalog == null ? {} : { catalog }),\n ...(permissions == null ? {} : { permissions }),\n };\n if (!isAgentUIServer(withOptionalPorts)) {\n throw new Error('TrueForgeUI: runtime adapter returned an incomplete AgentUIServer');\n }\n return withOptionalPorts;\n}\n\nfunction isAgentUIServer(value: object): value is AgentUIServer {\n return (\n typeof Reflect.get(value, 'createSession') === 'function' &&\n typeof Reflect.get(value, 'listSessions') === 'function' &&\n typeof Reflect.get(value, 'getSession') === 'function' &&\n typeof Reflect.get(value, 'updateSession') === 'function' &&\n typeof Reflect.get(value, 'createTurn') === 'function' &&\n typeof Reflect.get(value, 'cancelSession') === 'function' &&\n typeof Reflect.get(value, 'listTurns') === 'function' &&\n typeof Reflect.get(value, 'getTurn') === 'function' &&\n typeof Reflect.get(value, 'listEvents') === 'function' &&\n typeof Reflect.get(value, 'getCapabilities') === 'function' &&\n typeof Reflect.get(value, 'getModels') === 'function' &&\n typeof Reflect.get(value, 'getSkills') === 'function' &&\n typeof Reflect.get(value, 'getMcp') === 'function' &&\n typeof Reflect.get(value, 'searchAgents') === 'function' &&\n typeof Reflect.get(value, 'saveAgent') === 'function'\n );\n}\n\n/**\n * Resolves a {@link TrueForgeServerConfig} to an {@link AgentUIServer}.\n * - `AgentUIServer` — sync passthrough\n * - `trueforge` — via dynamic import of the Harness plugin adapter\n */\nexport function useResolvedServer(\n config: TrueForgeServerConfig,\n onError?: (error: unknown) => void,\n): ResolvedServerState {\n const builtIn = isBuiltInConfig(config) ? config : null;\n const directServer: AgentUIServer | null = isBuiltInConfig(config) ? null : config;\n const trueforgeBaseUrl = builtIn?.baseUrl ?? '';\n const trueforgeToken = builtIn?.token ?? '';\n const trueforgeFetch = builtIn?.fetch;\n const catalog = builtIn?.catalog;\n const permissions = builtIn?.permissions;\n\n const [state, setState] = useState<ResolvedServerState>(() => {\n if (directServer) {\n return { status: 'ready', server: directServer, error: null };\n }\n return { status: 'loading', server: null, error: null };\n });\n\n useEffect(() => {\n if (directServer) {\n setState({ status: 'ready', server: directServer, error: null });\n return;\n }\n\n let cancelled = false;\n setState({ status: 'loading', server: null, error: null });\n\n const resolve = async (): Promise<AgentUIServer> => {\n const { createTrueForgeAgentUIServer } = await import('../plugins/trueforge-agent-server-adapter/index.js');\n return createTrueForgeAgentUIServer({\n ...(trueforgeBaseUrl ? { baseUrl: trueforgeBaseUrl } : {}),\n ...(trueforgeToken ? { token: trueforgeToken } : {}),\n ...(trueforgeFetch !== undefined ? { fetch: trueforgeFetch } : {}),\n ...(catalog != null ? { catalog } : {}),\n ...(permissions != null ? { permissions } : {}),\n });\n };\n\n void resolve()\n .then(server => {\n if (cancelled) return;\n try {\n setState({\n status: 'ready',\n server: toAgentUIServer(server, undefined, undefined),\n error: null,\n });\n } catch (error: unknown) {\n onError?.(error);\n setState({ status: 'error', server: null, error });\n }\n })\n .catch((error: unknown) => {\n if (cancelled) return;\n onError?.(error);\n setState({ status: 'error', server: null, error });\n });\n\n return () => {\n cancelled = true;\n };\n }, [directServer, trueforgeBaseUrl, trueforgeToken, trueforgeFetch, catalog, permissions, onError]);\n\n return state;\n}\n"],"mappings":"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","names":["useAuiState","useAuiState","useCallback","useEffect","useMemo","useState","useEffect","useEffect","useEffect","useEffect","useEffect","useEffect","useEffect","jsx","useState","useMemo","runtimeServer","useCallback","useEffect"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  cn,
3
3
  useOptionalContentClassNames
4
- } from "./chunk-NXK4XW4U.js";
4
+ } from "./chunk-6UACSIIY.js";
5
5
 
6
6
  // src/atoms/OpenUiFenceBlock.tsx
7
7
  import { Renderer } from "@openuidev/react-lang";
@@ -21,4 +21,4 @@ function OpenUiFenceBlock({ content, isStreaming, darkTheme }) {
21
21
  export {
22
22
  OpenUiFenceBlock
23
23
  };
24
- //# sourceMappingURL=chunk-WFIA627Q.js.map
24
+ //# sourceMappingURL=chunk-QKFMAQ7O.js.map
@@ -5,14 +5,14 @@ import {
5
5
  useResourcePermissions,
6
6
  useSlot,
7
7
  withInitialUserMessages
8
- } from "./chunk-KZK2PQ4A.js";
8
+ } from "./chunk-MLMR26WQ.js";
9
9
  import {
10
10
  Icon,
11
11
  auiButtonClass,
12
12
  pageHeaderTitleClassName,
13
13
  sidebarRailButtonClassName,
14
14
  useDraftCatalog
15
- } from "./chunk-KDCVFHPZ.js";
15
+ } from "./chunk-TX6PB3DY.js";
16
16
  import {
17
17
  isSettingsChromeEnabled,
18
18
  shellIsCreateAgent,
@@ -21,14 +21,14 @@ import {
21
21
  useOptionalShellMode,
22
22
  useServerCapabilities,
23
23
  useShellMode
24
- } from "./chunk-U7WONUMR.js";
24
+ } from "./chunk-7S7A3PNP.js";
25
25
  import {
26
26
  useAuiState
27
27
  } from "./chunk-M6MHLVSO.js";
28
28
  import {
29
29
  cn,
30
30
  useTheme
31
- } from "./chunk-NXK4XW4U.js";
31
+ } from "./chunk-6UACSIIY.js";
32
32
 
33
33
  // src/atoms/NamedAgentHeaderLabel.tsx
34
34
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -137,16 +137,16 @@ function ShellActions({ className, labeled = false }) {
137
137
 
138
138
  // src/containers/AgentConfigDrawerContainer.tsx
139
139
  import {
140
- useTrueFoundryAgentSpec,
141
- useTrueFoundryFlushAgentSpec,
142
- useTrueFoundryUpdateAgentSpec
143
- } from "@truefoundry/assistant-ui-runtime";
140
+ useTrueForgeAgentSpec,
141
+ useTrueForgeFlushAgentSpec,
142
+ useTrueForgeUpdateAgentSpec
143
+ } from "@truefoundry/trueforge-assistant-ui-runtime";
144
144
  import { useCallback, useEffect, useState } from "react";
145
145
  import { Fragment, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
146
146
  function AgentConfigDrawerContainer({ showClose = false }) {
147
- const { agentSpec } = useTrueFoundryAgentSpec();
148
- const updateAgentSpec = useTrueFoundryUpdateAgentSpec();
149
- const flushAgentSpec = useTrueFoundryFlushAgentSpec();
147
+ const { agentSpec } = useTrueForgeAgentSpec();
148
+ const updateAgentSpec = useTrueForgeUpdateAgentSpec();
149
+ const flushAgentSpec = useTrueForgeFlushAgentSpec();
150
150
  const shell = useShellMode();
151
151
  const agentId = shell.mode.status === "active" ? shell.mode.agentId : void 0;
152
152
  const { allows } = useResourcePermissions({
@@ -295,4 +295,4 @@ export {
295
295
  ShellActions,
296
296
  AgentConfigDrawerContainer
297
297
  };
298
- //# sourceMappingURL=chunk-7VWUB5OV.js.map
298
+ //# sourceMappingURL=chunk-TFQWCBFQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/atoms/NamedAgentHeaderLabel.tsx","../src/atoms/ShellActions.tsx","../src/containers/AgentConfigDrawerContainer.tsx"],"sourcesContent":["'use client';\n\nimport { useAuiState } from '../assistant-ui.js';\nimport { useNamedAgentHeaderState } from '../hooks/useChatChromeActionsVisible.js';\nimport { Icon } from '../icons/Icon.js';\nimport { cn } from './lib/cn.js';\nimport { pageHeaderTitleClassName } from './PageHeader.js';\nimport { Tooltip } from './primitives/Tooltip.js';\n\n/** Dynamic chat title for named agents and New Chat / New Agent drafts. */\nexport function NamedAgentHeaderLabel({ className }: { className?: string }) {\n const state = useNamedAgentHeaderState();\n const threadTitle = useAuiState(s => s.threadListItem.title);\n if (state === null) return null;\n\n const syncedTitle = threadTitle?.trim() ?? '';\n const displayName = state.allowThreadTitle && syncedTitle.length > 0 ? syncedTitle : state.name;\n\n return (\n <h1 className={cn('flex min-w-0 items-center gap-1.5', pageHeaderTitleClassName, className)}>\n <span className=\"truncate\" title={displayName}>\n {displayName}\n </span>\n {state.isEditing ? (\n <Tooltip content=\"Try changes here, then choose Update agent to save.\" side=\"bottom\">\n <span className=\"border-warning-bg/40 bg-warning-bg/10 text-warning-bg inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium\">\n <Icon name=\"pencil\" className=\"size-3\" />\n Editing\n </span>\n </Tooltip>\n ) : null}\n </h1>\n );\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalCatalogServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { isSettingsChromeEnabled } from '../server/serverChrome.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { useTheme } from '../theme/ThemeProvider.js';\nimport { auiButtonClass, sidebarRailButtonClassName } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport function ShellActions({ className, labeled = false }: { className?: string; labeled?: boolean }) {\n const shell = useOptionalShellMode();\n const catalog = useOptionalCatalogServer();\n const capabilities = useServerCapabilities();\n const { mode, setTheme } = useTheme();\n const ActionSlot = useSlot('ShellActionsActionSlot');\n const isDark = mode === 'dark';\n const themeLabel = isDark ? 'Light' : 'Dark';\n const settingsChromeEnabled = isSettingsChromeEnabled({ catalog, capabilities });\n\n const hoverClass = 'hover:bg-secondary-button-hover hover:text-ghost-button-text';\n\n return (\n <div\n className={cn(\n 'flex shrink-0 items-center gap-1',\n labeled ? 'w-full flex-col items-center gap-1 text-sidebar-text' : 'text-text-primary',\n className,\n )}\n >\n <a\n href=\"https://trueforge.dev\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Documentation\"\n title=\"Documentation\"\n className={auiButtonClass({\n variant: 'ghost',\n size: labeled ? undefined : 'icon',\n className: cn(hoverClass, labeled && sidebarRailButtonClassName),\n })}\n >\n <Icon name=\"book-open\" size={labeled ? 14 : undefined} />\n {labeled ? <span className=\"text-center\">Docs</span> : null}\n </a>\n <button\n type=\"button\"\n aria-label={isDark ? 'Switch to light theme' : 'Switch to dark theme'}\n title={isDark ? 'Light theme' : 'Dark theme'}\n className={auiButtonClass({\n variant: 'ghost',\n size: labeled ? undefined : 'icon',\n className: cn(hoverClass, labeled && sidebarRailButtonClassName),\n })}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n >\n <Icon name={isDark ? 'sun' : 'moon'} size={labeled ? 14 : undefined} />\n {labeled ? <span className=\"text-center\">{themeLabel}</span> : null}\n </button>\n {shell != null && settingsChromeEnabled ? (\n <button\n type=\"button\"\n aria-label=\"Settings\"\n title=\"Settings\"\n aria-expanded={shell.settingsOpen}\n aria-current={shell.settingsOpen ? 'page' : undefined}\n className={auiButtonClass({\n variant: 'ghost',\n size: labeled ? undefined : 'icon',\n className: cn(\n hoverClass,\n labeled && sidebarRailButtonClassName,\n shell.settingsOpen &&\n 'bg-primary-button-bg font-medium text-primary-button-text hover:bg-primary-button-hover hover:text-primary-button-text',\n ),\n })}\n onClick={() => shell.setSettingsOpen(true)}\n >\n <Icon name=\"settings\" size={labeled ? 14 : undefined} />\n {labeled ? <span className=\"text-center\">Settings</span> : null}\n </button>\n ) : null}\n <ActionSlot />\n </div>\n );\n}\n","'use client';\n\nimport {\n useTrueForgeAgentSpec,\n useTrueForgeFlushAgentSpec,\n useTrueForgeUpdateAgentSpec,\n} from '@truefoundry/trueforge-assistant-ui-runtime';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { AgentConfigEditor } from '../atoms/draft/AgentConfigEditors.js';\nimport { useAgentConfigInstructions } from '../atoms/draft/AgentConfigInstructionsContext.js';\nimport type { AgentInstructionsDraft } from '../atoms/draft/AgentInstructionsDrawer.js';\nimport { useDraftCatalog } from '../atoms/draft/DraftCatalogProvider.js';\nimport { withInitialUserMessages } from '../atoms/draft/agentConfigMessages.js';\nimport { useResourcePermissions } from '../hooks/useResourcePermissions.js';\nimport { useOptionalServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { shellIsCreateAgent, useShellMode } from '../server/ShellModeContext.js';\nimport type { AgentSpec, ConnectorState, McpToolSelection } from '../server/types.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\n\nexport function AgentConfigDrawerContainer({ showClose = false }: { showClose?: boolean }) {\n const { agentSpec } = useTrueForgeAgentSpec();\n const updateAgentSpec = useTrueForgeUpdateAgentSpec();\n const flushAgentSpec = useTrueForgeFlushAgentSpec();\n const shell = useShellMode();\n const agentId = shell.mode.status === 'active' ? shell.mode.agentId : undefined;\n const { allows } = useResourcePermissions({\n resourceType: 'agent',\n resourceIds: agentId == null ? [] : [agentId],\n });\n const canManageAgent = allows(agentId, 'MANAGE');\n const server = useOptionalServer();\n const capabilities = useServerCapabilities();\n const catalog = useDraftCatalog();\n const AgentConfigPanel = useSlot('AgentConfigPanel');\n const AgentConfigEditors = useSlot('AgentConfigEditors');\n const [editor, setEditor] = useState<AgentConfigEditor | null>(null);\n const isBuilder = shellIsCreateAgent(shell.mode);\n const { draft: instructionDraft, flush: flushInstructions } = useAgentConfigInstructions();\n const closeDrawer = useCallback(() => {\n flushInstructions();\n void flushAgentSpec();\n shell.setAgentConfigOpen(false);\n }, [flushAgentSpec, flushInstructions, shell]);\n\n useEffect(() => {\n if (isBuilder) catalog.ensureLoaded();\n }, [catalog, isBuilder]);\n\n useEffect(() => {\n if (!canManageAgent) setEditor(null);\n }, [canManageAgent]);\n\n useEffect(() => {\n if (!showClose || !shell.agentConfigOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (\n !event.defaultPrevented &&\n event.key === 'Escape' &&\n editor === null &&\n document.querySelector('dialog[open]') === null\n ) {\n closeDrawer();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [closeDrawer, editor, shell.agentConfigOpen, showClose]);\n\n // Flush pending edits on unmount. ChatProvider remount (runtimeKey) tears the\n // runtime down first — flush then throws; ignore so the new draft can mount.\n useEffect(\n () => () => {\n flushInstructions();\n try {\n void flushAgentSpec();\n } catch {\n // Runtime already gone.\n }\n },\n [flushAgentSpec, flushInstructions],\n );\n\n const commitSpec = useCallback(\n ({ next, instructions }: { next: AgentSpec; instructions: string }) => {\n if (!canManageAgent) return;\n if (next.skills && next.skills.length > 0 && capabilities?.sandbox.enabled === true) {\n updateAgentSpec?.({\n ...next,\n instructions: instructions || undefined,\n config: {\n ...next.config,\n sandbox: { ...next.config?.sandbox, enabled: true },\n },\n });\n return;\n }\n updateAgentSpec?.({ ...next, instructions: instructions || undefined });\n },\n [canManageAgent, capabilities?.sandbox.enabled, updateAgentSpec],\n );\n\n const updateSpec = useCallback(\n (next: AgentSpec) => {\n commitSpec({ next, instructions: instructionDraft });\n },\n [commitSpec, instructionDraft],\n );\n\n const saveInstructions = useCallback(\n (draft: AgentInstructionsDraft) => {\n if (agentSpec === null) return;\n commitSpec({\n next: withInitialUserMessages({ spec: agentSpec, messages: draft.messages }),\n instructions: draft.instructions,\n });\n },\n [agentSpec, commitSpec],\n );\n\n const loadMcpTools = useCallback(\n async (connectorId: string): Promise<McpToolSelection[]> => {\n if (server?.getMcpTools === undefined) return [];\n return server.getMcpTools({ connectorId });\n },\n [server],\n );\n const loadMcpConnector = useCallback(\n async (connectorId: string): Promise<ConnectorState | undefined> => {\n return server?.getMcpConnector?.({ connectorId });\n },\n [server],\n );\n\n if (!isBuilder || agentSpec === null || (showClose && !shell.agentConfigOpen)) {\n return null;\n }\n\n const model = catalog.models.find(item => item.name === agentSpec.model.name);\n\n return (\n <>\n <AgentConfigPanel\n spec={agentSpec}\n model={model}\n models={catalog.models}\n modelsLoading={catalog.loading}\n modelsError={catalog.error}\n skills={catalog.skills}\n skillsAvailable={capabilities?.skill.enabled === true}\n webSearchAvailable={capabilities?.webSearch?.enabled === true}\n instructions={instructionDraft}\n onOpenEditor={nextEditor => {\n if (canManageAgent) setEditor(nextEditor);\n }}\n onChange={updateSpec}\n disabled={!canManageAgent}\n onClose={showClose ? closeDrawer : undefined}\n />\n <AgentConfigEditors\n editor={editor}\n spec={agentSpec}\n models={catalog.models}\n connectors={catalog.connectors}\n skills={catalog.skills}\n loading={catalog.loading}\n error={catalog.error}\n skillsDisabled={capabilities?.skill.enabled !== true}\n sandboxAvailable={capabilities?.sandbox.enabled === true}\n webSearchAvailable={capabilities?.webSearch?.enabled === true}\n instructions={instructionDraft}\n onInstructionsSave={saveInstructions}\n {...(server?.getMcpConnector === undefined ? {} : { loadMcpConnector })}\n loadMcpTools={loadMcpTools}\n onRefreshConnectors={catalog.refreshConnectors}\n onChange={updateSpec}\n onClose={() => setEditor(null)}\n />\n </>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs"]}
@@ -2,11 +2,11 @@ import {
2
2
  clearScheduleShareSearch,
3
3
  readScheduleShareSearch,
4
4
  writeScheduleShareSearch
5
- } from "./chunk-UN7WPTTK.js";
5
+ } from "./chunk-ZYJ2SBF7.js";
6
6
  import {
7
7
  readSessionShareSearch,
8
8
  writeSessionShareSearch
9
- } from "./chunk-U7WONUMR.js";
9
+ } from "./chunk-7S7A3PNP.js";
10
10
 
11
11
  // src/routing/paths.ts
12
12
  var DEFAULTS = {
@@ -214,4 +214,4 @@ export {
214
214
  matchLocation,
215
215
  placesEqual
216
216
  };
217
- //# sourceMappingURL=chunk-JEAULQNF.js.map
217
+ //# sourceMappingURL=chunk-TJGGIEF6.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getErrorMessage,
3
3
  useOptionalServer
4
- } from "./chunk-U7WONUMR.js";
4
+ } from "./chunk-7S7A3PNP.js";
5
5
  import {
6
6
  ThemeContext,
7
7
  cn
8
- } from "./chunk-NXK4XW4U.js";
8
+ } from "./chunk-6UACSIIY.js";
9
9
 
10
10
  // src/icons/Icon.tsx
11
11
  import { createElement, isValidElement, useContext } from "react";
@@ -482,4 +482,4 @@ export {
482
482
  DraftCatalogProvider,
483
483
  useDraftCatalog
484
484
  };
485
- //# sourceMappingURL=chunk-KDCVFHPZ.js.map
485
+ //# sourceMappingURL=chunk-TX6PB3DY.js.map