@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +22 -7
  3. package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-N546FNNS.js} +38 -23
  4. package/dist/AgentCodeSnippets-N546FNNS.js.map +1 -0
  5. package/dist/AgentMetricChart-YWJYVYYA.js +15 -0
  6. package/dist/{AgentOverview-EEBHJC32.js → AgentOverview-VF74XC7I.js} +7 -7
  7. package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-RFR6LQMY.js} +19 -10
  8. package/dist/AgentSessionEventTimeline-RFR6LQMY.js.map +1 -0
  9. package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-27CQF6FX.js} +144 -57
  10. package/dist/AgentSessionEventTimelineChart-27CQF6FX.js.map +1 -0
  11. package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-4IVX2SGD.js} +36 -12
  12. package/dist/AgentSessions-4IVX2SGD.js.map +1 -0
  13. package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-R5VEP7BO.js} +162 -126
  14. package/dist/ConnectorSettings-R5VEP7BO.js.map +1 -0
  15. package/dist/{DockLayout-LM4AFMFY.js → DockLayout-F44RWGEY.js} +10 -10
  16. package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-SQ323AVM.js} +14 -12
  17. package/dist/DrawerLayout-SQ323AVM.js.map +1 -0
  18. package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-6QLS63HM.js} +22 -28
  19. package/dist/ModelSettings-6QLS63HM.js.map +1 -0
  20. package/dist/OpenUiFenceBlock-4ROX3G4X.js +9 -0
  21. package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-OLKDXIQS.js} +17 -21
  22. package/dist/SandboxSettings-OLKDXIQS.js.map +1 -0
  23. package/dist/SchedulesPage-TMOTK6DR.js +15 -0
  24. package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-GISAH2WU.js} +8 -8
  25. package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-EN33DUQ7.js} +171 -26
  26. package/dist/ShellRouteSync-EN33DUQ7.js.map +1 -0
  27. package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-35K4AKTC.js} +80 -58
  28. package/dist/SidebarLayout-35K4AKTC.js.map +1 -0
  29. package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-JSX2BTII.js} +24 -22
  30. package/dist/SkillSettings-JSX2BTII.js.map +1 -0
  31. package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-6VCR7ES3.js} +9 -9
  32. package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-RKBSN2FZ.js} +10 -10
  33. package/dist/{chunk-ZTMKFZQ3.js → chunk-2O5EJ6QS.js} +4440 -3042
  34. package/dist/chunk-2O5EJ6QS.js.map +1 -0
  35. package/dist/chunk-6WCIL3H2.js +517 -0
  36. package/dist/chunk-6WCIL3H2.js.map +1 -0
  37. package/dist/{chunk-WVE3F724.js → chunk-73FQVITT.js} +21 -4
  38. package/dist/chunk-73FQVITT.js.map +1 -0
  39. package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
  40. package/dist/chunk-7AAO4UDQ.js.map +1 -0
  41. package/dist/{chunk-CYHJDKFB.js → chunk-F5QVQIBH.js} +172 -46
  42. package/dist/chunk-F5QVQIBH.js.map +1 -0
  43. package/dist/{chunk-FJW36PD7.js → chunk-GIPFF6FZ.js} +28 -24
  44. package/dist/chunk-GIPFF6FZ.js.map +1 -0
  45. package/dist/{chunk-6O6FWUDW.js → chunk-GSJAYYLR.js} +233 -195
  46. package/dist/chunk-GSJAYYLR.js.map +1 -0
  47. package/dist/{chunk-MPNSO7E6.js → chunk-J5BPHEDT.js} +2 -2
  48. package/dist/chunk-KR7WYHVF.js +195 -0
  49. package/dist/chunk-KR7WYHVF.js.map +1 -0
  50. package/dist/{chunk-DMMZSZTN.js → chunk-LUG7E6BL.js} +60 -16
  51. package/dist/chunk-LUG7E6BL.js.map +1 -0
  52. package/dist/chunk-LXJMINS6.js +587 -0
  53. package/dist/chunk-LXJMINS6.js.map +1 -0
  54. package/dist/{chunk-U7KURWW3.js → chunk-PT4EENB3.js} +244 -52
  55. package/dist/chunk-PT4EENB3.js.map +1 -0
  56. package/dist/{chunk-XAU7QFG3.js → chunk-Q6TCT7ZJ.js} +68 -256
  57. package/dist/chunk-Q6TCT7ZJ.js.map +1 -0
  58. package/dist/{chunk-ZKNUMH2M.js → chunk-XLFOXQKZ.js} +13 -11
  59. package/dist/chunk-XLFOXQKZ.js.map +1 -0
  60. package/dist/{chunk-M62XY4NC.js → chunk-XY6LZQES.js} +235 -108
  61. package/dist/chunk-XY6LZQES.js.map +1 -0
  62. package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
  63. package/dist/index.d.ts +316 -94
  64. package/dist/index.js +65 -488
  65. package/dist/index.js.map +1 -1
  66. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +36 -13
  67. package/dist/plugins/trueforge-agent-server-adapter/index.js +69 -34
  68. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  69. package/dist/styles.css +1 -1
  70. package/package.json +4 -4
  71. package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
  72. package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
  73. package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +0 -1
  74. package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +0 -1
  75. package/dist/AgentSessions-3MPDZASK.js.map +0 -1
  76. package/dist/ConnectorSettings-MXFRWWR6.js.map +0 -1
  77. package/dist/DrawerLayout-JR3O6RRB.js.map +0 -1
  78. package/dist/ModelSettings-G7IFNC2Y.js.map +0 -1
  79. package/dist/OpenUiFenceBlock-2TV5TQ6P.js +0 -9
  80. package/dist/SandboxSettings-NXAANMAX.js.map +0 -1
  81. package/dist/SchedulesPage-KKLUDO6B.js +0 -15
  82. package/dist/ShellRouteSync-CEBETGEJ.js.map +0 -1
  83. package/dist/SidebarLayout-A2HJPPHS.js.map +0 -1
  84. package/dist/SkillSettings-FGGMSUNO.js.map +0 -1
  85. package/dist/chunk-2XPPBEYF.js +0 -74
  86. package/dist/chunk-2XPPBEYF.js.map +0 -1
  87. package/dist/chunk-6O6FWUDW.js.map +0 -1
  88. package/dist/chunk-7Z2C2K7F.js +0 -578
  89. package/dist/chunk-7Z2C2K7F.js.map +0 -1
  90. package/dist/chunk-CYHJDKFB.js.map +0 -1
  91. package/dist/chunk-DMMZSZTN.js.map +0 -1
  92. package/dist/chunk-FJW36PD7.js.map +0 -1
  93. package/dist/chunk-M62XY4NC.js.map +0 -1
  94. package/dist/chunk-QC42MLAK.js.map +0 -1
  95. package/dist/chunk-SFZNIO6U.js +0 -18
  96. package/dist/chunk-SFZNIO6U.js.map +0 -1
  97. package/dist/chunk-U7KURWW3.js.map +0 -1
  98. package/dist/chunk-WVE3F724.js.map +0 -1
  99. package/dist/chunk-XAU7QFG3.js.map +0 -1
  100. package/dist/chunk-ZKNUMH2M.js.map +0 -1
  101. package/dist/chunk-ZTMKFZQ3.js.map +0 -1
  102. /package/dist/{AgentMetricChart-JPU3MFQ2.js.map → AgentMetricChart-YWJYVYYA.js.map} +0 -0
  103. /package/dist/{AgentOverview-EEBHJC32.js.map → AgentOverview-VF74XC7I.js.map} +0 -0
  104. /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-F44RWGEY.js.map} +0 -0
  105. /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-4ROX3G4X.js.map} +0 -0
  106. /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-TMOTK6DR.js.map} +0 -0
  107. /package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-GISAH2WU.js.map} +0 -0
  108. /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-6VCR7ES3.js.map} +0 -0
  109. /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-RKBSN2FZ.js.map} +0 -0
  110. /package/dist/{chunk-MPNSO7E6.js.map → chunk-J5BPHEDT.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,75 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0-rc.3
4
+
5
+ ### Minor Changes
6
+
7
+ - 1d31116: Open agent model settings inline and support typed custom model parameters.
8
+ - 74eae6c: Remove pagination from list MCP servers across the API, SDK, and UI; return and search the complete configured MCP catalog client-side.
9
+ - 12b02ff: Open Runtime Config in a right-side drawer and label scheduled sessions consistently.
10
+ - 7e25f68: Open Save Agent in a right-side drawer with only the agent name while preserving configuration from Agent Config.
11
+ - f8b5eeb: Add optional resource permissions and gate agent, schedule, and session mutations.
12
+
13
+ ### Patch Changes
14
+
15
+ - 762ecc0: TrueFoundry skills catalog: proxy GET /skills and /skills/versions from ServiceFoundry; settings skill writes return 424. SkillManifest is a type-discriminated oneOf of GitSkill | TrueFoundryRegistrySkill (`type: truefoundry`; name is FQN, display_name is short). AvailableSkill exposes optional metadata (display_name, repository_name, version). AgentSpec skill refs allow opaque FQN names, optional preload (registry), and max 50. UI draft skill mounts map catalog `id` to AgentSpec `name`.
16
+ - 26a9b80: Add an agent-scoped Schedules tab and route library schedule actions into it.
17
+ - 1b8a3f7: Add documentation links to the code snippets view and shell actions.
18
+ - d2fdfc9: Add agent-filtered chat history labels, preserve Try Agent and explicit history-filter intent in URL query state while resolving backend IDs, reset active chats when users change filters, keep Try Agent highlighted as chat, and route fresh agent builders at `/build-agent` before their session URL is assigned.
19
+ - 26a9b80: Allow sending user messages that contain attachments without text.
20
+ - 26a9b80: Add an empty state and Build Agent action to the schedule agent picker.
21
+ - 4c522e2: Bump `@truefoundry/assistant-ui-runtime` to `0.1.30`.
22
+ - 4c522e2: Bump `@truefoundry/assistant-ui-runtime` to `0.1.31`.
23
+ - d719155: Keep composer catalogs cached when starting a new chat.
24
+ - c0359ca: Strip a trailing slash from the `base_url` passed to agent code-snippets.
25
+ - 57f1fc2: Improve compact agent building with model configuration bottom sheets, provider-first model selection, and a contextual composer actions menu.
26
+ - e3973a5: Show the selected connector and skill count beside the composer tools icon.
27
+ - 26a9b80: Hide model selection in the Build Agent composer and correct concurrent sub-agent timeline bars.
28
+ - 26a9b80: Require direct switch clicks in the Runtime Config sidebar.
29
+ - 1ec19f0: Replace API key replacement with connector configuration editing from the connector list and details view.
30
+ - b482cdd: Show the four primary agent metrics in a compact summary-card layout.
31
+ - b32d2be: Filter chat history to sessions created by the current user, and bump `@truefoundry/assistant-ui-runtime` to `0.1.34`.
32
+ - a9430bd: Accept optional `base_url` on agent code-snippets (FE public host); fall back to request origin + `PUBLIC_BASE_URL` path.
33
+ - 54e4ec4: Keep Settings hidden until the server explicitly enables it.
34
+ - 4c522e2: Hide session cost metrics when cost data is unavailable.
35
+ - 4e7b67a: Check live per-user MCP authentication before loading tools in the agent builder.
36
+ - d2fdfc9: Section MCP tools in the Build Agent selector by read-only, others, and destructive annotations, with a read-only enable-all toggle.
37
+ - 26a9b80: Show agent names without an icon in the Agents table.
38
+ - 4cea38c: Show draft and named sessions in the history panel, exclude agent-builder sessions, cache session pages, and switch history sessions in place without remounting the chat runtime.
39
+ - 2284d3b: Polish the MCP tool selector controls, loading state, and API error messages.
40
+ - e3973a5: Group schedule recurrence controls and display the cadence in an attached summary footer.
41
+ - f2ca338: Show active/paused schedule counts in the Agents library, pin selected MCPs when reopening the tools modal, and align paused schedule badge colors.
42
+ - 77c5c33: Show TrueFoundry skill repositories and versions in skill pickers, load version choices lazily, preserve the chosen version FQN when attaching skills, keep picker ordering stable while open, and add registry-only preload controls to selected skill pills.
43
+ - 26a9b80: Show weekly schedule days before the time controls.
44
+ - 1b8a3f7: Match the Build Agent configuration panel width to the agent playground and identify sessions created by schedule runs.
45
+ - adaf532: Widen the sidebar rail and its nav buttons so labels like "Build Agent" have more breathing room.
46
+ - Updated dependencies [648273b]
47
+ - Updated dependencies [648273b]
48
+ - Updated dependencies [648273b]
49
+ - Updated dependencies [74eae6c]
50
+ - Updated dependencies [44f9cbe]
51
+ - @truefoundry/trueforge-sdk@0.2.0-rc.3
52
+
53
+ ## 0.3.0-rc.2
54
+
55
+ ### Minor Changes
56
+
57
+ - 04d2ee6: Add a `sidebarText` semantic token for sidebar nav labels, refresh trueforge sidebar colors, set trueforge base `radius` to `0.375rem` (6px), and set sidebar / thread-list control corners to `0.75rem` (12px).
58
+
59
+ Expose design-system `Button` (`Button.Primary` / `.Secondary` / `.Ghost` / `.Destructive`). `ButtonVariant` is now `primary | secondary | ghost | destructive` (`default` renamed to `primary`; `outline` removed — use `secondary`). Button sizes are `large` (default) and `small` (`icon` for icon-only).
60
+
61
+ ### Patch Changes
62
+
63
+ - 2a0ae4c: Show connector catalog logos in the composer Tools picker, matching the Connectors settings page.
64
+ - 2a0ae4c: Align AttachmentCard with assistant-ui's default square thumbnail, filename tooltip, and overlay remove control.
65
+ - fe6a14b: Improve session timelines with sub-agent wait states, grouped point-event markers, clean linear ticks, and readable summary durations.
66
+ - d5b479d: Clamp optional sessions/schedules chrome and unregister `/sessions`, `/schedules`, and `/library/:agentId` when those server ports are omitted, matching the Settings Lego gate.
67
+ - 5d72138: Keep `npx @truefoundry/trueforge` working on native Windows: import Kysely migrations with `pathToFileURL`, and keep sandbox guest paths POSIX. Source development stays Unix/WSL; CI also runs unit and SQLite store tests on Windows.
68
+ - Updated dependencies [a000b47]
69
+ - Updated dependencies [0ec8dc6]
70
+ - Updated dependencies [11865b4]
71
+ - @truefoundry/trueforge-sdk@0.1.4-rc.2
72
+
3
73
  ## 0.3.0-rc.1
4
74
 
5
75
  ### Minor Changes
package/README.md CHANGED
@@ -407,7 +407,7 @@ show the title text (see [Custom layouts](#custom-layouts)).
407
407
 
408
408
  In library modes, picking an agent from Agents switches to a named chat for that agent **and remounts the runtime** so the new agent starts from a clean conversation. Draft chats can be promoted via **Save agent** (`server.saveAgent` on the resolved `AgentUIServer`). **Clear Chat** (thread header) resets the current named or draft session.
409
409
 
410
- Mutable composers expose **Agent Config** for live model parameters, instructions, runtime behavior, per-connector MCP tools, and skills. The compact Tools picker contains only Connectors and Skills. The Save Agent dialog keeps a local editable copy of the same configuration and shares the same selector dialogs; cancelling it leaves the active draft unchanged. Model context and output limits render when the server supplies that optional catalog metadata.
410
+ Mutable composers expose **Agent Config** for live model parameters, instructions, runtime behavior, per-connector MCP tools, and skills. Runtime Config opens in a second right-side drawer. The compact Tools picker contains only Connectors and Skills. The Save Agent drawer only edits the agent name while preserving the active draft configuration; cancelling it discards that local edit. Model context and output limits render when the server supplies that optional catalog metadata.
411
411
 
412
412
  ```tsx
413
413
  {
@@ -446,12 +446,12 @@ Mutable composers expose **Agent Config** for live model parameters, instruction
446
446
 
447
447
  Built-in `layout` values:
448
448
 
449
- | Value | Description |
450
- | --------- | -------------------------------------------------------- |
451
- | `sidebar` | Left session list + main thread (ChatGPT / Claude style) |
452
- | `drawer` | Full-bleed thread; sessions open in a slide-over |
453
- | `dock` | Fixed-width right panel; list XOR thread stack |
454
- | `widget` | Same stack as `dock`, opened from a bottom-right FAB |
449
+ | Value | Description |
450
+ | --------- | ---------------------------------------------------- |
451
+ | `sidebar` | Icon rail + recent session history + active thread |
452
+ | `drawer` | Full-bleed thread; sessions open in a slide-over |
453
+ | `dock` | Fixed-width right panel; list XOR thread stack |
454
+ | `widget` | Same stack as `dock`, opened from a bottom-right FAB |
455
455
 
456
456
  ---
457
457
 
@@ -535,6 +535,7 @@ type TrueForgeServerConfig =
535
535
  apiKey: string;
536
536
  controlPlaneURL: string;
537
537
  gatewayPlaneURL?: string;
538
+ permissions?: PermissionsServer;
538
539
  }
539
540
  | {
540
541
  type: 'trueforge';
@@ -542,6 +543,7 @@ type TrueForgeServerConfig =
542
543
  token?: string;
543
544
  fetch?: typeof fetch;
544
545
  catalog?: CatalogServer;
546
+ permissions?: PermissionsServer;
545
547
  }
546
548
  | AgentUIServer;
547
549
 
@@ -550,6 +552,8 @@ type AgentUIServer = AgentChatServer &
550
552
  catalog?: CatalogServer;
551
553
  sessions?: AgentSessionsServer;
552
554
  metrics?: AgentMetricsServer;
555
+ schedules?: ScheduleServer;
556
+ permissions?: PermissionsServer;
553
557
  };
554
558
  ```
555
559
 
@@ -557,7 +561,18 @@ type AgentUIServer = AgentChatServer &
557
561
  | -------------------- | ------------------------------------------------------------------- |
558
562
  | `AgentChatServer` | Sessions, turns, streaming, draft `AgentSpec` sync |
559
563
  | `AgentBuilderServer` | `getModels` / `getSkills` / `getMcp` / `searchAgents` / `saveAgent` |
564
+ | `catalog` | Settings CRUD (models / connectors / optional skills & sandbox) |
565
+ | `sessions` | Agent details + sessions browser (`/sessions`, `/library/:agentId`) |
566
+ | `schedules` | Schedules page (`/schedules`) |
560
567
  | `AgentMetricsServer` | Agent meter aggregates, chart definitions, and chart data |
568
+ | `PermissionsServer` | Per-resource `USE`, `MANAGE`, and `DELETE` grants |
569
+
570
+ Omit a chrome port such as `catalog` or `schedules` to hide and unregister its routes.
571
+
572
+ When `permissions` is omitted from a custom or TrueFoundry server, actions remain enabled for backward compatibility.
573
+ When provided, denied mutation controls stay visible but disabled with an explanatory tooltip. The built-in
574
+ `type: "trueforge"` server enables checks automatically through the Harness permissions endpoint; an explicit
575
+ `PermissionsServer` overrides that default.
561
576
 
562
577
  **Zero-config TrueFoundry** — see [Getting started](#getting-started). The SDK calls `createTrueFoundryAgentUIServer` for you.
563
578
 
@@ -1,17 +1,17 @@
1
1
  "use client";
2
2
  import {
3
3
  useSlot
4
- } from "./chunk-ZTMKFZQ3.js";
5
- import "./chunk-2XPPBEYF.js";
4
+ } from "./chunk-2O5EJ6QS.js";
5
+ import "./chunk-KR7WYHVF.js";
6
6
  import {
7
7
  Icon
8
- } from "./chunk-XAU7QFG3.js";
9
- import "./chunk-U7KURWW3.js";
8
+ } from "./chunk-Q6TCT7ZJ.js";
9
+ import "./chunk-PT4EENB3.js";
10
10
  import "./chunk-M6MHLVSO.js";
11
- import "./chunk-MPNSO7E6.js";
11
+ import "./chunk-J5BPHEDT.js";
12
12
  import {
13
13
  cn
14
- } from "./chunk-7Z2C2K7F.js";
14
+ } from "./chunk-LXJMINS6.js";
15
15
 
16
16
  // src/atoms/agent-details/AgentCodeSnippets.tsx
17
17
  import { useEffect, useState } from "react";
@@ -48,22 +48,37 @@ function AgentCodeSnippets({ snippets }) {
48
48
  snippet.language
49
49
  )) }),
50
50
  /* @__PURE__ */ jsxs("section", { className: "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-lg border border-border bg-card-bg", children: [
51
- /* @__PURE__ */ jsx("div", { className: "flex h-10 shrink-0 items-end gap-1 border-b border-border px-3", children: [
52
- ["stream", "Stream"],
53
- ["nonStream", "Non-stream"]
54
- ].map(([id, label]) => /* @__PURE__ */ jsx(
55
- "button",
56
- {
57
- type: "button",
58
- className: cn(
59
- "relative h-10 cursor-pointer px-3 text-xs font-medium text-text-secondary",
60
- mode === id && "text-primary-button-bg after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-primary-button-bg"
61
- ),
62
- onClick: () => setMode(id),
63
- children: label
64
- },
65
- id
66
- )) }),
51
+ /* @__PURE__ */ jsxs("div", { className: "flex h-10 shrink-0 items-center justify-between gap-1 border-b border-border px-3", children: [
52
+ /* @__PURE__ */ jsx("div", { className: "flex items-end gap-1", children: [
53
+ ["stream", "Stream"],
54
+ ["nonStream", "Non-stream"]
55
+ ].map(([id, label]) => /* @__PURE__ */ jsx(
56
+ "button",
57
+ {
58
+ type: "button",
59
+ className: cn(
60
+ "relative h-10 cursor-pointer px-3 text-xs font-medium text-text-secondary",
61
+ mode === id && "text-primary-button-bg after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-primary-button-bg"
62
+ ),
63
+ onClick: () => setMode(id),
64
+ children: label
65
+ },
66
+ id
67
+ )) }),
68
+ /* @__PURE__ */ jsxs(
69
+ "a",
70
+ {
71
+ href: "https://trueforge.dev/api/use-agent",
72
+ target: "_blank",
73
+ rel: "noopener noreferrer",
74
+ className: "flex items-center gap-1 text-xs text-text-secondary",
75
+ children: [
76
+ /* @__PURE__ */ jsx("span", { children: "View Docs" }),
77
+ /* @__PURE__ */ jsx(Icon, { name: "external-link", className: "size-3 shrink-0" })
78
+ ]
79
+ }
80
+ )
81
+ ] }),
67
82
  /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: /* @__PURE__ */ jsx(AgentCodeBlock, { code: selected.sampleCode[mode], language: selected.language }) })
68
83
  ] })
69
84
  ] });
@@ -71,4 +86,4 @@ function AgentCodeSnippets({ snippets }) {
71
86
  export {
72
87
  AgentCodeSnippets as default
73
88
  };
74
- //# sourceMappingURL=AgentCodeSnippets-NZOFJE57.js.map
89
+ //# sourceMappingURL=AgentCodeSnippets-N546FNNS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/atoms/agent-details/AgentCodeSnippets.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState, type ComponentType } from 'react';\nimport { Icon } from '../../icons/Icon.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { cn } from '../lib/cn.js';\nimport type { AgentCodeSnippetsProps } from './types.js';\n\ntype SnippetMode = 'stream' | 'nonStream';\n\nexport default function AgentCodeSnippets({ snippets }: AgentCodeSnippetsProps) {\n const AgentCodeBlock = useSlot('AgentCodeBlock');\n const [selectedLanguage, setSelectedLanguage] = useState(snippets[0]?.language);\n const [mode, setMode] = useState<SnippetMode>('stream');\n\n useEffect(() => {\n setSelectedLanguage(snippets[0]?.language);\n setMode('stream');\n }, [snippets]);\n\n const selected = snippets.find(snippet => snippet.language === selectedLanguage) ?? snippets[0];\n\n if (selected === undefined) {\n return (\n <div className=\"flex h-full min-h-64 items-center justify-center px-6 text-sm text-text-secondary\">\n No code samples for this agent.\n </div>\n );\n }\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col gap-3 p-3 md:flex-row\">\n <nav aria-label=\"Code sample languages\" className=\"flex shrink-0 gap-1 overflow-auto md:w-44 md:flex-col\">\n {snippets.map(snippet => (\n <button\n key={snippet.language}\n type=\"button\"\n aria-current={selected.language === snippet.language ? 'page' : undefined}\n className={cn(\n 'flex h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-2.5 text-left text-xs text-text-secondary',\n 'hover:bg-ghost-button-hover hover:text-text-primary',\n selected.language === snippet.language && 'bg-primary-button-bg/10 font-medium text-primary-button-bg',\n )}\n onClick={() => setSelectedLanguage(snippet.language)}\n >\n {snippet.icon ? (\n <img src={snippet.icon} alt=\"\" className=\"size-4 shrink-0 object-contain\" />\n ) : (\n <Icon name=\"code\" className=\"size-4 shrink-0\" />\n )}\n {snippet.labelName}\n </button>\n ))}\n </nav>\n\n <section className=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-lg border border-border bg-card-bg\">\n <div className=\"flex h-10 shrink-0 items-center justify-between gap-1 border-b border-border px-3\">\n <div className=\"flex items-end gap-1\">\n {(\n [\n ['stream', 'Stream'],\n ['nonStream', 'Non-stream'],\n ] satisfies Array<[SnippetMode, string]>\n ).map(([id, label]) => (\n <button\n key={id}\n type=\"button\"\n className={cn(\n 'relative h-10 cursor-pointer px-3 text-xs font-medium text-text-secondary',\n mode === id &&\n 'text-primary-button-bg after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-primary-button-bg',\n )}\n onClick={() => setMode(id)}\n >\n {label}\n </button>\n ))}\n </div>\n <a\n href=\"https://trueforge.dev/api/use-agent\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 text-xs text-text-secondary\"\n >\n <span>View Docs</span>\n <Icon name=\"external-link\" className=\"size-3 shrink-0\" />\n </a>\n </div>\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <AgentCodeBlock code={selected.sampleCode[mode]} language={selected.language} />\n </div>\n </section>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentCodeSnippets: ComponentType<AgentCodeSnippetsProps>;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAEA,SAAS,WAAW,gBAAoC;AAsBlD,cAUI,YAVJ;AAdS,SAAR,kBAAmC,EAAE,SAAS,GAA2B;AAC9E,QAAM,iBAAiB,QAAQ,gBAAgB;AAC/C,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,SAAS,CAAC,GAAG,QAAQ;AAC9E,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,QAAQ;AAEtD,YAAU,MAAM;AACd,wBAAoB,SAAS,CAAC,GAAG,QAAQ;AACzC,YAAQ,QAAQ;AAAA,EAClB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,WAAW,SAAS,KAAK,aAAW,QAAQ,aAAa,gBAAgB,KAAK,SAAS,CAAC;AAE9F,MAAI,aAAa,QAAW;AAC1B,WACE,oBAAC,SAAI,WAAU,qFAAoF,6CAEnG;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAU,sDACb;AAAA,wBAAC,SAAI,cAAW,yBAAwB,WAAU,yDAC/C,mBAAS,IAAI,aACZ;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,gBAAc,SAAS,aAAa,QAAQ,WAAW,SAAS;AAAA,QAChE,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,SAAS,aAAa,QAAQ,YAAY;AAAA,QAC5C;AAAA,QACA,SAAS,MAAM,oBAAoB,QAAQ,QAAQ;AAAA,QAElD;AAAA,kBAAQ,OACP,oBAAC,SAAI,KAAK,QAAQ,MAAM,KAAI,IAAG,WAAU,kCAAiC,IAE1E,oBAAC,QAAK,MAAK,QAAO,WAAU,mBAAkB;AAAA,UAE/C,QAAQ;AAAA;AAAA;AAAA,MAfJ,QAAQ;AAAA,IAgBf,CACD,GACH;AAAA,IAEA,qBAAC,aAAQ,WAAU,mGACjB;AAAA,2BAAC,SAAI,WAAU,qFACb;AAAA,4BAAC,SAAI,WAAU,wBAEX;AAAA,UACE,CAAC,UAAU,QAAQ;AAAA,UACnB,CAAC,aAAa,YAAY;AAAA,QAC5B,EACA,IAAI,CAAC,CAAC,IAAI,KAAK,MACf;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,cACA,SAAS,MACP;AAAA,YACJ;AAAA,YACA,SAAS,MAAM,QAAQ,EAAE;AAAA,YAExB;AAAA;AAAA,UATI;AAAA,QAUP,CACD,GACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,WAAU;AAAA,YAEV;AAAA,kCAAC,UAAK,uBAAS;AAAA,cACf,oBAAC,QAAK,MAAK,iBAAgB,WAAU,mBAAkB;AAAA;AAAA;AAAA,QACzD;AAAA,SACF;AAAA,MACA,oBAAC,SAAI,WAAU,gCACb,8BAAC,kBAAe,MAAM,SAAS,WAAW,IAAI,GAAG,UAAU,SAAS,UAAU,GAChF;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import {
3
+ AgentMetricChart
4
+ } from "./chunk-XLFOXQKZ.js";
5
+ import "./chunk-2O5EJ6QS.js";
6
+ import "./chunk-KR7WYHVF.js";
7
+ import "./chunk-Q6TCT7ZJ.js";
8
+ import "./chunk-PT4EENB3.js";
9
+ import "./chunk-M6MHLVSO.js";
10
+ import "./chunk-J5BPHEDT.js";
11
+ import "./chunk-LXJMINS6.js";
12
+ export {
13
+ AgentMetricChart
14
+ };
15
+ //# sourceMappingURL=AgentMetricChart-YWJYVYYA.js.map
@@ -1,17 +1,17 @@
1
1
  "use client";
2
2
  import {
3
3
  useSlot
4
- } from "./chunk-ZTMKFZQ3.js";
5
- import "./chunk-2XPPBEYF.js";
4
+ } from "./chunk-2O5EJ6QS.js";
5
+ import "./chunk-KR7WYHVF.js";
6
6
  import {
7
7
  Icon
8
- } from "./chunk-XAU7QFG3.js";
9
- import "./chunk-U7KURWW3.js";
8
+ } from "./chunk-Q6TCT7ZJ.js";
9
+ import "./chunk-PT4EENB3.js";
10
10
  import "./chunk-M6MHLVSO.js";
11
- import "./chunk-MPNSO7E6.js";
11
+ import "./chunk-J5BPHEDT.js";
12
12
  import {
13
13
  cn
14
- } from "./chunk-7Z2C2K7F.js";
14
+ } from "./chunk-LXJMINS6.js";
15
15
 
16
16
  // src/atoms/agent-details/AgentOverview.tsx
17
17
  import { useState } from "react";
@@ -164,4 +164,4 @@ function AgentOverview({ detail }) {
164
164
  export {
165
165
  AgentOverview as default
166
166
  };
167
- //# sourceMappingURL=AgentOverview-EEBHJC32.js.map
167
+ //# sourceMappingURL=AgentOverview-VF74XC7I.js.map
@@ -1,22 +1,25 @@
1
1
  "use client";
2
2
  import {
3
3
  SESSION_EVENT_TYPES,
4
- useSlot
5
- } from "./chunk-ZTMKFZQ3.js";
6
- import "./chunk-2XPPBEYF.js";
7
- import "./chunk-XAU7QFG3.js";
8
- import "./chunk-U7KURWW3.js";
4
+ getSessionEventColor,
5
+ useSlot,
6
+ useThemeMode
7
+ } from "./chunk-2O5EJ6QS.js";
8
+ import "./chunk-KR7WYHVF.js";
9
+ import "./chunk-Q6TCT7ZJ.js";
10
+ import "./chunk-PT4EENB3.js";
9
11
  import "./chunk-M6MHLVSO.js";
10
- import "./chunk-MPNSO7E6.js";
12
+ import "./chunk-J5BPHEDT.js";
11
13
  import {
12
14
  cn
13
- } from "./chunk-7Z2C2K7F.js";
15
+ } from "./chunk-LXJMINS6.js";
14
16
 
15
17
  // src/atoms/agent-details/AgentSessionEventTimeline.tsx
16
18
  import { useCallback, useMemo, useState } from "react";
17
19
  import { jsx, jsxs } from "react/jsx-runtime";
18
20
  function AgentSessionEventTimeline({ turns, segments, onSelectTurn }) {
19
21
  const AgentSessionEventTimelineChart = useSlot("AgentSessionEventTimelineChart");
22
+ const isDark = useThemeMode() === "dark";
20
23
  const [hiddenTypes, setHiddenTypes] = useState(() => /* @__PURE__ */ new Set());
21
24
  const availableEventTypes = useMemo(() => {
22
25
  const available = new Set(segments.map((segment) => segment.type));
@@ -52,7 +55,13 @@ function AgentSessionEventTimeline({ turns, segments, onSelectTurn }) {
52
55
  ),
53
56
  onClick: () => handleToggleType(eventType.id),
54
57
  children: [
55
- /* @__PURE__ */ jsx("span", { className: "size-2 rounded-sm", style: { backgroundColor: eventType.color } }),
58
+ /* @__PURE__ */ jsx(
59
+ "span",
60
+ {
61
+ className: "size-2 rounded-sm",
62
+ style: { backgroundColor: getSessionEventColor(eventType.id, isDark) }
63
+ }
64
+ ),
56
65
  eventType.label
57
66
  ]
58
67
  },
@@ -62,7 +71,7 @@ function AgentSessionEventTimeline({ turns, segments, onSelectTurn }) {
62
71
  ]
63
72
  }
64
73
  ),
65
- /* @__PURE__ */ jsx("div", { className: "w-full py-2", children: /* @__PURE__ */ jsx(
74
+ /* @__PURE__ */ jsx("div", { className: "w-full p-2", children: /* @__PURE__ */ jsx(
66
75
  AgentSessionEventTimelineChart,
67
76
  {
68
77
  turns,
@@ -76,4 +85,4 @@ function AgentSessionEventTimeline({ turns, segments, onSelectTurn }) {
76
85
  export {
77
86
  AgentSessionEventTimeline
78
87
  };
79
- //# sourceMappingURL=AgentSessionEventTimeline-26Z6IB3B.js.map
88
+ //# sourceMappingURL=AgentSessionEventTimeline-RFR6LQMY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/atoms/agent-details/AgentSessionEventTimeline.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo, useState, type ComponentType } from 'react';\n\nimport { useSlot, useThemeMode } from '../../theme/SlotsProvider.js';\nimport { getSessionEventColor, SESSION_EVENT_TYPES, type SessionEventType } from '../../utils/sessionEventTimeline.js';\nimport { cn } from '../lib/cn.js';\nimport type { AgentSessionEventTimelineProps } from './types.js';\n\nexport function AgentSessionEventTimeline({ turns, segments, onSelectTurn }: AgentSessionEventTimelineProps) {\n const AgentSessionEventTimelineChart = useSlot('AgentSessionEventTimelineChart');\n const isDark = useThemeMode() === 'dark';\n const [hiddenTypes, setHiddenTypes] = useState<Set<SessionEventType>>(() => new Set());\n\n const availableEventTypes = useMemo(() => {\n const available = new Set(segments.map(segment => segment.type));\n return SESSION_EVENT_TYPES.filter(eventType => available.has(eventType.id));\n }, [segments]);\n\n const handleToggleType = useCallback((type: SessionEventType) => {\n setHiddenTypes(previous => {\n const next = new Set(previous);\n if (next.has(type)) next.delete(type);\n else next.add(type);\n return next;\n });\n }, []);\n\n if (segments.length === 0) return null;\n\n return (\n <div className=\"w-full\" data-slot=\"agent-session-event-timeline\">\n <div\n className=\"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2\"\n data-slot=\"agent-session-event-types\"\n >\n <span className=\"text-xs font-medium uppercase text-text-secondary\">Event types</span>\n <div className=\"flex flex-wrap items-center gap-1\">\n {availableEventTypes.map(eventType => {\n const isVisible = !hiddenTypes.has(eventType.id);\n return (\n <button\n key={eventType.id}\n type=\"button\"\n aria-pressed={isVisible}\n className={cn(\n 'flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-xs font-medium',\n isVisible ? 'border-border text-text-primary' : 'border-transparent text-text-secondary opacity-80',\n )}\n onClick={() => handleToggleType(eventType.id)}\n >\n <span\n className=\"size-2 rounded-sm\"\n style={{ backgroundColor: getSessionEventColor(eventType.id, isDark) }}\n />\n {eventType.label}\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"w-full p-2\">\n <AgentSessionEventTimelineChart\n turns={turns}\n segments={segments}\n hiddenTypes={hiddenTypes}\n onSelectTurn={onSelectTurn}\n />\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionEventTimeline: ComponentType<AgentSessionEventTimelineProps>;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,SAAS,aAAa,SAAS,gBAAoC;AAkC3D,cAKM,YALN;AA3BD,SAAS,0BAA0B,EAAE,OAAO,UAAU,aAAa,GAAmC;AAC3G,QAAM,iCAAiC,QAAQ,gCAAgC;AAC/E,QAAM,SAAS,aAAa,MAAM;AAClC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAgC,MAAM,oBAAI,IAAI,CAAC;AAErF,QAAM,sBAAsB,QAAQ,MAAM;AACxC,UAAM,YAAY,IAAI,IAAI,SAAS,IAAI,aAAW,QAAQ,IAAI,CAAC;AAC/D,WAAO,oBAAoB,OAAO,eAAa,UAAU,IAAI,UAAU,EAAE,CAAC;AAAA,EAC5E,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,mBAAmB,YAAY,CAAC,SAA2B;AAC/D,mBAAe,cAAY;AACzB,YAAM,OAAO,IAAI,IAAI,QAAQ;AAC7B,UAAI,KAAK,IAAI,IAAI,EAAG,MAAK,OAAO,IAAI;AAAA,UAC/B,MAAK,IAAI,IAAI;AAClB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,MAAI,SAAS,WAAW,EAAG,QAAO;AAElC,SACE,qBAAC,SAAI,WAAU,UAAS,aAAU,gCAChC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,aAAU;AAAA,QAEV;AAAA,8BAAC,UAAK,WAAU,qDAAoD,yBAAW;AAAA,UAC/E,oBAAC,SAAI,WAAU,qCACZ,8BAAoB,IAAI,eAAa;AACpC,kBAAM,YAAY,CAAC,YAAY,IAAI,UAAU,EAAE;AAC/C,mBACE;AAAA,cAAC;AAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,gBAAc;AAAA,gBACd,WAAW;AAAA,kBACT;AAAA,kBACA,YAAY,oCAAoC;AAAA,gBAClD;AAAA,gBACA,SAAS,MAAM,iBAAiB,UAAU,EAAE;AAAA,gBAE5C;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,iBAAiB,qBAAqB,UAAU,IAAI,MAAM,EAAE;AAAA;AAAA,kBACvE;AAAA,kBACC,UAAU;AAAA;AAAA;AAAA,cAbN,UAAU;AAAA,YAcjB;AAAA,UAEJ,CAAC,GACH;AAAA;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,SAAI,WAAU,cACb;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GACF;AAAA,KACF;AAEJ;","names":[]}