@truefoundry/trueforge-ui 0.3.0-rc.8 → 0.3.0-rc.9

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 (55) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{AgentCodeSnippets-T7PR6PDP.js → AgentCodeSnippets-ARHIK2T6.js} +2 -2
  3. package/dist/{AgentMetricChart-J3RCSCAG.js → AgentMetricChart-ZQIRBCZL.js} +3 -3
  4. package/dist/{AgentOverview-WC7WMNMS.js → AgentOverview-7GJJV2OU.js} +2 -2
  5. package/dist/{AgentSessionEventTimeline-SETKGGCI.js → AgentSessionEventTimeline-7QM7QKIQ.js} +2 -2
  6. package/dist/{AgentSessionEventTimelineChart-4Y7PY5SJ.js → AgentSessionEventTimelineChart-PIDYWLYT.js} +2 -2
  7. package/dist/{AgentSessions-YCAPM5GK.js → AgentSessions-MR2DREKN.js} +2 -2
  8. package/dist/{ConnectorSettings-PXWRCFAL.js → ConnectorSettings-YBGANZOG.js} +2 -2
  9. package/dist/{DockLayout-JRKCKAG2.js → DockLayout-O5TS4YZH.js} +5 -5
  10. package/dist/{DrawerLayout-U7YPUZBR.js → DrawerLayout-7R3XONK2.js} +6 -6
  11. package/dist/{ModelSettings-VXYMJEMO.js → ModelSettings-UXPL4E6X.js} +2 -2
  12. package/dist/{SandboxSettings-6DRUH72J.js → SandboxSettings-5MMPJHBH.js} +2 -2
  13. package/dist/{SchedulesPage-2G6F4XO6.js → SchedulesPage-5XZRDA5O.js} +3 -3
  14. package/dist/{SettingsBuilder-6FJVZLJT.js → SettingsBuilder-JAP4QGMY.js} +5 -5
  15. package/dist/{SidebarLayout-EQ7EYCWR.js → SidebarLayout-MYZTVWWE.js} +7 -7
  16. package/dist/{SkillSettings-IHVI7FDM.js → SkillSettings-6C5PH3NN.js} +2 -2
  17. package/dist/{TrueForgeUIWithRouter-5OJFI3PF.js → TrueForgeUIWithRouter-3J5G62O5.js} +3 -3
  18. package/dist/{WidgetLayout-PN5ZDOLM.js → WidgetLayout-24ZL3QWT.js} +5 -5
  19. package/dist/{chunk-XANC4F2H.js → chunk-4OEAJKLJ.js} +91 -67
  20. package/dist/chunk-4OEAJKLJ.js.map +1 -0
  21. package/dist/{chunk-L7HNKKS2.js → chunk-FEHL45EB.js} +2 -2
  22. package/dist/{chunk-2UBSLCKB.js → chunk-JF4IELMW.js} +6 -6
  23. package/dist/{chunk-TMIILLHB.js → chunk-JKUYG6HV.js} +2 -2
  24. package/dist/{chunk-PX6MNNN3.js → chunk-JTQU2N2Q.js} +2 -2
  25. package/dist/{chunk-F7YRYFAF.js → chunk-MACHU4OO.js} +2 -2
  26. package/dist/{chunk-OWXPMQ7N.js → chunk-RI6TIYWL.js} +6 -6
  27. package/dist/{chunk-E33DFTVN.js → chunk-UBQYRCCH.js} +2 -2
  28. package/dist/index.d.ts +9 -3
  29. package/dist/index.js +7 -7
  30. package/package.json +3 -3
  31. package/dist/chunk-XANC4F2H.js.map +0 -1
  32. /package/dist/{AgentCodeSnippets-T7PR6PDP.js.map → AgentCodeSnippets-ARHIK2T6.js.map} +0 -0
  33. /package/dist/{AgentMetricChart-J3RCSCAG.js.map → AgentMetricChart-ZQIRBCZL.js.map} +0 -0
  34. /package/dist/{AgentOverview-WC7WMNMS.js.map → AgentOverview-7GJJV2OU.js.map} +0 -0
  35. /package/dist/{AgentSessionEventTimeline-SETKGGCI.js.map → AgentSessionEventTimeline-7QM7QKIQ.js.map} +0 -0
  36. /package/dist/{AgentSessionEventTimelineChart-4Y7PY5SJ.js.map → AgentSessionEventTimelineChart-PIDYWLYT.js.map} +0 -0
  37. /package/dist/{AgentSessions-YCAPM5GK.js.map → AgentSessions-MR2DREKN.js.map} +0 -0
  38. /package/dist/{ConnectorSettings-PXWRCFAL.js.map → ConnectorSettings-YBGANZOG.js.map} +0 -0
  39. /package/dist/{DockLayout-JRKCKAG2.js.map → DockLayout-O5TS4YZH.js.map} +0 -0
  40. /package/dist/{DrawerLayout-U7YPUZBR.js.map → DrawerLayout-7R3XONK2.js.map} +0 -0
  41. /package/dist/{ModelSettings-VXYMJEMO.js.map → ModelSettings-UXPL4E6X.js.map} +0 -0
  42. /package/dist/{SandboxSettings-6DRUH72J.js.map → SandboxSettings-5MMPJHBH.js.map} +0 -0
  43. /package/dist/{SchedulesPage-2G6F4XO6.js.map → SchedulesPage-5XZRDA5O.js.map} +0 -0
  44. /package/dist/{SettingsBuilder-6FJVZLJT.js.map → SettingsBuilder-JAP4QGMY.js.map} +0 -0
  45. /package/dist/{SidebarLayout-EQ7EYCWR.js.map → SidebarLayout-MYZTVWWE.js.map} +0 -0
  46. /package/dist/{SkillSettings-IHVI7FDM.js.map → SkillSettings-6C5PH3NN.js.map} +0 -0
  47. /package/dist/{TrueForgeUIWithRouter-5OJFI3PF.js.map → TrueForgeUIWithRouter-3J5G62O5.js.map} +0 -0
  48. /package/dist/{WidgetLayout-PN5ZDOLM.js.map → WidgetLayout-24ZL3QWT.js.map} +0 -0
  49. /package/dist/{chunk-L7HNKKS2.js.map → chunk-FEHL45EB.js.map} +0 -0
  50. /package/dist/{chunk-2UBSLCKB.js.map → chunk-JF4IELMW.js.map} +0 -0
  51. /package/dist/{chunk-TMIILLHB.js.map → chunk-JKUYG6HV.js.map} +0 -0
  52. /package/dist/{chunk-PX6MNNN3.js.map → chunk-JTQU2N2Q.js.map} +0 -0
  53. /package/dist/{chunk-F7YRYFAF.js.map → chunk-MACHU4OO.js.map} +0 -0
  54. /package/dist/{chunk-OWXPMQ7N.js.map → chunk-RI6TIYWL.js.map} +0 -0
  55. /package/dist/{chunk-E33DFTVN.js.map → chunk-UBQYRCCH.js.map} +0 -0
@@ -4375,8 +4375,14 @@ function AttachmentPreviewDialog({ previewSrc, children }) {
4375
4375
 
4376
4376
  // src/atoms/ChatFileDownload.tsx
4377
4377
  import { useState as useState16 } from "react";
4378
- import { jsx as jsx52, jsxs as jsxs39 } from "react/jsx-runtime";
4379
- function ChatFileDownload({ files, fileDownloadBaseUrl, onDownloadArtifact, readOnly }) {
4378
+ import { Fragment as Fragment9, jsx as jsx52, jsxs as jsxs39 } from "react/jsx-runtime";
4379
+ function ChatFileDownload({
4380
+ files,
4381
+ fileDownloadBaseUrl,
4382
+ onDownloadArtifact,
4383
+ readOnly,
4384
+ readOnlyTooltip
4385
+ }) {
4380
4386
  const [downloadingPath, setDownloadingPath] = useState16(null);
4381
4387
  return /* @__PURE__ */ jsxs39(
4382
4388
  "details",
@@ -4385,7 +4391,7 @@ function ChatFileDownload({ files, fileDownloadBaseUrl, onDownloadArtifact, read
4385
4391
  className: "aui-sandbox-artifacts group my-2 overflow-hidden rounded-lg border border-primary-button-bg/20 bg-card-bg",
4386
4392
  "data-testid": "aui-sandbox-artifacts",
4387
4393
  children: [
4388
- /* @__PURE__ */ jsxs39("summary", { className: "flex min-h-9 cursor-pointer list-none items-center gap-2 bg-primary-button-bg/5 px-3 py-2 text-xs font-medium leading-none text-primary-button-bg [&::-webkit-details-marker]:hidden", children: [
4394
+ /* @__PURE__ */ jsx52("summary", { className: "min-h-9 cursor-pointer list-none bg-primary-button-bg/5 px-3 py-2 text-xs font-medium leading-none text-primary-button-bg [&::-webkit-details-marker]:hidden", children: /* @__PURE__ */ jsxs39("span", { className: "inline-flex items-center gap-1", children: [
4389
4395
  /* @__PURE__ */ jsx52(Icon, { name: "chevron-down", size: 13, className: "shrink-0 transition-transform group-open:rotate-180" }),
4390
4396
  /* @__PURE__ */ jsx52(Icon, { name: "file", size: 16, className: "shrink-0" }),
4391
4397
  /* @__PURE__ */ jsxs39("span", { className: "leading-none", children: [
@@ -4394,20 +4400,18 @@ function ChatFileDownload({ files, fileDownloadBaseUrl, onDownloadArtifact, read
4394
4400
  files.length === 1 ? "file" : "files",
4395
4401
  " generated"
4396
4402
  ] })
4397
- ] }),
4403
+ ] }) }),
4398
4404
  /* @__PURE__ */ jsx52("div", { className: "flex flex-wrap items-center gap-y-1 px-3 py-2", children: files.map(({ name, path }) => {
4399
4405
  if (readOnly) {
4400
- return /* @__PURE__ */ jsxs39(
4401
- "span",
4402
- {
4403
- className: "mr-3 inline-flex min-h-7 items-center gap-1.5 border-r border-border pr-3 text-xs text-text-secondary last:mr-0 last:border-r-0 last:pr-0",
4404
- children: [
4405
- /* @__PURE__ */ jsx52(Icon, { name: "file", size: 14, className: "shrink-0" }),
4406
- /* @__PURE__ */ jsx52("span", { className: "leading-none", children: name })
4407
- ]
4408
- },
4409
- path
4410
- );
4406
+ const itemClassName = "mr-3 inline-flex min-h-7 items-center gap-1.5 border-r border-border pr-3 text-xs text-text-secondary last:mr-0 last:border-r-0 last:pr-0";
4407
+ const label = /* @__PURE__ */ jsxs39(Fragment9, { children: [
4408
+ /* @__PURE__ */ jsx52(Icon, { name: "file", size: 14, className: "shrink-0" }),
4409
+ /* @__PURE__ */ jsx52("span", { className: "leading-none", children: name })
4410
+ ] });
4411
+ if (readOnlyTooltip) {
4412
+ return /* @__PURE__ */ jsx52(Tooltip, { content: readOnlyTooltip, triggerClassName: itemClassName, children: /* @__PURE__ */ jsx52("span", { className: "inline-flex items-center gap-1.5", children: label }) }, path);
4413
+ }
4414
+ return /* @__PURE__ */ jsx52("span", { className: itemClassName, children: label }, path);
4411
4415
  }
4412
4416
  const href = fileDownloadBaseUrl ? `${fileDownloadBaseUrl}${path}` : void 0;
4413
4417
  const canDownload = Boolean(onDownloadArtifact || href);
@@ -4830,7 +4834,7 @@ function connectorsWithSelectedStubs({
4830
4834
  }
4831
4835
 
4832
4836
  // src/atoms/draft/AgentConfigEditors.tsx
4833
- import { Fragment as Fragment9, jsx as jsx57, jsxs as jsxs44 } from "react/jsx-runtime";
4837
+ import { Fragment as Fragment10, jsx as jsx57, jsxs as jsxs44 } from "react/jsx-runtime";
4834
4838
  function AgentConfigEditors({
4835
4839
  editor,
4836
4840
  spec,
@@ -4941,7 +4945,7 @@ function AgentConfigEditors({
4941
4945
  })
4942
4946
  );
4943
4947
  };
4944
- return /* @__PURE__ */ jsxs44(Fragment9, { children: [
4948
+ return /* @__PURE__ */ jsxs44(Fragment10, { children: [
4945
4949
  editor === "instructions" ? /* @__PURE__ */ jsx57(
4946
4950
  AgentInstructionsDrawer2,
4947
4951
  {
@@ -5279,7 +5283,7 @@ function modelMatchesQuery({ model, needle }) {
5279
5283
  }
5280
5284
 
5281
5285
  // src/atoms/draft/DraftModelCatalogPanel.tsx
5282
- import { Fragment as Fragment10, jsx as jsx61, jsxs as jsxs48 } from "react/jsx-runtime";
5286
+ import { Fragment as Fragment11, jsx as jsx61, jsxs as jsxs48 } from "react/jsx-runtime";
5283
5287
  function monogram(value) {
5284
5288
  const trimmed = value.trim();
5285
5289
  return trimmed ? trimmed.charAt(0).toUpperCase() : "?";
@@ -5343,7 +5347,7 @@ function DraftModelCatalogPanel({
5343
5347
  );
5344
5348
  const sections = groupModelsByProvider(filtered);
5345
5349
  const detailedGridClass = "grid-cols-[minmax(0,1fr)_5rem]";
5346
- return /* @__PURE__ */ jsxs48(Fragment10, { children: [
5350
+ return /* @__PURE__ */ jsxs48(Fragment11, { children: [
5347
5351
  showSearch && /* @__PURE__ */ jsxs48("div", { className: "border-b border-border px-3 py-2", children: [
5348
5352
  showHeading ? /* @__PURE__ */ jsx61("p", { className: "text-text-primary mb-2 text-sm font-normal", children: "Select model" }) : null,
5349
5353
  /* @__PURE__ */ jsxs48("label", { className: "relative block", children: [
@@ -5437,7 +5441,7 @@ function DraftModelCatalogPanel({
5437
5441
  model.properties.maxOutputTokens === void 0 ? null : `${formatTokens(model.properties.maxOutputTokens)} output`
5438
5442
  ].filter((value) => value !== null).join(" \xB7 ") }) : null
5439
5443
  ] }),
5440
- !showHeading ? /* @__PURE__ */ jsx61(Fragment10, { children: /* @__PURE__ */ jsx61("span", { className: cn("text-text-secondary text-xs", active && "text-primary-button-bg"), children: model.properties.contextLength === void 0 ? "\u2014" : formatTokens(model.properties.contextLength) }) }) : null,
5444
+ !showHeading ? /* @__PURE__ */ jsx61(Fragment11, { children: /* @__PURE__ */ jsx61("span", { className: cn("text-text-secondary text-xs", active && "text-primary-button-bg"), children: model.properties.contextLength === void 0 ? "\u2014" : formatTokens(model.properties.contextLength) }) }) : null,
5441
5445
  active && showHeading ? /* @__PURE__ */ jsx61(Icon, { name: "check", className: "ml-auto size-3.5" }) : null
5442
5446
  ]
5443
5447
  },
@@ -6653,7 +6657,7 @@ function partitionMcpToolsBySection(tools) {
6653
6657
  }
6654
6658
 
6655
6659
  // src/atoms/draft/AgentMcpEditorContent.tsx
6656
- import { Fragment as Fragment11, jsx as jsx68, jsxs as jsxs54 } from "react/jsx-runtime";
6660
+ import { Fragment as Fragment12, jsx as jsx68, jsxs as jsxs54 } from "react/jsx-runtime";
6657
6661
  function ToolCheckbox({ checked }) {
6658
6662
  return /* @__PURE__ */ jsx68(
6659
6663
  "span",
@@ -6894,7 +6898,7 @@ function AgentMcpEditorContent({
6894
6898
  children: "Connect During Chat"
6895
6899
  }
6896
6900
  )
6897
- ] }) : /* @__PURE__ */ jsxs54(Fragment11, { children: [
6901
+ ] }) : /* @__PURE__ */ jsxs54(Fragment12, { children: [
6898
6902
  /* @__PURE__ */ jsxs54("div", { className: "flex shrink-0 items-center justify-between gap-3 border-b border-border p-3", children: [
6899
6903
  /* @__PURE__ */ jsxs54("p", { className: "min-w-0 truncate text-sm font-semibold", children: [
6900
6904
  selectedConnector.name,
@@ -8226,7 +8230,7 @@ function useIsMobile() {
8226
8230
  // src/atoms/draft/DraftReasoningEffortSelector.tsx
8227
8231
  import { useTrueFoundryAgentSpec as useTrueFoundryAgentSpec2, useTrueFoundryUpdateAgentSpec } from "@truefoundry/assistant-ui-runtime";
8228
8232
  import { useEffect as useEffect16, useId as useId9, useRef as useRef13, useState as useState31 } from "react";
8229
- import { Fragment as Fragment12, jsx as jsx82, jsxs as jsxs62 } from "react/jsx-runtime";
8233
+ import { Fragment as Fragment13, jsx as jsx82, jsxs as jsxs62 } from "react/jsx-runtime";
8230
8234
  function DraftReasoningEffortSelector({ disabled, isRunning }) {
8231
8235
  const { models, ensureLoaded } = useDraftCatalog();
8232
8236
  const { agentSpec } = useTrueFoundryAgentSpec2();
@@ -8269,7 +8273,7 @@ function DraftReasoningEffortSelector({ disabled, isRunning }) {
8269
8273
  });
8270
8274
  }, [updateAgentSpec, selected, efforts, currentEffort, agentSpec?.model?.params]);
8271
8275
  if (!hasReasoningEfforts(efforts) || !resolved) return null;
8272
- const content = /* @__PURE__ */ jsxs62(Fragment12, { children: [
8276
+ const content = /* @__PURE__ */ jsxs62(Fragment13, { children: [
8273
8277
  /* @__PURE__ */ jsx82("div", { className: "border-b border-border px-3 py-2", children: /* @__PURE__ */ jsx82("p", { className: "text-text-primary text-sm font-normal", children: "Reasoning effort" }) }),
8274
8278
  /* @__PURE__ */ jsx82(
8275
8279
  "div",
@@ -8394,7 +8398,7 @@ function DraftComposerRightSection({ disabled, isRunning }) {
8394
8398
  // src/atoms/draft/DraftCompositeSelector.tsx
8395
8399
  import { useTrueFoundryAgentSpec as useTrueFoundryAgentSpec3, useTrueFoundryUpdateAgentSpec as useTrueFoundryUpdateAgentSpec2 } from "@truefoundry/assistant-ui-runtime";
8396
8400
  import { useCallback as useCallback11, useEffect as useEffect17, useId as useId10, useMemo as useMemo9, useRef as useRef14, useState as useState32 } from "react";
8397
- import { Fragment as Fragment13, jsx as jsx84, jsxs as jsxs64 } from "react/jsx-runtime";
8401
+ import { Fragment as Fragment14, jsx as jsx84, jsxs as jsxs64 } from "react/jsx-runtime";
8398
8402
  function draftMountsFromSpec(value) {
8399
8403
  if (!Array.isArray(value)) return [];
8400
8404
  const mounts = [];
@@ -8443,7 +8447,7 @@ function CatalogRow({
8443
8447
  onActivate,
8444
8448
  action
8445
8449
  }) {
8446
- const content = /* @__PURE__ */ jsxs64(Fragment13, { children: [
8450
+ const content = /* @__PURE__ */ jsxs64(Fragment14, { children: [
8447
8451
  /* @__PURE__ */ jsx84(
8448
8452
  "span",
8449
8453
  {
@@ -8784,7 +8788,7 @@ function DraftCompositeSelector({ disabled, isRunning, onAttach }) {
8784
8788
  setQuery("");
8785
8789
  shell?.setSettingsOpen(true, section);
8786
8790
  };
8787
- const content = /* @__PURE__ */ jsxs64(Fragment13, { children: [
8791
+ const content = /* @__PURE__ */ jsxs64(Fragment14, { children: [
8788
8792
  /* @__PURE__ */ jsx84("div", { className: "flex shrink-0 border-b border-border", children: TABS.map((t) => {
8789
8793
  const count = t.id === "connectors" ? selectedMcp.length : t.id === "skills" ? selectedSkills.length : null;
8790
8794
  const active = tab === t.id;
@@ -8809,7 +8813,7 @@ function DraftCompositeSelector({ disabled, isRunning, onAttach }) {
8809
8813
  t.id
8810
8814
  );
8811
8815
  }) }),
8812
- /* @__PURE__ */ jsxs64(Fragment13, { children: [
8816
+ /* @__PURE__ */ jsxs64(Fragment14, { children: [
8813
8817
  /* @__PURE__ */ jsx84(
8814
8818
  SearchField,
8815
8819
  {
@@ -8829,8 +8833,8 @@ function DraftCompositeSelector({ disabled, isRunning, onAttach }) {
8829
8833
  ]
8830
8834
  }
8831
8835
  ) : null,
8832
- /* @__PURE__ */ jsx84("div", { className: "min-h-0 flex-1 overflow-y-auto px-1 pb-2", children: tab === "connectors" ? /* @__PURE__ */ jsxs64(Fragment13, { children: [
8833
- pinnedSelectedConnectors.length > 0 ? /* @__PURE__ */ jsxs64(Fragment13, { children: [
8836
+ /* @__PURE__ */ jsx84("div", { className: "min-h-0 flex-1 overflow-y-auto px-1 pb-2", children: tab === "connectors" ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
8837
+ pinnedSelectedConnectors.length > 0 ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
8834
8838
  /* @__PURE__ */ jsx84(SectionHeading, { label: "Selected", count: pinnedSelectedConnectors.length }),
8835
8839
  pinnedSelectedConnectors.map((c) => /* @__PURE__ */ jsx84(
8836
8840
  CatalogRow,
@@ -8845,7 +8849,7 @@ function DraftCompositeSelector({ disabled, isRunning, onAttach }) {
8845
8849
  c.id
8846
8850
  ))
8847
8851
  ] }) : null,
8848
- pinnedAvailableConnectors.length > 0 ? /* @__PURE__ */ jsxs64(Fragment13, { children: [
8852
+ pinnedAvailableConnectors.length > 0 ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
8849
8853
  /* @__PURE__ */ jsx84(SectionHeading, { label: "Available", count: pinnedAvailableConnectors.length }),
8850
8854
  pinnedAvailableConnectors.map((c) => /* @__PURE__ */ jsx84(
8851
8855
  CatalogRow,
@@ -8870,12 +8874,12 @@ function DraftCompositeSelector({ disabled, isRunning, onAttach }) {
8870
8874
  onOpenSettings: shell && canConfigureConnectors ? () => openSettings("connectors") : void 0
8871
8875
  }
8872
8876
  ) : null
8873
- ] }) : /* @__PURE__ */ jsxs64(Fragment13, { children: [
8874
- pinnedSelectedSkills.length > 0 ? /* @__PURE__ */ jsxs64(Fragment13, { children: [
8877
+ ] }) : /* @__PURE__ */ jsxs64(Fragment14, { children: [
8878
+ pinnedSelectedSkills.length > 0 ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
8875
8879
  /* @__PURE__ */ jsx84(SectionHeading, { label: "Selected", count: pinnedSelectedSkills.length }),
8876
8880
  pinnedSelectedSkills.map(renderSkill)
8877
8881
  ] }) : null,
8878
- pinnedAvailableSkills.length > 0 ? /* @__PURE__ */ jsxs64(Fragment13, { children: [
8882
+ pinnedAvailableSkills.length > 0 ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
8879
8883
  /* @__PURE__ */ jsx84(SectionHeading, { label: "Available", count: pinnedAvailableSkills.length }),
8880
8884
  pinnedAvailableSkills.map(renderSkill)
8881
8885
  ] }) : null,
@@ -9086,7 +9090,7 @@ HistoryLoader.displayName = "HistoryLoader";
9086
9090
  import { useMemo as useMemo10, useRef as useRef16 } from "react";
9087
9091
  import ReactMarkdown from "react-markdown";
9088
9092
  import remarkGfm from "remark-gfm";
9089
- import { Fragment as Fragment14, jsx as jsx87 } from "react/jsx-runtime";
9093
+ import { Fragment as Fragment15, jsx as jsx87 } from "react/jsx-runtime";
9090
9094
  function preloadMarkdownOpenUI() {
9091
9095
  return import("./OpenUiFenceBlock-KPZFLUSC.js");
9092
9096
  }
@@ -9111,6 +9115,7 @@ function makeComponents(opts) {
9111
9115
  fileDownloadBaseUrl,
9112
9116
  onDownloadArtifact,
9113
9117
  readOnly,
9118
+ sandboxDownloadReadOnlyTooltip,
9114
9119
  OpenUiFenceBlock: OpenUiFenceBlock2,
9115
9120
  SandboxArtifactDownload: SandboxArtifactDownload2,
9116
9121
  SyntaxHighlighter: SyntaxHighlighter2,
@@ -9123,7 +9128,7 @@ function makeComponents(opts) {
9123
9128
  },
9124
9129
  // Strip default <pre> wrapper — each block renderer provides its own container.
9125
9130
  pre({ children }) {
9126
- return /* @__PURE__ */ jsx87(Fragment14, { children });
9131
+ return /* @__PURE__ */ jsx87(Fragment15, { children });
9127
9132
  },
9128
9133
  code({ className, children }) {
9129
9134
  const language = /language-(\w+)/.exec(className ?? "")?.[1];
@@ -9147,7 +9152,8 @@ function makeComponents(opts) {
9147
9152
  code,
9148
9153
  fileDownloadBaseUrl,
9149
9154
  onDownloadArtifact,
9150
- readOnly
9155
+ readOnly,
9156
+ sandboxDownloadReadOnlyTooltip
9151
9157
  }
9152
9158
  );
9153
9159
  }
@@ -9176,6 +9182,7 @@ function Markdown({
9176
9182
  fileDownloadBaseUrl,
9177
9183
  onDownloadArtifact,
9178
9184
  readOnly,
9185
+ sandboxDownloadReadOnlyTooltip,
9179
9186
  className
9180
9187
  }) {
9181
9188
  const mode = useThemeMode();
@@ -9194,6 +9201,7 @@ function Markdown({
9194
9201
  fileDownloadBaseUrl,
9195
9202
  onDownloadArtifact,
9196
9203
  readOnly,
9204
+ sandboxDownloadReadOnlyTooltip,
9197
9205
  OpenUiFenceBlock: OpenUiFenceBlock2,
9198
9206
  SandboxArtifactDownload: SandboxArtifactDownload2,
9199
9207
  SyntaxHighlighter: SyntaxHighlighter2,
@@ -9205,6 +9213,7 @@ function Markdown({
9205
9213
  fileDownloadBaseUrl,
9206
9214
  onDownloadArtifact,
9207
9215
  readOnly,
9216
+ sandboxDownloadReadOnlyTooltip,
9208
9217
  OpenUiFenceBlock2,
9209
9218
  SandboxArtifactDownload2,
9210
9219
  SyntaxHighlighter2,
@@ -9553,7 +9562,8 @@ function SandboxArtifactDownload({
9553
9562
  code,
9554
9563
  fileDownloadBaseUrl,
9555
9564
  onDownloadArtifact,
9556
- readOnly
9565
+ readOnly,
9566
+ sandboxDownloadReadOnlyTooltip
9557
9567
  }) {
9558
9568
  const ChatFileDownload2 = useSlot("ChatFileDownload");
9559
9569
  const artifacts = useMemo11(() => parseSandboxArtifacts(code), [code]);
@@ -9564,13 +9574,14 @@ function SandboxArtifactDownload({
9564
9574
  files: artifacts,
9565
9575
  fileDownloadBaseUrl,
9566
9576
  onDownloadArtifact,
9567
- readOnly
9577
+ readOnly,
9578
+ readOnlyTooltip: sandboxDownloadReadOnlyTooltip
9568
9579
  }
9569
9580
  );
9570
9581
  }
9571
9582
 
9572
9583
  // src/atoms/SandboxToolCallCard.tsx
9573
- import { Fragment as Fragment15, jsx as jsx95, jsxs as jsxs68 } from "react/jsx-runtime";
9584
+ import { Fragment as Fragment16, jsx as jsx95, jsxs as jsxs68 } from "react/jsx-runtime";
9574
9585
  function JsonPane({ value, className }) {
9575
9586
  const MonacoEditorCore2 = useSlot("MonacoEditorCore");
9576
9587
  return /* @__PURE__ */ jsx95(
@@ -9678,7 +9689,7 @@ function SandboxBody({
9678
9689
  }
9679
9690
  )
9680
9691
  ] }) }),
9681
- /* @__PURE__ */ jsx95("div", { className: "rounded-b-lg border border-t-0 border-border p-3", children: hasContent && /* @__PURE__ */ jsx95("div", { className: "max-h-80 overflow-x-hidden overflow-y-auto whitespace-pre-wrap break-words font-mono text-xs text-text-primary", children: viewMode === "code" ? /* @__PURE__ */ jsxs68(Fragment15, { children: [
9692
+ /* @__PURE__ */ jsx95("div", { className: "rounded-b-lg border border-t-0 border-border p-3", children: hasContent && /* @__PURE__ */ jsx95("div", { className: "max-h-80 overflow-x-hidden overflow-y-auto whitespace-pre-wrap break-words font-mono text-xs text-text-primary", children: viewMode === "code" ? /* @__PURE__ */ jsxs68(Fragment16, { children: [
9682
9693
  argsJson && /* @__PURE__ */ jsxs68("div", { className: "my-1 border-l-4 border-primary-button-bg px-3", children: [
9683
9694
  /* @__PURE__ */ jsx95("div", { className: "mb-1 font-sans text-xs font-medium leading-4", children: "Arguments" }),
9684
9695
  /* @__PURE__ */ jsx95(JsonPane, { value: argsJson, className: "pl-2" })
@@ -9687,7 +9698,7 @@ function SandboxBody({
9687
9698
  /* @__PURE__ */ jsx95("div", { className: "mb-1 mt-2 font-sans text-xs font-medium leading-4", children: "Result" }),
9688
9699
  /* @__PURE__ */ jsx95(JsonPane, { value: resultJson, className: "pl-2" })
9689
9700
  ] })
9690
- ] }) : /* @__PURE__ */ jsxs68(Fragment15, { children: [
9701
+ ] }) : /* @__PURE__ */ jsxs68(Fragment16, { children: [
9691
9702
  command && /* @__PURE__ */ jsxs68("div", { className: "my-1 break-all border-l-4 border-primary-button-bg px-3", children: [
9692
9703
  /* @__PURE__ */ jsx95("div", { className: "mb-1 text-[12px] font-medium leading-4 text-text-secondary", children: "COMMAND" }),
9693
9704
  /* @__PURE__ */ jsxs68("div", { children: [
@@ -9696,13 +9707,13 @@ function SandboxBody({
9696
9707
  command
9697
9708
  ] })
9698
9709
  ] }),
9699
- resultText ? /* @__PURE__ */ jsxs68(Fragment15, { children: [
9710
+ resultText ? /* @__PURE__ */ jsxs68(Fragment16, { children: [
9700
9711
  /* @__PURE__ */ jsx95("div", { className: "mx-3 my-1 border-t border-border" }),
9701
9712
  /* @__PURE__ */ jsxs68("div", { className: "my-1 break-all border-l-4 border-primary-button-bg/60 px-3", children: [
9702
9713
  /* @__PURE__ */ jsx95("div", { className: "mb-1 text-[12px] font-medium leading-4 text-text-secondary", children: "OUTPUT" }),
9703
9714
  /* @__PURE__ */ jsx95("div", { children: resultText })
9704
9715
  ] })
9705
- ] }) : resultJson && /* @__PURE__ */ jsxs68(Fragment15, { children: [
9716
+ ] }) : resultJson && /* @__PURE__ */ jsxs68(Fragment16, { children: [
9706
9717
  /* @__PURE__ */ jsx95("div", { className: "mx-3 my-1 border-t border-border" }),
9707
9718
  /* @__PURE__ */ jsxs68("div", { className: "my-1 border-l-4 border-primary-button-bg/60 px-3", children: [
9708
9719
  /* @__PURE__ */ jsx95("div", { className: "mb-1 text-[12px] font-medium leading-4 text-text-secondary", children: "OUTPUT" }),
@@ -9863,7 +9874,7 @@ function useOptionalAgentConfigInstructions() {
9863
9874
  }
9864
9875
 
9865
9876
  // src/atoms/SaveAgentButton.tsx
9866
- import { Fragment as Fragment16, jsx as jsx97, jsxs as jsxs69 } from "react/jsx-runtime";
9877
+ import { Fragment as Fragment17, jsx as jsx97, jsxs as jsxs69 } from "react/jsx-runtime";
9867
9878
  function cloneAgentSpec(spec) {
9868
9879
  return {
9869
9880
  ...spec,
@@ -9975,7 +9986,7 @@ function SaveAgentButtonContent({
9975
9986
  const isUpdateMode = shell?.mode.status === "active" && shell.mode.isMutable && (shell.mode.agentName !== void 0 || shell.mode.agentId !== void 0);
9976
9987
  const triggerLabel = isUpdateMode && children === "Save Agent" ? "Update Agent" : children;
9977
9988
  if (!visible) return null;
9978
- return /* @__PURE__ */ jsxs69(Fragment16, { children: [
9989
+ return /* @__PURE__ */ jsxs69(Fragment17, { children: [
9979
9990
  /* @__PURE__ */ jsx97(PermissionGuard2, { allowed: canManageAgent, children: /* @__PURE__ */ jsxs69(
9980
9991
  Button.Primary,
9981
9992
  {
@@ -10088,7 +10099,7 @@ function SaveAgentForm({
10088
10099
  }
10089
10100
 
10090
10101
  // src/atoms/SchedulesButton.tsx
10091
- import { Fragment as Fragment17, jsx as jsx99, jsxs as jsxs71 } from "react/jsx-runtime";
10102
+ import { Fragment as Fragment18, jsx as jsx99, jsxs as jsxs71 } from "react/jsx-runtime";
10092
10103
  function SchedulesButton({ className, compact = false }) {
10093
10104
  const shell = useOptionalShellMode();
10094
10105
  const scheduleServer = useOptionalScheduleServer();
@@ -10114,7 +10125,7 @@ function SchedulesButton({ className, compact = false }) {
10114
10125
  onClick: () => shell.setSchedulesOpen(!open),
10115
10126
  children: [
10116
10127
  /* @__PURE__ */ jsx99(Icon, { name: "calendar-clock", size: compact ? 14 : void 0 }),
10117
- compact ? /* @__PURE__ */ jsx99("span", { className: "text-center", children: "Schedules" }) : /* @__PURE__ */ jsxs71(Fragment17, { children: [
10128
+ compact ? /* @__PURE__ */ jsx99("span", { className: "text-center", children: "Schedules" }) : /* @__PURE__ */ jsxs71(Fragment18, { children: [
10118
10129
  /* @__PURE__ */ jsx99("span", { className: "truncate", children: "Schedules" }),
10119
10130
  /* @__PURE__ */ jsx99(Icon, { name: "chevron-right", className: "ml-auto size-3.5 shrink-0 opacity-60" })
10120
10131
  ] })
@@ -10172,7 +10183,7 @@ function SelectAgentEmptyState() {
10172
10183
  }
10173
10184
 
10174
10185
  // src/atoms/SessionsBrowserButton.tsx
10175
- import { Fragment as Fragment18, jsx as jsx102, jsxs as jsxs73 } from "react/jsx-runtime";
10186
+ import { Fragment as Fragment19, jsx as jsx102, jsxs as jsxs73 } from "react/jsx-runtime";
10176
10187
  function SessionsBrowserButton({ className, compact = false }) {
10177
10188
  const sessionsServer = useOptionalAgentSessionsServer();
10178
10189
  const shell = useOptionalShellMode();
@@ -10210,7 +10221,7 @@ function SessionsBrowserButton({ className, compact = false }) {
10210
10221
  },
10211
10222
  children: [
10212
10223
  /* @__PURE__ */ jsx102(Icon, { name: "message-square-text", size: compact ? 14 : void 0 }),
10213
- compact ? /* @__PURE__ */ jsx102("span", { className: "text-center", children: "Sessions" }) : /* @__PURE__ */ jsxs73(Fragment18, { children: [
10224
+ compact ? /* @__PURE__ */ jsx102("span", { className: "text-center", children: "Sessions" }) : /* @__PURE__ */ jsxs73(Fragment19, { children: [
10214
10225
  /* @__PURE__ */ jsx102("span", { className: "truncate", children: "Sessions" }),
10215
10226
  /* @__PURE__ */ jsx102(Icon, { name: "chevron-right", className: "ml-auto size-3.5 shrink-0 opacity-60" })
10216
10227
  ] })
@@ -11401,7 +11412,7 @@ function SyntaxHighlighterImpl({ code, language, darkTheme, className, showLineN
11401
11412
  var SyntaxHighlighter = memo(SyntaxHighlighterImpl);
11402
11413
 
11403
11414
  // src/atoms/ThreadListMisc.tsx
11404
- import { Fragment as Fragment19, jsx as jsx106, jsxs as jsxs77 } from "react/jsx-runtime";
11415
+ import { Fragment as Fragment20, jsx as jsx106, jsxs as jsxs77 } from "react/jsx-runtime";
11405
11416
  function ThreadListNewButton({ className, children, style, ...rest }) {
11406
11417
  return /* @__PURE__ */ jsx106(
11407
11418
  "button",
@@ -11417,7 +11428,7 @@ function ThreadListNewButton({ className, children, style, ...rest }) {
11417
11428
  )
11418
11429
  }),
11419
11430
  ...rest,
11420
- children: children ?? /* @__PURE__ */ jsxs77(Fragment19, { children: [
11431
+ children: children ?? /* @__PURE__ */ jsxs77(Fragment20, { children: [
11421
11432
  /* @__PURE__ */ jsx106(Icon, { name: "square-pen" }),
11422
11433
  "New Chat"
11423
11434
  ] })
@@ -12167,7 +12178,7 @@ function useRegisterApprovalExpand(toolCallId, expand) {
12167
12178
  }
12168
12179
 
12169
12180
  // src/atoms/ToolCallCard.tsx
12170
- import { Fragment as Fragment20, jsx as jsx112, jsxs as jsxs81 } from "react/jsx-runtime";
12181
+ import { Fragment as Fragment21, jsx as jsx112, jsxs as jsxs81 } from "react/jsx-runtime";
12171
12182
  var DEFAULT_AWAITING_TEXT = "Awaiting Response...";
12172
12183
  function ToolCallCard({
12173
12184
  icon = "mcp-server",
@@ -12239,7 +12250,7 @@ function ToolCallCard({
12239
12250
  showContentConnector: true,
12240
12251
  showPersistentContentConnector: !hasApproval,
12241
12252
  dataTestPrefix: dataTestPrefix ? `${dataTestPrefix}-header` : void 0,
12242
- persistentChildren: /* @__PURE__ */ jsxs81(Fragment20, { children: [
12253
+ persistentChildren: /* @__PURE__ */ jsxs81(Fragment21, { children: [
12243
12254
  approvalSlot,
12244
12255
  expanded && showResponseLine && responseSlot && /* @__PURE__ */ jsx112("div", { "data-testid": dataTestPrefix ? `${dataTestPrefix}-response` : void 0, children: responseSlot })
12245
12256
  ] }),
@@ -14394,10 +14405,22 @@ function UserMessageContainer() {
14394
14405
  }
14395
14406
 
14396
14407
  // src/containers/AgentSessionTimelineContainer.tsx
14397
- import { Fragment as Fragment21, jsx as jsx132, jsxs as jsxs88 } from "react/jsx-runtime";
14408
+ import { Fragment as Fragment22, jsx as jsx132, jsxs as jsxs88 } from "react/jsx-runtime";
14409
+ function ReadOnlyMarkdown(props) {
14410
+ return /* @__PURE__ */ jsx132(
14411
+ Markdown,
14412
+ {
14413
+ ...props,
14414
+ readOnly: true,
14415
+ onDownloadArtifact: void 0,
14416
+ sandboxDownloadReadOnlyTooltip: "Download File is not available in read-only mode"
14417
+ }
14418
+ );
14419
+ }
14398
14420
  var READ_ONLY_SLOT_OVERRIDES = {
14399
- UserMessageActionBar: () => /* @__PURE__ */ jsx132(Fragment21, {}),
14400
- MessageActionBar: () => /* @__PURE__ */ jsx132(Fragment21, {})
14421
+ UserMessageActionBar: () => /* @__PURE__ */ jsx132(Fragment22, {}),
14422
+ MessageActionBar: () => /* @__PURE__ */ jsx132(Fragment22, {}),
14423
+ Markdown: ReadOnlyMarkdown
14401
14424
  };
14402
14425
  function turnIdFromMessage(message) {
14403
14426
  const messageId = message.id ?? "";
@@ -14433,12 +14456,13 @@ function applyTerminalState(messages, turn) {
14433
14456
  if (state?.status !== "error" && state?.status !== "cancelled") return messages;
14434
14457
  const assistantIndex = messages.findIndex((message) => message.role === "assistant");
14435
14458
  const assistant = assistantIndex < 0 ? void 0 : messages[assistantIndex];
14459
+ const createdAt = new Date(state.completedAt ?? turn.done?.createdAt ?? turn.created.createdAt);
14436
14460
  const terminal = state.status === "error" ? {
14437
14461
  ...assistant ?? {
14438
14462
  id: `${turn.turnId}-assistant`,
14439
14463
  role: "assistant",
14440
14464
  content: [],
14441
- createdAt: new Date(turn.done?.createdAt ?? turn.created.createdAt),
14465
+ createdAt,
14442
14466
  metadata: { custom: { turnId: turn.turnId } }
14443
14467
  },
14444
14468
  status: { type: "incomplete", reason: "error", error: state.message }
@@ -14447,7 +14471,7 @@ function applyTerminalState(messages, turn) {
14447
14471
  id: `${turn.turnId}-assistant`,
14448
14472
  role: "assistant",
14449
14473
  content: [],
14450
- createdAt: new Date(turn.done?.createdAt ?? turn.created.createdAt),
14474
+ createdAt,
14451
14475
  metadata: { custom: { turnId: turn.turnId } }
14452
14476
  },
14453
14477
  content: appendTerminalText(assistant?.content ?? [], `Cancelled: ${state.reason}`),
@@ -14555,28 +14579,28 @@ function SessionTurnSection({
14555
14579
  }
14556
14580
 
14557
14581
  // src/theme/defaultSlots.ts
14558
- var AgentOverview = lazy(() => import("./AgentOverview-WC7WMNMS.js"));
14582
+ var AgentOverview = lazy(() => import("./AgentOverview-7GJJV2OU.js"));
14559
14583
  var AgentSessions = lazy(async () => {
14560
- const mod = await import("./AgentSessions-YCAPM5GK.js");
14584
+ const mod = await import("./AgentSessions-MR2DREKN.js");
14561
14585
  return { default: mod.AgentSessions };
14562
14586
  });
14563
14587
  var AgentCodeSnippets = lazy(
14564
- () => import("./AgentCodeSnippets-T7PR6PDP.js")
14588
+ () => import("./AgentCodeSnippets-ARHIK2T6.js")
14565
14589
  );
14566
14590
  var SchedulesPage = lazy(async () => {
14567
- const mod = await import("./SchedulesPage-2G6F4XO6.js");
14591
+ const mod = await import("./SchedulesPage-5XZRDA5O.js");
14568
14592
  return { default: mod.SchedulesPage };
14569
14593
  });
14570
14594
  var AgentSessionEventTimeline = lazy(async () => {
14571
- const mod = await import("./AgentSessionEventTimeline-SETKGGCI.js");
14595
+ const mod = await import("./AgentSessionEventTimeline-7QM7QKIQ.js");
14572
14596
  return { default: mod.AgentSessionEventTimeline };
14573
14597
  });
14574
14598
  var AgentSessionEventTimelineChart = lazy(async () => {
14575
- const mod = await import("./AgentSessionEventTimelineChart-4Y7PY5SJ.js");
14599
+ const mod = await import("./AgentSessionEventTimelineChart-PIDYWLYT.js");
14576
14600
  return { default: mod.AgentSessionEventTimelineChart };
14577
14601
  });
14578
14602
  var AgentMetricChart = lazy(async () => {
14579
- const mod = await import("./AgentMetricChart-J3RCSCAG.js");
14603
+ const mod = await import("./AgentMetricChart-ZQIRBCZL.js");
14580
14604
  return { default: mod.AgentMetricChart };
14581
14605
  });
14582
14606
  var defaultSlots = {
@@ -14949,4 +14973,4 @@ export {
14949
14973
  UserMessageContainer,
14950
14974
  defaultSlots
14951
14975
  };
14952
- //# sourceMappingURL=chunk-XANC4F2H.js.map
14976
+ //# sourceMappingURL=chunk-4OEAJKLJ.js.map