@truefoundry/trueforge-ui 0.3.0-rc.0 → 0.3.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +191 -0
- package/README.md +35 -12
- package/dist/AgentCodeSnippets-RJBB4DDE.js +89 -0
- package/dist/AgentCodeSnippets-RJBB4DDE.js.map +1 -0
- package/dist/AgentMetricChart-UPGSJ2WP.js +15 -0
- package/dist/AgentOverview-U5WIQXZN.js +169 -0
- package/dist/AgentOverview-U5WIQXZN.js.map +1 -0
- package/dist/AgentSessionEventTimeline-GRGIQTRE.js +88 -0
- package/dist/AgentSessionEventTimeline-GRGIQTRE.js.map +1 -0
- package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js +591 -0
- package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js.map +1 -0
- package/dist/AgentSessions-5OTF2BUW.js +323 -0
- package/dist/AgentSessions-5OTF2BUW.js.map +1 -0
- package/dist/{ConnectorSettings-FXQ5B7TN.js → ConnectorSettings-HDKGLDCY.js} +163 -125
- package/dist/ConnectorSettings-HDKGLDCY.js.map +1 -0
- package/dist/{DockLayout-LBNQJZNF.js → DockLayout-D2FPQCAL.js} +11 -10
- package/dist/{DockLayout-LBNQJZNF.js.map → DockLayout-D2FPQCAL.js.map} +1 -1
- package/dist/DrawerLayout-HUV7RAWL.js +186 -0
- package/dist/DrawerLayout-HUV7RAWL.js.map +1 -0
- package/dist/{ModelSettings-4L4LOQJA.js → ModelSettings-VNQ7HPKH.js} +23 -27
- package/dist/ModelSettings-VNQ7HPKH.js.map +1 -0
- package/dist/OpenUiFenceBlock-KPZFLUSC.js +9 -0
- package/dist/OpenUiFenceBlock-KPZFLUSC.js.map +1 -0
- package/dist/{SandboxSettings-Z4ZG6ZX4.js → SandboxSettings-ZLXGMFBF.js} +18 -20
- package/dist/SandboxSettings-ZLXGMFBF.js.map +1 -0
- package/dist/SchedulesPage-QKYI2Z3A.js +15 -0
- package/dist/SchedulesPage-QKYI2Z3A.js.map +1 -0
- package/dist/{SettingsBuilder-WF7ZWKQW.js → SettingsBuilder-RVVYXOJW.js} +27 -23
- package/dist/SettingsBuilder-RVVYXOJW.js.map +1 -0
- package/dist/ShellRouteSync-SJXFKUAJ.js +390 -0
- package/dist/ShellRouteSync-SJXFKUAJ.js.map +1 -0
- package/dist/SidebarLayout-KYA76FQ7.js +330 -0
- package/dist/SidebarLayout-KYA76FQ7.js.map +1 -0
- package/dist/{SkillSettings-3EPPC3IT.js → SkillSettings-7OHT7FPI.js} +25 -21
- package/dist/SkillSettings-7OHT7FPI.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-NZ4FGPE4.js → TrueForgeUIWithRouter-LKG4XLW6.js} +14 -10
- package/dist/{TrueForgeUIWithRouter-NZ4FGPE4.js.map → TrueForgeUIWithRouter-LKG4XLW6.js.map} +1 -1
- package/dist/{WidgetLayout-3QZ357FL.js → WidgetLayout-W2RGGOQ3.js} +17 -13
- package/dist/WidgetLayout-W2RGGOQ3.js.map +1 -0
- package/dist/chunk-2GIZY3JJ.js +1062 -0
- package/dist/chunk-2GIZY3JJ.js.map +1 -0
- package/dist/chunk-2QTH6JHX.js +217 -0
- package/dist/chunk-2QTH6JHX.js.map +1 -0
- package/dist/{chunk-FJ5RSSMA.js → chunk-3ZW74FHC.js} +118 -164
- package/dist/chunk-3ZW74FHC.js.map +1 -0
- package/dist/chunk-67ZO7Z2W.js +184 -0
- package/dist/chunk-67ZO7Z2W.js.map +1 -0
- package/dist/{chunk-CFLVPV5M.js → chunk-7AAO4UDQ.js} +8 -2
- package/dist/chunk-7AAO4UDQ.js.map +1 -0
- package/dist/{chunk-B52K63AW.js → chunk-CG75X77Q.js} +2 -2
- package/dist/chunk-DJUFS2BW.js +27 -0
- package/dist/chunk-DJUFS2BW.js.map +1 -0
- package/dist/chunk-DPPOEFBD.js +517 -0
- package/dist/chunk-DPPOEFBD.js.map +1 -0
- package/dist/chunk-EPAL2HD5.js +1629 -0
- package/dist/chunk-EPAL2HD5.js.map +1 -0
- package/dist/chunk-GG23N2GW.js +15018 -0
- package/dist/chunk-GG23N2GW.js.map +1 -0
- package/dist/chunk-JCL3Q7RW.js +587 -0
- package/dist/chunk-JCL3Q7RW.js.map +1 -0
- package/dist/chunk-JKEBMGLH.js +682 -0
- package/dist/chunk-JKEBMGLH.js.map +1 -0
- package/dist/chunk-KSGNKS2D.js +296 -0
- package/dist/chunk-KSGNKS2D.js.map +1 -0
- package/dist/{chunk-WREC7D54.js → chunk-PCI6VMB5.js} +268 -48
- package/dist/chunk-PCI6VMB5.js.map +1 -0
- package/dist/chunk-PQ7VWBQQ.js +121 -0
- package/dist/chunk-PQ7VWBQQ.js.map +1 -0
- package/dist/chunk-RDXBMTP5.js +32 -0
- package/dist/chunk-RDXBMTP5.js.map +1 -0
- package/dist/chunk-T6QQV5LK.js +238 -0
- package/dist/chunk-T6QQV5LK.js.map +1 -0
- package/dist/chunk-Y6S4OVVQ.js +16 -0
- package/dist/chunk-Y6S4OVVQ.js.map +1 -0
- package/dist/{createTrueFoundryServer-B72bU-J7.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +18 -4
- package/dist/index.d.ts +1287 -46
- package/dist/index.js +266 -63
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +590 -11
- package/dist/plugins/trueforge-agent-server-adapter/index.js +607 -204
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +10 -8
- package/dist/ConnectorSettings-FXQ5B7TN.js.map +0 -1
- package/dist/DrawerLayout-Q6UK4VMI.js +0 -159
- package/dist/DrawerLayout-Q6UK4VMI.js.map +0 -1
- package/dist/ModelSettings-4L4LOQJA.js.map +0 -1
- package/dist/OpenUiFenceBlock-6UIIAVBX.js +0 -9
- package/dist/SandboxSettings-Z4ZG6ZX4.js.map +0 -1
- package/dist/SettingsBuilder-WF7ZWKQW.js.map +0 -1
- package/dist/ShellRouteSync-T4WLY57Q.js +0 -172
- package/dist/ShellRouteSync-T4WLY57Q.js.map +0 -1
- package/dist/SidebarLayout-3WZ3CVON.js +0 -256
- package/dist/SidebarLayout-3WZ3CVON.js.map +0 -1
- package/dist/SkillSettings-3EPPC3IT.js.map +0 -1
- package/dist/WidgetLayout-3QZ357FL.js.map +0 -1
- package/dist/chunk-36KOSC2J.js +0 -567
- package/dist/chunk-36KOSC2J.js.map +0 -1
- package/dist/chunk-3S6KHO7H.js +0 -2121
- package/dist/chunk-3S6KHO7H.js.map +0 -1
- package/dist/chunk-7L63OK3O.js +0 -91
- package/dist/chunk-7L63OK3O.js.map +0 -1
- package/dist/chunk-CFLVPV5M.js.map +0 -1
- package/dist/chunk-FJ5RSSMA.js.map +0 -1
- package/dist/chunk-OSV3HI5M.js +0 -6891
- package/dist/chunk-OSV3HI5M.js.map +0 -1
- package/dist/chunk-WQULF5AT.js +0 -460
- package/dist/chunk-WQULF5AT.js.map +0 -1
- package/dist/chunk-WREC7D54.js.map +0 -1
- package/dist/chunk-YIWUG6MC.js +0 -101
- package/dist/chunk-YIWUG6MC.js.map +0 -1
- package/dist/chunk-ZXOADNF3.js +0 -75
- package/dist/chunk-ZXOADNF3.js.map +0 -1
- /package/dist/{OpenUiFenceBlock-6UIIAVBX.js.map → AgentMetricChart-UPGSJ2WP.js.map} +0 -0
- /package/dist/{chunk-B52K63AW.js.map → chunk-CG75X77Q.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,196 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0-rc.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 584e815: Gate Save Agent (create) on tenant CREATE from list-permissions, keep Update Agent on agent MANAGE, unwrap `{ type, permissions }`, and bump `@truefoundry/assistant-ui-runtime` to `0.1.39`.
|
|
8
|
+
|
|
9
|
+
## 0.3.0-rc.9
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- fd1bf7f: Bump `@truefoundry/assistant-ui-runtime` to `0.1.38` for assistant completion timestamps and keep-alive turn streams on session switch.
|
|
14
|
+
- 079f832: Show an optional tooltip when sandbox artifact downloads are read-only.
|
|
15
|
+
- Updated dependencies [648273b]
|
|
16
|
+
- Updated dependencies [134dcb9]
|
|
17
|
+
- @truefoundry/trueforge-sdk@0.2.0-rc.8
|
|
18
|
+
|
|
19
|
+
## 0.3.0-rc.8
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- Updated dependencies [648273b]
|
|
24
|
+
- @truefoundry/trueforge-sdk@0.2.0-rc.7
|
|
25
|
+
|
|
26
|
+
## 0.3.0-rc.7
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- 531f0ce: Keep close-on-click dropdown menus and bottom sheets open when a click or drag lands on their own scrollbar, so scrolling a long menu no longer dismisses it before a choice is made.
|
|
31
|
+
- 531f0ce: Cap the skill version menu height and scroll it, so skills with many versions no longer run off screen. While it is open, scrolling is confined to the menu.
|
|
32
|
+
- Updated dependencies [648273b]
|
|
33
|
+
- @truefoundry/trueforge-sdk@0.2.0-rc.6
|
|
34
|
+
|
|
35
|
+
## 0.3.0-rc.6
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- 8c31eae: Round-trip agent description through save/load and show it in the library and agent details.
|
|
40
|
+
- d7136a1: Avatar fallbacks use a light primary-button gradient in light mode, a solid primary gradient in dark mode, and show a single initial character.
|
|
41
|
+
- d7136a1: Assistant message loading indicator uses ThinkingOrb with left-to-right shimmering Working... text.
|
|
42
|
+
- b316430: Slide SideDrawer/BottomSheet and add a light fade+scale enter on dropdowns and popup cards.
|
|
43
|
+
- dc2151f: Paginate `GET /api/v1/agents` with `limit` / `page_token` and a `pagination` envelope; optional `agent_name` filters by case-insensitive substring. Agents library uses rows-per-page and prev/next against the token-paginated API. Schedule create and the schedules listing agent filter use a searchable agent combobox backed by the same filtered list API.
|
|
44
|
+
- d7136a1: Flip PopoverSelect menus when the preferred side lacks viewport room (e.g. table rows-per-page).
|
|
45
|
+
- 04460fb: Prevent the schedule search field from shrinking and clipping its placeholder.
|
|
46
|
+
- fa0730b: Reduce the agent code snippet font size to match its surrounding controls.
|
|
47
|
+
- d7136a1: Stop draining the full agents catalog on Schedules mount; load agents only when the filter opens (infinite scroll).
|
|
48
|
+
- d7136a1: Settings sidebar uses a subtle primary tint for the selected section instead of a solid fill.
|
|
49
|
+
- Updated dependencies [648273b]
|
|
50
|
+
- Updated dependencies [9501536]
|
|
51
|
+
- Updated dependencies [dc2151f]
|
|
52
|
+
- @truefoundry/trueforge-sdk@0.2.0-rc.5
|
|
53
|
+
|
|
54
|
+
## 0.3.0-rc.5
|
|
55
|
+
|
|
56
|
+
### Patch Changes
|
|
57
|
+
|
|
58
|
+
- 4e72afc: Announce boot loading with a light-themed orb for contrast outside ThemeProvider.
|
|
59
|
+
- ea86853: Move the agent metrics time range filter into the active Metrics tab row.
|
|
60
|
+
- 98ab384: Preserve the active agent draft when returning to Build Agent from another page.
|
|
61
|
+
- 4e72afc: Use an animated thinking orb for application boot and server initialization.
|
|
62
|
+
|
|
63
|
+
## 0.3.0-rc.4
|
|
64
|
+
|
|
65
|
+
### Patch Changes
|
|
66
|
+
|
|
67
|
+
- 629b6e9: Paginate the Agent Sessions list on scroll instead of a "Load more" button, showing a skeleton row while the next page loads.
|
|
68
|
+
- 629b6e9: Fix Agents library table scrolling when rows exceed the viewport
|
|
69
|
+
- 629b6e9: Show Created by (avatar + name) on Agents and Schedules tables when creator info is present.
|
|
70
|
+
- 629b6e9: Portal PopoverSelect menus so table page-size and other selects are not clipped by overflow parents.
|
|
71
|
+
- ef278dd: Stop highlighting New Chat while trying a named agent, and clear the Try Agent URL and history filter when starting a new chat.
|
|
72
|
+
- ceeb56f: Show turn and duration statistics alongside the featured agent metric cards.
|
|
73
|
+
- Updated dependencies [648273b]
|
|
74
|
+
- @truefoundry/trueforge-sdk@0.2.0-rc.4
|
|
75
|
+
|
|
76
|
+
## 0.3.0-rc.3
|
|
77
|
+
|
|
78
|
+
### Minor Changes
|
|
79
|
+
|
|
80
|
+
- 1d31116: Open agent model settings inline and support typed custom model parameters.
|
|
81
|
+
- 74eae6c: Remove pagination from list MCP servers across the API, SDK, and UI; return and search the complete configured MCP catalog client-side.
|
|
82
|
+
- 12b02ff: Open Runtime Config in a right-side drawer and label scheduled sessions consistently.
|
|
83
|
+
- 7e25f68: Open Save Agent in a right-side drawer with only the agent name while preserving configuration from Agent Config.
|
|
84
|
+
- f8b5eeb: Add optional resource permissions and gate agent, schedule, and session mutations.
|
|
85
|
+
|
|
86
|
+
### Patch Changes
|
|
87
|
+
|
|
88
|
+
- 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`.
|
|
89
|
+
- 26a9b80: Add an agent-scoped Schedules tab and route library schedule actions into it.
|
|
90
|
+
- 1b8a3f7: Add documentation links to the code snippets view and shell actions.
|
|
91
|
+
- 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.
|
|
92
|
+
- 26a9b80: Allow sending user messages that contain attachments without text.
|
|
93
|
+
- 26a9b80: Add an empty state and Build Agent action to the schedule agent picker.
|
|
94
|
+
- 4c522e2: Bump `@truefoundry/assistant-ui-runtime` to `0.1.30`.
|
|
95
|
+
- 4c522e2: Bump `@truefoundry/assistant-ui-runtime` to `0.1.31`.
|
|
96
|
+
- d719155: Keep composer catalogs cached when starting a new chat.
|
|
97
|
+
- c0359ca: Strip a trailing slash from the `base_url` passed to agent code-snippets.
|
|
98
|
+
- 57f1fc2: Improve compact agent building with model configuration bottom sheets, provider-first model selection, and a contextual composer actions menu.
|
|
99
|
+
- e3973a5: Show the selected connector and skill count beside the composer tools icon.
|
|
100
|
+
- 26a9b80: Hide model selection in the Build Agent composer and correct concurrent sub-agent timeline bars.
|
|
101
|
+
- 26a9b80: Require direct switch clicks in the Runtime Config sidebar.
|
|
102
|
+
- 1ec19f0: Replace API key replacement with connector configuration editing from the connector list and details view.
|
|
103
|
+
- b482cdd: Show the four primary agent metrics in a compact summary-card layout.
|
|
104
|
+
- b32d2be: Filter chat history to sessions created by the current user, and bump `@truefoundry/assistant-ui-runtime` to `0.1.34`.
|
|
105
|
+
- a9430bd: Accept optional `base_url` on agent code-snippets (FE public host); fall back to request origin + `PUBLIC_BASE_URL` path.
|
|
106
|
+
- 54e4ec4: Keep Settings hidden until the server explicitly enables it.
|
|
107
|
+
- 4c522e2: Hide session cost metrics when cost data is unavailable.
|
|
108
|
+
- 4e7b67a: Check live per-user MCP authentication before loading tools in the agent builder.
|
|
109
|
+
- d2fdfc9: Section MCP tools in the Build Agent selector by read-only, others, and destructive annotations, with a read-only enable-all toggle.
|
|
110
|
+
- 26a9b80: Show agent names without an icon in the Agents table.
|
|
111
|
+
- 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.
|
|
112
|
+
- 2284d3b: Polish the MCP tool selector controls, loading state, and API error messages.
|
|
113
|
+
- e3973a5: Group schedule recurrence controls and display the cadence in an attached summary footer.
|
|
114
|
+
- f2ca338: Show active/paused schedule counts in the Agents library, pin selected MCPs when reopening the tools modal, and align paused schedule badge colors.
|
|
115
|
+
- 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.
|
|
116
|
+
- 26a9b80: Show weekly schedule days before the time controls.
|
|
117
|
+
- 1b8a3f7: Match the Build Agent configuration panel width to the agent playground and identify sessions created by schedule runs.
|
|
118
|
+
- adaf532: Widen the sidebar rail and its nav buttons so labels like "Build Agent" have more breathing room.
|
|
119
|
+
- Updated dependencies [648273b]
|
|
120
|
+
- Updated dependencies [648273b]
|
|
121
|
+
- Updated dependencies [648273b]
|
|
122
|
+
- Updated dependencies [74eae6c]
|
|
123
|
+
- Updated dependencies [44f9cbe]
|
|
124
|
+
- @truefoundry/trueforge-sdk@0.2.0-rc.3
|
|
125
|
+
|
|
126
|
+
## 0.3.0-rc.2
|
|
127
|
+
|
|
128
|
+
### Minor Changes
|
|
129
|
+
|
|
130
|
+
- 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).
|
|
131
|
+
|
|
132
|
+
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).
|
|
133
|
+
|
|
134
|
+
### Patch Changes
|
|
135
|
+
|
|
136
|
+
- 2a0ae4c: Show connector catalog logos in the composer Tools picker, matching the Connectors settings page.
|
|
137
|
+
- 2a0ae4c: Align AttachmentCard with assistant-ui's default square thumbnail, filename tooltip, and overlay remove control.
|
|
138
|
+
- fe6a14b: Improve session timelines with sub-agent wait states, grouped point-event markers, clean linear ticks, and readable summary durations.
|
|
139
|
+
- d5b479d: Clamp optional sessions/schedules chrome and unregister `/sessions`, `/schedules`, and `/library/:agentId` when those server ports are omitted, matching the Settings Lego gate.
|
|
140
|
+
- 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.
|
|
141
|
+
- Updated dependencies [a000b47]
|
|
142
|
+
- Updated dependencies [0ec8dc6]
|
|
143
|
+
- Updated dependencies [11865b4]
|
|
144
|
+
- @truefoundry/trueforge-sdk@0.1.4-rc.2
|
|
145
|
+
|
|
146
|
+
## 0.3.0-rc.1
|
|
147
|
+
|
|
148
|
+
### Minor Changes
|
|
149
|
+
|
|
150
|
+
- d269b01: Add a live advanced agent configuration drawer with shared model, runtime, MCP tool, skill, and Save Agent editors.
|
|
151
|
+
- e74e953: Keep agent configuration visible on the left in full-width builder layouts, add a responsive instructions and initial-messages drawer with explicit save, make mobile config overlays closable, save the current instruction draft, align builder chrome, and preserve open widgets across chat runtime changes.
|
|
152
|
+
- a189482: Add routed agent detail pages with lazy Overview, Sessions, and Use In Code tabs backed by the optional AgentSessionsServer port and built-in TrueForge adapter.
|
|
153
|
+
- 8491843: Add a slot-driven agent Metrics tab with aggregate cards, time-range filtering, and Harness-backed line charts.
|
|
154
|
+
- a189482: Add the agent library Sessions tab and an all-user Sessions sidebar page (including drafts) with agent and time filters, shareable query params, and the same two-pane timeline. Library agent details keep the active tab in `?tab=` so opening an agent lands on Overview.
|
|
155
|
+
- bc11131: MCP selectors (composer + agent config) infinite-scroll through `listMcp` pages via DraftCatalogProvider.
|
|
156
|
+
- 860e322: Split New Chat vs New Agent: simple chat keeps the Connectors/Skills picker; New Agent keeps Agent Config + Save Agent. Session metadata `is_create_agent` drives resume from the sessions browser.
|
|
157
|
+
- 0cc59f8: Wire schedule test runs and show last five run status chips on the schedules table. Bump `@truefoundry/assistant-ui-runtime` to `0.1.25`.
|
|
158
|
+
- 0cc59f8: Add global Schedules page at `/schedules` with listing, popover-based filters, and create/edit drawer wired to the schedule API. New schedules save as paused, open a Test Schedule review with MCP connect status, and support Activate Anyway. List schedules uses server token pagination and multi-agent filters. Agents shows a Schedules count column (warning when any are paused) loaded via a batched list for on-screen agents. Add Table primitives with client-side and token pagination plus portal DropdownMenu so row actions are not clipped by overflow. Export a reusable popover select with single- and multi-select modes.
|
|
159
|
+
- 788636d: Sidebar layout is a permanent icon+label nav rail (no expand/collapse). Recent chats are hidden from the sidebar and mobile drawer; the drawer shows nav actions only.
|
|
160
|
+
- 8f1a2dc: Add a TrueFoundry-managed model registry. When `TRUEFOUNDRY_SERVICEFOUNDRY_SERVER_URL` is set, models are listed from the TrueFoundry ServiceFoundry server and turns are routed through the tenant's default AI Gateway with the caller's token. Mutually exclusive with OIDC. Supports internal mutual TLS to the ServiceFoundry server via `TRUEFOUNDRY_MTLS_ENABLED`/`TRUEFOUNDRY_MTLS_CERTS_DIR`.
|
|
161
|
+
|
|
162
|
+
### Patch Changes
|
|
163
|
+
|
|
164
|
+
- 347a7e7: Refresh composer and composer-trigger styling: 0.75rem composer corners with a light-theme primary-token gradient hairline (faded top → solid bottom) and a neutral hairline in dark, an icon-only tools trigger in place of the "Tools" caption and count badge, the shared `agent-2` glyph on the agents-library trigger, and squared-off chrome-action geometry on the save-agent trigger. Also fixes `agent-2.svg` to use `currentColor` so it is legible in dark mode.
|
|
165
|
+
- a189482: Load agent Use In Code snippets through `client.internal.agents.getCodeSnippets` instead of a raw `client.fetch`.
|
|
166
|
+
- c4ee138: Agent list and details overflow menu: Edit, Clone (`{name}-copy` via saveAgent), Manage Schedules, and Delete (wired through harness `deleteAgent`).
|
|
167
|
+
- c4ee138: AgentSessions list pane uses a quieter surface, and the resize grip stays gray until hover, press, or focus.
|
|
168
|
+
- c4ee138: Agent Code (`SyntaxHighlighter` / `AgentCodeBlock`) copy control uses the bordered secondary button, and a trailing source newline no longer paints an empty last line while Copy still keeps the exact source.
|
|
169
|
+
- c4ee138: Agents, Sessions, and Schedules empty states use a shared centered empty-box screen with title and supporting copy.
|
|
170
|
+
- 0cc59f8: Use Google Sans as the default `trueforge` theme font and load it from Google Fonts when styles are injected.
|
|
171
|
+
- 64ca089: Hide Clear chat while the thread is fresh (New Chat, New Agent, and Try Agent) since there is nothing to clear.
|
|
172
|
+
- 64ca089: Add a book-icon preload toggle and dashed add button to Agent Config MCP server pills.
|
|
173
|
+
- d269b01: Improve MCP and skill selectors with consistent search sizing, explicit MCP selection controls, grouped tool summaries, and removable MCP chips.
|
|
174
|
+
- 64ca089: Revamp the MCP tools selector modal with focus rows, connect empty state, and grouped selected-tools summary.
|
|
175
|
+
- bc11131: New Chat enables sandbox on the live draft agent config when capabilities report sandbox as available.
|
|
176
|
+
- c4ee138: Resume Chat / Resume Agent building opens in a new tab when routed (`/sessions/:id` + square-arrow-out-up-right); without a router it keeps the in-shell resume fallback.
|
|
177
|
+
- 788636d: Open the create schedule drawer when Agents "+ Schedule" navigates with `isNew=true`, then clear the flag from the URL.
|
|
178
|
+
- 333230d: Improve Agent Sessions with a resizable divider, accurate turn grouping, optional cost display, and reliable timeline tooltips with sub-agent details. Simplify schedule recurrence and default new schedules to the local timezone.
|
|
179
|
+
- c4ee138: Unregister the `/settings` route when Settings chrome is unavailable (no catalog or `capabilities.settings.enabled` is false), matching the sidebar Settings button gate.
|
|
180
|
+
- c4ee138: Split New Chat and New Agent draft preference stores. New Chat remembers only model (+ reasoning), skills, and MCP; New Agent keeps the full seed including runtime config.
|
|
181
|
+
- 4c1260e: Wire TrueFoundry MCP authorize, status, and delete through ServiceFoundry; stub list auth_status; gate oauth2 invoke mid-turn with authRequired; paginate MCP server lists. UI treats SFY consent `code`/`error` on the FE landing like local DCR success/failure.
|
|
182
|
+
- c4ee138: Per-turn Tokens in Agent Sessions shows a keyboard-accessible Input / Output / Cached tooltip (Input is uncached).
|
|
183
|
+
- bc11131: Share a single `PageHeader` across chat and list chrome so title size/height stay consistent, and drop decorative title icons.
|
|
184
|
+
- Updated dependencies [648273b]
|
|
185
|
+
- Updated dependencies [648273b]
|
|
186
|
+
- Updated dependencies [2dcb3a0]
|
|
187
|
+
- Updated dependencies [52987a7]
|
|
188
|
+
- Updated dependencies [38ce068]
|
|
189
|
+
- Updated dependencies [b654052]
|
|
190
|
+
- Updated dependencies [4c1260e]
|
|
191
|
+
- Updated dependencies [f175245]
|
|
192
|
+
- @truefoundry/trueforge-sdk@0.1.4-rc.1
|
|
193
|
+
|
|
3
194
|
## 0.3.0-rc.0
|
|
4
195
|
|
|
5
196
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -400,12 +400,14 @@ show the title text (see [Custom layouts](#custom-layouts)).
|
|
|
400
400
|
|
|
401
401
|
| Mode | Layout chrome | Agent selection / New Chat |
|
|
402
402
|
| -------------------------------------- | ------------------------------- | --------------------------------------------------------- |
|
|
403
|
-
| `AgentLibraryWithComposer` _(default)_ | Agents
|
|
403
|
+
| `AgentLibraryWithComposer` _(default)_ | Agents + draft builder | New Chat opens draft; library picks a named agent |
|
|
404
404
|
| `SingleAgent` | Named-only, plain composer | Locked to `name`; New Chat / Clear Chat = new thread |
|
|
405
|
-
| `AgentLibrary` | Agents
|
|
405
|
+
| `AgentLibrary` | Agents only (no draft) | Empty until pick; no New Chat; Clear Chat after selection |
|
|
406
406
|
| `AgentComposer` | Draft builder only (no library) | Always draft; New Chat / Clear Chat = fresh draft |
|
|
407
407
|
|
|
408
|
-
In library modes, picking an agent from
|
|
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
|
+
|
|
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.
|
|
409
411
|
|
|
410
412
|
```tsx
|
|
411
413
|
{
|
|
@@ -436,7 +438,7 @@ In library modes, picking an agent from the Agents Library switches to a named c
|
|
|
436
438
|
/>;
|
|
437
439
|
```
|
|
438
440
|
|
|
439
|
-
> _Screenshot: Agents
|
|
441
|
+
> _Screenshot: Agents open; selecting an agent resets the thread._
|
|
440
442
|
|
|
441
443
|
---
|
|
442
444
|
|
|
@@ -444,12 +446,12 @@ In library modes, picking an agent from the Agents Library switches to a named c
|
|
|
444
446
|
|
|
445
447
|
Built-in `layout` values:
|
|
446
448
|
|
|
447
|
-
| Value | Description
|
|
448
|
-
| --------- |
|
|
449
|
-
| `sidebar` |
|
|
450
|
-
| `drawer` | Full-bleed thread; sessions open in a slide-over
|
|
451
|
-
| `dock` | Fixed-width right panel; list XOR thread stack
|
|
452
|
-
| `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 |
|
|
453
455
|
|
|
454
456
|
---
|
|
455
457
|
|
|
@@ -515,7 +517,7 @@ function MyBubble({ children, error, actionBar, className }: AssistantMessageBub
|
|
|
515
517
|
/>;
|
|
516
518
|
```
|
|
517
519
|
|
|
518
|
-
Overridable slots include composer pieces (`ComposerShell`, `ComposerLeftSection`, `ComposerRightSection`, `ComposerSendButton`), messages (`AssistantMessageBubble`, `UserMessageBubble`, `UserMessageEdit`), `Markdown`, `WelcomeScreen`, thread-list atoms, and tool/prompt cards (`ToolCallCard`, `ToolApprovalBar`, `ToolGroupCard`, `SubAgentCard`, `SandboxToolCallCard`, `AgentStepsCard`, `ReasoningCard`, `AskUserPrompt`, `McpAuthPrompt`, and more).
|
|
520
|
+
Overridable slots include composer pieces (`ComposerShell`, `ComposerLeftSection`, `ComposerRightSection`, `ComposerSendButton`), messages (`AssistantMessageBubble`, `UserMessageBubble`, `UserMessageEdit`), `Markdown`, `WelcomeScreen`, thread-list atoms, agent metrics (`AgentMetrics`, `AgentMetricsView`, `AgentMetricsTimeRangeFilter`, `AgentMetricCard`, `AgentMetricStatistics`, `AgentMetricChart`), and tool/prompt cards (`ToolCallCard`, `ToolApprovalBar`, `ToolGroupCard`, `SubAgentCard`, `SandboxToolCallCard`, `AgentStepsCard`, `ReasoningCard`, `AskUserPrompt`, `McpAuthPrompt`, and more).
|
|
519
521
|
|
|
520
522
|
See [docs/customization.md](./docs/customization.md) for the full slot list.
|
|
521
523
|
|
|
@@ -533,6 +535,7 @@ type TrueForgeServerConfig =
|
|
|
533
535
|
apiKey: string;
|
|
534
536
|
controlPlaneURL: string;
|
|
535
537
|
gatewayPlaneURL?: string;
|
|
538
|
+
permissions?: PermissionsServer;
|
|
536
539
|
}
|
|
537
540
|
| {
|
|
538
541
|
type: 'trueforge';
|
|
@@ -540,16 +543,36 @@ type TrueForgeServerConfig =
|
|
|
540
543
|
token?: string;
|
|
541
544
|
fetch?: typeof fetch;
|
|
542
545
|
catalog?: CatalogServer;
|
|
546
|
+
permissions?: PermissionsServer;
|
|
543
547
|
}
|
|
544
548
|
| AgentUIServer;
|
|
545
549
|
|
|
546
|
-
type AgentUIServer = AgentChatServer &
|
|
550
|
+
type AgentUIServer = AgentChatServer &
|
|
551
|
+
AgentBuilderServer & {
|
|
552
|
+
catalog?: CatalogServer;
|
|
553
|
+
sessions?: AgentSessionsServer;
|
|
554
|
+
metrics?: AgentMetricsServer;
|
|
555
|
+
schedules?: ScheduleServer;
|
|
556
|
+
permissions?: PermissionsServer;
|
|
557
|
+
};
|
|
547
558
|
```
|
|
548
559
|
|
|
549
560
|
| Port | Responsibility |
|
|
550
561
|
| -------------------- | ------------------------------------------------------------------- |
|
|
551
562
|
| `AgentChatServer` | Sessions, turns, streaming, draft `AgentSpec` sync |
|
|
552
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`) |
|
|
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.
|
|
553
576
|
|
|
554
577
|
**Zero-config TrueFoundry** — see [Getting started](#getting-started). The SDK calls `createTrueFoundryAgentUIServer` for you.
|
|
555
578
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
useSlot
|
|
4
|
+
} from "./chunk-GG23N2GW.js";
|
|
5
|
+
import "./chunk-T6QQV5LK.js";
|
|
6
|
+
import {
|
|
7
|
+
Icon
|
|
8
|
+
} from "./chunk-3ZW74FHC.js";
|
|
9
|
+
import "./chunk-2GIZY3JJ.js";
|
|
10
|
+
import "./chunk-M6MHLVSO.js";
|
|
11
|
+
import "./chunk-CG75X77Q.js";
|
|
12
|
+
import {
|
|
13
|
+
cn
|
|
14
|
+
} from "./chunk-JCL3Q7RW.js";
|
|
15
|
+
|
|
16
|
+
// src/atoms/agent-details/AgentCodeSnippets.tsx
|
|
17
|
+
import { useEffect, useState } from "react";
|
|
18
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
19
|
+
function AgentCodeSnippets({ snippets }) {
|
|
20
|
+
const AgentCodeBlock = useSlot("AgentCodeBlock");
|
|
21
|
+
const [selectedLanguage, setSelectedLanguage] = useState(snippets[0]?.language);
|
|
22
|
+
const [mode, setMode] = useState("stream");
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
setSelectedLanguage(snippets[0]?.language);
|
|
25
|
+
setMode("stream");
|
|
26
|
+
}, [snippets]);
|
|
27
|
+
const selected = snippets.find((snippet) => snippet.language === selectedLanguage) ?? snippets[0];
|
|
28
|
+
if (selected === void 0) {
|
|
29
|
+
return /* @__PURE__ */ jsx("div", { className: "flex h-full min-h-64 items-center justify-center px-6 text-sm text-text-secondary", children: "No code samples for this agent." });
|
|
30
|
+
}
|
|
31
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-3 p-3 md:flex-row", children: [
|
|
32
|
+
/* @__PURE__ */ jsx("nav", { "aria-label": "Code sample languages", className: "flex shrink-0 gap-1 overflow-auto md:w-44 md:flex-col", children: snippets.map((snippet) => /* @__PURE__ */ jsxs(
|
|
33
|
+
"button",
|
|
34
|
+
{
|
|
35
|
+
type: "button",
|
|
36
|
+
"aria-current": selected.language === snippet.language ? "page" : void 0,
|
|
37
|
+
className: cn(
|
|
38
|
+
"flex h-9 shrink-0 cursor-pointer items-center gap-2 rounded-md px-2.5 text-left text-xs text-text-secondary",
|
|
39
|
+
"hover:bg-ghost-button-hover hover:text-text-primary",
|
|
40
|
+
selected.language === snippet.language && "bg-primary-button-bg/10 font-medium text-primary-button-bg"
|
|
41
|
+
),
|
|
42
|
+
onClick: () => setSelectedLanguage(snippet.language),
|
|
43
|
+
children: [
|
|
44
|
+
snippet.icon ? /* @__PURE__ */ jsx("img", { src: snippet.icon, alt: "", className: "size-4 shrink-0 object-contain" }) : /* @__PURE__ */ jsx(Icon, { name: "code", className: "size-4 shrink-0" }),
|
|
45
|
+
snippet.labelName
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
snippet.language
|
|
49
|
+
)) }),
|
|
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__ */ 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
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: /* @__PURE__ */ jsx(AgentCodeBlock, { code: selected.sampleCode[mode], language: selected.language }) })
|
|
83
|
+
] })
|
|
84
|
+
] });
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
AgentCodeSnippets as default
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=AgentCodeSnippets-RJBB4DDE.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-PQ7VWBQQ.js";
|
|
5
|
+
import "./chunk-GG23N2GW.js";
|
|
6
|
+
import "./chunk-T6QQV5LK.js";
|
|
7
|
+
import "./chunk-3ZW74FHC.js";
|
|
8
|
+
import "./chunk-2GIZY3JJ.js";
|
|
9
|
+
import "./chunk-M6MHLVSO.js";
|
|
10
|
+
import "./chunk-CG75X77Q.js";
|
|
11
|
+
import "./chunk-JCL3Q7RW.js";
|
|
12
|
+
export {
|
|
13
|
+
AgentMetricChart
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=AgentMetricChart-UPGSJ2WP.js.map
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
useSlot
|
|
4
|
+
} from "./chunk-GG23N2GW.js";
|
|
5
|
+
import "./chunk-T6QQV5LK.js";
|
|
6
|
+
import {
|
|
7
|
+
Icon
|
|
8
|
+
} from "./chunk-3ZW74FHC.js";
|
|
9
|
+
import "./chunk-2GIZY3JJ.js";
|
|
10
|
+
import "./chunk-M6MHLVSO.js";
|
|
11
|
+
import "./chunk-CG75X77Q.js";
|
|
12
|
+
import {
|
|
13
|
+
cn
|
|
14
|
+
} from "./chunk-JCL3Q7RW.js";
|
|
15
|
+
|
|
16
|
+
// src/atoms/agent-details/AgentOverview.tsx
|
|
17
|
+
import { useState } from "react";
|
|
18
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
19
|
+
var valueClassName = "text-right font-mono text-primary-button-bg";
|
|
20
|
+
function isRecord(value) {
|
|
21
|
+
return typeof value === "object" && value != null;
|
|
22
|
+
}
|
|
23
|
+
function readName(value) {
|
|
24
|
+
if (!("name" in value) || typeof value.name !== "string") return null;
|
|
25
|
+
return value.name;
|
|
26
|
+
}
|
|
27
|
+
function readRecordValue(record, ...keys) {
|
|
28
|
+
for (const key of keys) {
|
|
29
|
+
const value = record?.[key];
|
|
30
|
+
if (value !== void 0) return value;
|
|
31
|
+
}
|
|
32
|
+
return void 0;
|
|
33
|
+
}
|
|
34
|
+
function hasAllTools(value) {
|
|
35
|
+
if (!isRecord(value)) return false;
|
|
36
|
+
const tools = readRecordValue(value, "enableTools", "enable_tools");
|
|
37
|
+
return tools === void 0 || Array.isArray(tools) && tools.includes("@all");
|
|
38
|
+
}
|
|
39
|
+
function displayModelName(name) {
|
|
40
|
+
const slash = name.lastIndexOf("/");
|
|
41
|
+
return slash >= 0 ? name.slice(slash + 1) : name;
|
|
42
|
+
}
|
|
43
|
+
function AgentOverview({ detail }) {
|
|
44
|
+
const Markdown = useSlot("Markdown");
|
|
45
|
+
const AgentOverviewCard = useSlot("AgentOverviewCard");
|
|
46
|
+
const [instructionsView, setInstructionsView] = useState("markdown");
|
|
47
|
+
const [copied, setCopied] = useState(false);
|
|
48
|
+
const spec = detail.agentSpec;
|
|
49
|
+
const skills = spec.skills ?? [];
|
|
50
|
+
const connectors = spec.mcpServers ?? [];
|
|
51
|
+
const modelParams = isRecord(spec.model.params) ? spec.model.params : null;
|
|
52
|
+
const maxTokens = readRecordValue(modelParams, "maxTokens", "max_tokens");
|
|
53
|
+
const temperature = readRecordValue(modelParams, "temperature");
|
|
54
|
+
const config = isRecord(spec.config) ? spec.config : null;
|
|
55
|
+
const sandbox = isRecord(config?.sandbox) ? config.sandbox : null;
|
|
56
|
+
const instructions = spec.instructions?.trim() ? spec.instructions : null;
|
|
57
|
+
const description = detail.description?.trim() ? detail.description : null;
|
|
58
|
+
const execution = [
|
|
59
|
+
["Sandbox", typeof sandbox?.enabled === "boolean" ? sandbox.enabled ? "Enabled" : "Disabled" : void 0],
|
|
60
|
+
["Iteration limit", readRecordValue(config, "iterationLimit", "iteration_limit")],
|
|
61
|
+
["Response format", readRecordValue(config, "responseFormat", "response_format")]
|
|
62
|
+
].filter((entry) => {
|
|
63
|
+
return typeof entry[1] === "string" || typeof entry[1] === "number";
|
|
64
|
+
});
|
|
65
|
+
const capabilities = [
|
|
66
|
+
["Generative UI", spec.config?.generativeUi?.enabled],
|
|
67
|
+
["Dynamic sub-agents", spec.config?.dynamicSubAgents?.enabled],
|
|
68
|
+
["Ask user questions", spec.config?.askUserQuestions?.enabled]
|
|
69
|
+
].filter((entry) => typeof entry[1] === "boolean");
|
|
70
|
+
const toggleLabel = instructionsView === "markdown" ? "Raw" : "Markdown";
|
|
71
|
+
return /* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col gap-3 overflow-auto p-4 md:overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: "grid min-h-0 flex-1 gap-3 md:grid-cols-[minmax(0,1fr)_18rem] md:overflow-hidden", children: [
|
|
72
|
+
/* @__PURE__ */ jsxs("section", { className: "flex min-h-64 flex-col rounded-lg border border-border bg-card-bg p-4 text-text-primary", children: [
|
|
73
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-3 flex shrink-0 items-center justify-between gap-2", children: [
|
|
74
|
+
/* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-1.5 text-sm font-semibold text-text-primary", children: [
|
|
75
|
+
/* @__PURE__ */ jsx(Icon, { name: "book-open", className: "size-4 text-text-secondary" }),
|
|
76
|
+
"Instructions"
|
|
77
|
+
] }),
|
|
78
|
+
instructions ? /* @__PURE__ */ jsxs(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
className: "inline-flex h-7 items-stretch overflow-hidden rounded-md border border-border bg-primary-bg text-xs font-medium text-text-secondary",
|
|
82
|
+
role: "group",
|
|
83
|
+
"aria-label": "Instructions actions",
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ jsx(
|
|
86
|
+
"button",
|
|
87
|
+
{
|
|
88
|
+
type: "button",
|
|
89
|
+
"aria-label": `Show ${toggleLabel}`,
|
|
90
|
+
onClick: () => setInstructionsView((view) => view === "markdown" ? "raw" : "markdown"),
|
|
91
|
+
className: "cursor-pointer px-2.5 transition-colors hover:bg-ghost-button-hover hover:text-text-primary",
|
|
92
|
+
children: toggleLabel
|
|
93
|
+
}
|
|
94
|
+
),
|
|
95
|
+
/* @__PURE__ */ jsx("span", { className: "w-px self-stretch bg-border", "aria-hidden": true }),
|
|
96
|
+
/* @__PURE__ */ jsx(
|
|
97
|
+
"button",
|
|
98
|
+
{
|
|
99
|
+
type: "button",
|
|
100
|
+
title: copied ? "Copied!" : "Copy",
|
|
101
|
+
"aria-label": copied ? "Copied!" : "Copy",
|
|
102
|
+
onClick: () => {
|
|
103
|
+
void navigator.clipboard.writeText(instructions).then(() => {
|
|
104
|
+
setCopied(true);
|
|
105
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
className: "inline-flex cursor-pointer items-center justify-center px-2 transition-colors hover:bg-ghost-button-hover hover:text-text-primary",
|
|
109
|
+
children: /* @__PURE__ */ jsx(Icon, { name: copied ? "check" : "copy", size: 12 })
|
|
110
|
+
}
|
|
111
|
+
)
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
) : null
|
|
115
|
+
] }),
|
|
116
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: instructions ? instructionsView === "markdown" ? /* @__PURE__ */ jsx(Markdown, { content: instructions, readOnly: true, className: "text-sm" }) : /* @__PURE__ */ jsx("pre", { className: "whitespace-pre-wrap break-words font-mono text-sm text-text-primary", children: instructions }) : /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: "No instructions for this agent." }) })
|
|
117
|
+
] }),
|
|
118
|
+
/* @__PURE__ */ jsxs("aside", { className: "flex min-h-0 min-w-0 flex-col gap-3 md:overflow-auto", children: [
|
|
119
|
+
description ? /* @__PURE__ */ jsx(AgentOverviewCard, { title: "Description", icon: "file", children: /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: description }) }) : null,
|
|
120
|
+
/* @__PURE__ */ jsx(AgentOverviewCard, { title: "Model Configuration", icon: "cpu", children: /* @__PURE__ */ jsxs("dl", { className: "grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1 text-xs", children: [
|
|
121
|
+
/* @__PURE__ */ jsx("dt", { className: "text-text-secondary", children: "Model" }),
|
|
122
|
+
/* @__PURE__ */ jsx("dd", { className: cn(valueClassName, "truncate"), title: spec.model.name, children: displayModelName(spec.model.name) }),
|
|
123
|
+
typeof maxTokens === "number" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
124
|
+
/* @__PURE__ */ jsx("dt", { className: "text-text-secondary", children: "Max tokens" }),
|
|
125
|
+
/* @__PURE__ */ jsx("dd", { className: valueClassName, children: maxTokens })
|
|
126
|
+
] }) : null,
|
|
127
|
+
spec.model.params?.reasoningEffort !== void 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
128
|
+
/* @__PURE__ */ jsx("dt", { className: "text-text-secondary", children: "Reasoning" }),
|
|
129
|
+
/* @__PURE__ */ jsx("dd", { className: valueClassName, children: spec.model.params.reasoningEffort })
|
|
130
|
+
] }) : null,
|
|
131
|
+
typeof temperature === "number" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
132
|
+
/* @__PURE__ */ jsx("dt", { className: "text-text-secondary", children: "Temperature" }),
|
|
133
|
+
/* @__PURE__ */ jsx("dd", { className: valueClassName, children: temperature })
|
|
134
|
+
] }) : null
|
|
135
|
+
] }) }),
|
|
136
|
+
/* @__PURE__ */ jsx(AgentOverviewCard, { title: "MCP Servers", icon: "plug", count: connectors.length, children: connectors.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: "No connectors attached." }) : /* @__PURE__ */ jsx("ul", { className: "space-y-1.5", children: connectors.map((connector, index) => /* @__PURE__ */ jsx(
|
|
137
|
+
"li",
|
|
138
|
+
{
|
|
139
|
+
className: "rounded-md bg-secondary-bg px-2 py-1.5 text-xs",
|
|
140
|
+
children: /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-between gap-2", children: [
|
|
141
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: readName(connector) ?? `Connector ${index + 1}` }),
|
|
142
|
+
hasAllTools(connector) ? /* @__PURE__ */ jsx("span", { className: "shrink-0 rounded-full bg-primary-button-bg/10 px-1.5 py-0.5 text-[10px] text-primary-button-bg", children: "All tools" }) : null
|
|
143
|
+
] })
|
|
144
|
+
},
|
|
145
|
+
`${readName(connector) ?? "connector"}-${index}`
|
|
146
|
+
)) }) }),
|
|
147
|
+
/* @__PURE__ */ jsx(AgentOverviewCard, { title: "Attached Skills", icon: "lightbulb", count: skills.length, children: skills.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: "No skills attached." }) : /* @__PURE__ */ jsx("ul", { className: "space-y-1.5", children: skills.map((skill, index) => /* @__PURE__ */ jsx(
|
|
148
|
+
"li",
|
|
149
|
+
{
|
|
150
|
+
className: "rounded-md bg-secondary-bg px-2 py-1.5 text-xs",
|
|
151
|
+
children: readName(skill) ?? `Skill ${index + 1}`
|
|
152
|
+
},
|
|
153
|
+
`${readName(skill) ?? "skill"}-${index}`
|
|
154
|
+
)) }) }),
|
|
155
|
+
execution.length > 0 ? /* @__PURE__ */ jsx(AgentOverviewCard, { title: "Execution", icon: "terminal", children: /* @__PURE__ */ jsx("dl", { className: "space-y-1 text-xs", children: execution.map(([label, value]) => /* @__PURE__ */ jsxs("div", { className: "flex justify-between gap-3", children: [
|
|
156
|
+
/* @__PURE__ */ jsx("dt", { className: "text-text-secondary", children: label }),
|
|
157
|
+
/* @__PURE__ */ jsx("dd", { className: valueClassName, children: value })
|
|
158
|
+
] }, label)) }) }) : null,
|
|
159
|
+
capabilities.length > 0 ? /* @__PURE__ */ jsx(AgentOverviewCard, { title: "Capabilities", icon: "cube", children: /* @__PURE__ */ jsx("dl", { className: "space-y-1 text-xs", children: capabilities.map(([label, enabled]) => /* @__PURE__ */ jsxs("div", { className: "flex justify-between gap-3", children: [
|
|
160
|
+
/* @__PURE__ */ jsx("dt", { className: "text-text-secondary", children: label }),
|
|
161
|
+
/* @__PURE__ */ jsx("dd", { className: valueClassName, children: enabled ? "Enabled" : "Disabled" })
|
|
162
|
+
] }, label)) }) }) : null
|
|
163
|
+
] })
|
|
164
|
+
] }) });
|
|
165
|
+
}
|
|
166
|
+
export {
|
|
167
|
+
AgentOverview as default
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=AgentOverview-U5WIQXZN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/atoms/agent-details/AgentOverview.tsx"],"sourcesContent":["'use client';\n\nimport { 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 { AgentOverviewProps } from './types.js';\n\ntype InstructionsView = 'markdown' | 'raw';\n\nconst valueClassName = 'text-right font-mono text-primary-button-bg';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value != null;\n}\n\nfunction readName(value: object): string | null {\n if (!('name' in value) || typeof value.name !== 'string') return null;\n return value.name;\n}\n\nfunction readRecordValue(record: Record<string, unknown> | null, ...keys: string[]): unknown {\n for (const key of keys) {\n const value = record?.[key];\n if (value !== undefined) return value;\n }\n return undefined;\n}\n\nfunction hasAllTools(value: object): boolean {\n if (!isRecord(value)) return false;\n const tools = readRecordValue(value, 'enableTools', 'enable_tools');\n return tools === undefined || (Array.isArray(tools) && tools.includes('@all'));\n}\n\nfunction displayModelName(name: string): string {\n const slash = name.lastIndexOf('/');\n return slash >= 0 ? name.slice(slash + 1) : name;\n}\n\nexport default function AgentOverview({ detail }: AgentOverviewProps) {\n const Markdown = useSlot('Markdown');\n const AgentOverviewCard = useSlot('AgentOverviewCard');\n const [instructionsView, setInstructionsView] = useState<InstructionsView>('markdown');\n const [copied, setCopied] = useState(false);\n const spec = detail.agentSpec;\n const skills = spec.skills ?? [];\n const connectors = spec.mcpServers ?? [];\n const modelParams = isRecord(spec.model.params) ? spec.model.params : null;\n const maxTokens = readRecordValue(modelParams, 'maxTokens', 'max_tokens');\n const temperature = readRecordValue(modelParams, 'temperature');\n const config = isRecord(spec.config) ? spec.config : null;\n const sandbox = isRecord(config?.sandbox) ? config.sandbox : null;\n const instructions = spec.instructions?.trim() ? spec.instructions : null;\n const description = detail.description?.trim() ? detail.description : null;\n const execution = [\n ['Sandbox', typeof sandbox?.enabled === 'boolean' ? (sandbox.enabled ? 'Enabled' : 'Disabled') : undefined],\n ['Iteration limit', readRecordValue(config, 'iterationLimit', 'iteration_limit')],\n ['Response format', readRecordValue(config, 'responseFormat', 'response_format')],\n ].filter((entry): entry is [string, string | number] => {\n return typeof entry[1] === 'string' || typeof entry[1] === 'number';\n });\n const capabilities = [\n ['Generative UI', spec.config?.generativeUi?.enabled],\n ['Dynamic sub-agents', spec.config?.dynamicSubAgents?.enabled],\n ['Ask user questions', spec.config?.askUserQuestions?.enabled],\n ].filter((entry): entry is [string, boolean] => typeof entry[1] === 'boolean');\n const toggleLabel = instructionsView === 'markdown' ? 'Raw' : 'Markdown';\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col gap-3 overflow-auto p-4 md:overflow-hidden\">\n <div className=\"grid min-h-0 flex-1 gap-3 md:grid-cols-[minmax(0,1fr)_18rem] md:overflow-hidden\">\n <section className=\"flex min-h-64 flex-col rounded-lg border border-border bg-card-bg p-4 text-text-primary\">\n <div className=\"mb-3 flex shrink-0 items-center justify-between gap-2\">\n <h2 className=\"flex items-center gap-1.5 text-sm font-semibold text-text-primary\">\n <Icon name=\"book-open\" className=\"size-4 text-text-secondary\" />\n Instructions\n </h2>\n {instructions ? (\n <div\n className=\"inline-flex h-7 items-stretch overflow-hidden rounded-md border border-border bg-primary-bg text-xs font-medium text-text-secondary\"\n role=\"group\"\n aria-label=\"Instructions actions\"\n >\n <button\n type=\"button\"\n aria-label={`Show ${toggleLabel}`}\n onClick={() => setInstructionsView(view => (view === 'markdown' ? 'raw' : 'markdown'))}\n className=\"cursor-pointer px-2.5 transition-colors hover:bg-ghost-button-hover hover:text-text-primary\"\n >\n {toggleLabel}\n </button>\n <span className=\"w-px self-stretch bg-border\" aria-hidden />\n <button\n type=\"button\"\n title={copied ? 'Copied!' : 'Copy'}\n aria-label={copied ? 'Copied!' : 'Copy'}\n onClick={() => {\n void navigator.clipboard.writeText(instructions).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }}\n className=\"inline-flex cursor-pointer items-center justify-center px-2 transition-colors hover:bg-ghost-button-hover hover:text-text-primary\"\n >\n <Icon name={copied ? 'check' : 'copy'} size={12} />\n </button>\n </div>\n ) : null}\n </div>\n <div className=\"min-h-0 flex-1 overflow-auto\">\n {instructions ? (\n instructionsView === 'markdown' ? (\n <Markdown content={instructions} readOnly className=\"text-sm\" />\n ) : (\n <pre className=\"whitespace-pre-wrap break-words font-mono text-sm text-text-primary\">\n {instructions}\n </pre>\n )\n ) : (\n <p className=\"text-sm text-text-secondary\">No instructions for this agent.</p>\n )}\n </div>\n </section>\n\n <aside className=\"flex min-h-0 min-w-0 flex-col gap-3 md:overflow-auto\">\n {description ? (\n <AgentOverviewCard title=\"Description\" icon=\"file\">\n <p className=\"text-xs text-text-secondary\">{description}</p>\n </AgentOverviewCard>\n ) : null}\n <AgentOverviewCard title=\"Model Configuration\" icon=\"cpu\">\n <dl className=\"grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 gap-y-1 text-xs\">\n <dt className=\"text-text-secondary\">Model</dt>\n <dd className={cn(valueClassName, 'truncate')} title={spec.model.name}>\n {displayModelName(spec.model.name)}\n </dd>\n {typeof maxTokens === 'number' ? (\n <>\n <dt className=\"text-text-secondary\">Max tokens</dt>\n <dd className={valueClassName}>{maxTokens}</dd>\n </>\n ) : null}\n {spec.model.params?.reasoningEffort !== undefined ? (\n <>\n <dt className=\"text-text-secondary\">Reasoning</dt>\n <dd className={valueClassName}>{spec.model.params.reasoningEffort}</dd>\n </>\n ) : null}\n {typeof temperature === 'number' ? (\n <>\n <dt className=\"text-text-secondary\">Temperature</dt>\n <dd className={valueClassName}>{temperature}</dd>\n </>\n ) : null}\n </dl>\n </AgentOverviewCard>\n <AgentOverviewCard title=\"MCP Servers\" icon=\"plug\" count={connectors.length}>\n {connectors.length === 0 ? (\n <p className=\"text-xs text-text-secondary\">No connectors attached.</p>\n ) : (\n <ul className=\"space-y-1.5\">\n {connectors.map((connector, index) => (\n <li\n key={`${readName(connector) ?? 'connector'}-${index}`}\n className=\"rounded-md bg-secondary-bg px-2 py-1.5 text-xs\"\n >\n <span className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate\">{readName(connector) ?? `Connector ${index + 1}`}</span>\n {hasAllTools(connector) ? (\n <span className=\"shrink-0 rounded-full bg-primary-button-bg/10 px-1.5 py-0.5 text-[10px] text-primary-button-bg\">\n All tools\n </span>\n ) : null}\n </span>\n </li>\n ))}\n </ul>\n )}\n </AgentOverviewCard>\n\n <AgentOverviewCard title=\"Attached Skills\" icon=\"lightbulb\" count={skills.length}>\n {skills.length === 0 ? (\n <p className=\"text-xs text-text-secondary\">No skills attached.</p>\n ) : (\n <ul className=\"space-y-1.5\">\n {skills.map((skill, index) => (\n <li\n key={`${readName(skill) ?? 'skill'}-${index}`}\n className=\"rounded-md bg-secondary-bg px-2 py-1.5 text-xs\"\n >\n {readName(skill) ?? `Skill ${index + 1}`}\n </li>\n ))}\n </ul>\n )}\n </AgentOverviewCard>\n\n {execution.length > 0 ? (\n <AgentOverviewCard title=\"Execution\" icon=\"terminal\">\n <dl className=\"space-y-1 text-xs\">\n {execution.map(([label, value]) => (\n <div key={label} className=\"flex justify-between gap-3\">\n <dt className=\"text-text-secondary\">{label}</dt>\n <dd className={valueClassName}>{value}</dd>\n </div>\n ))}\n </dl>\n </AgentOverviewCard>\n ) : null}\n\n {capabilities.length > 0 ? (\n <AgentOverviewCard title=\"Capabilities\" icon=\"cube\">\n <dl className=\"space-y-1 text-xs\">\n {capabilities.map(([label, enabled]) => (\n <div key={label} className=\"flex justify-between gap-3\">\n <dt className=\"text-text-secondary\">{label}</dt>\n <dd className={valueClassName}>{enabled ? 'Enabled' : 'Disabled'}</dd>\n </div>\n ))}\n </dl>\n </AgentOverviewCard>\n ) : null}\n </aside>\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentOverview: ComponentType<AgentOverviewProps>;\n }\n}\n"],"mappings":"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","names":[]}
|