@talgent/workbench-ui 0.0.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/assets/brand-icons/LICENSE.md +30 -0
- package/assets/brand-icons/README.md +5 -0
- package/assets/brand-icons/figma.svg +1 -0
- package/assets/brand-icons/github.svg +1 -0
- package/assets/brand-icons/linear.svg +1 -0
- package/assets/brand-icons/notion.svg +1 -0
- package/assets/brand-icons/sentry.svg +1 -0
- package/assets/brand-icons/slack.svg +1 -0
- package/assets/fonts/Inter-OFL.txt +93 -0
- package/assets/fonts/inter-latin.woff2 +0 -0
- package/components/agent/agent-icon.css +14 -0
- package/components/agent/agent-icon.tsx +14 -0
- package/components/analytics/chart-geometry.ts +95 -0
- package/components/analytics/dashboard-charts.tsx +136 -0
- package/components/analytics/model-usage-chart.tsx +84 -0
- package/components/analytics/token-breakdown.css +13 -0
- package/components/analytics/token-breakdown.tsx +23 -0
- package/components/analytics/token-report.tsx +57 -0
- package/components/analytics/work-usage/turn-timeline.tsx +98 -0
- package/components/analytics/work-usage/turns.ts +170 -0
- package/components/analytics/work-usage/work-status.ts +36 -0
- package/components/analytics/work-usage/work-usage-reader.tsx +122 -0
- package/components/analytics/work-usage/work-usage.css +48 -0
- package/components/auth/auth-gate.tsx +44 -0
- package/components/chat/message-input.tsx +105 -0
- package/components/composer/permission-mode-list.tsx +15 -0
- package/components/composer/prompt-bar-controls.tsx +77 -0
- package/components/composer/prompt-bar.tsx +45 -0
- package/components/composer/skill-completion.css +27 -0
- package/components/composer/skill-completion.tsx +49 -0
- package/components/composer/use-slash-completion.tsx +69 -0
- package/components/composer/work-start.css +133 -0
- package/components/feedback/toast-region.css +2 -0
- package/components/feedback/toast-region.tsx +15 -0
- package/components/files/file-facts.tsx +16 -0
- package/components/files/file-section.tsx +181 -0
- package/components/markdown.tsx +144 -0
- package/components/marketplace/connector-pages.tsx +166 -0
- package/components/marketplace/marketplace-icons.tsx +66 -0
- package/components/marketplace/marketplace-shared.tsx +43 -0
- package/components/marketplace/marketplace-shell.tsx +32 -0
- package/components/marketplace/marketplace.css +97 -0
- package/components/marketplace/parameter-fields.tsx +46 -0
- package/components/marketplace/plugin-list.tsx +84 -0
- package/components/marketplace/plugin-page.tsx +133 -0
- package/components/marketplace/provider-pages.tsx +120 -0
- package/components/preview/file-format.ts +75 -0
- package/components/preview/file-preview.tsx +153 -0
- package/components/preview/preview-verdict.ts +44 -0
- package/components/preview/preview.css +19 -0
- package/components/preview/text-preview.tsx +174 -0
- package/components/profile/provider-callback.tsx +43 -0
- package/components/profile/work-agent-appearance.tsx +109 -0
- package/components/profile/work-agent-soul.tsx +76 -0
- package/components/rail/rail-section.tsx +20 -0
- package/components/rail/rail.css +19 -0
- package/components/rail/use-expand-on-change.ts +18 -0
- package/components/session/startup-progress.css +77 -0
- package/components/session/startup-progress.tsx +103 -0
- package/components/session/work-permission-control.tsx +45 -0
- package/components/session/work-thinking-control.tsx +52 -0
- package/components/shell/account-menu.tsx +134 -0
- package/components/shell/app-shell.tsx +148 -0
- package/components/shell/core-reading-views.tsx +26 -0
- package/components/shell/core-reading.tsx +17 -0
- package/components/shell/document-title.tsx +11 -0
- package/components/shell/entry-shell.ts +39 -0
- package/components/shell/file-reading.tsx +22 -0
- package/components/shell/page-layout.tsx +7 -0
- package/components/shell/reading-context.ts +41 -0
- package/components/shell/reading-panel.css +67 -0
- package/components/shell/reading-panel.tsx +74 -0
- package/components/shell/sidebar-parts.tsx +38 -0
- package/components/work/context-rail.css +61 -0
- package/components/work/conversation-unavailable.css +6 -0
- package/components/work/conversation-unavailable.tsx +11 -0
- package/components/work/subagent-item.tsx +42 -0
- package/components/work/subagents-section.css +31 -0
- package/components/work/subagents-section.tsx +40 -0
- package/components/work/token-usage.tsx +28 -0
- package/components/work/tool-message-detail.tsx +39 -0
- package/components/work/tool-output-preview.tsx +52 -0
- package/components/work/tool-preview-reading.tsx +27 -0
- package/components/work/tool-reading-content.tsx +31 -0
- package/components/work/work-context-rail.tsx +23 -0
- package/components/work/work-conversation.tsx +207 -0
- package/components/work/work-history.tsx +115 -0
- package/components/work/work-interaction.css +38 -0
- package/components/work/work-interaction.tsx +105 -0
- package/components/work/work-message-flow.css +86 -0
- package/components/work/work-message-flow.tsx +352 -0
- package/components/work/work-progress-section.tsx +20 -0
- package/components/work/work-prompt-bar.tsx +82 -0
- package/components/work/work-question-record.tsx +72 -0
- package/components/work/work-snapshot-state.tsx +24 -0
- package/components/work/work-status-control.tsx +54 -0
- package/components/work-start/start-work-launch-state.ts +33 -0
- package/components/work-start/work-start-catalog.tsx +116 -0
- package/components/work-start/work-start-form.tsx +173 -0
- package/components/work-start/work-start-tray.css +40 -0
- package/components/work-start/work-start-tray.tsx +128 -0
- package/hooks/use-debounced.ts +11 -0
- package/hooks/use-work-conversation.ts +125 -0
- package/hooks/use-work-lifecycle-controls.ts +40 -0
- package/hooks/use-work-stream.ts +91 -0
- package/lib/account-service.ts +77 -0
- package/lib/agent-appearance-service.ts +59 -0
- package/lib/agent-icon.ts +26 -0
- package/lib/agent-soul-service.ts +48 -0
- package/lib/agent-work-service.ts +23 -0
- package/lib/client.ts +20 -0
- package/lib/computer-release.ts +30 -0
- package/lib/computer-service.ts +241 -0
- package/lib/dashboard-report.ts +38 -0
- package/lib/dashboard.ts +21 -0
- package/lib/marketplace-catalog.ts +138 -0
- package/lib/marketplace-connections.ts +98 -0
- package/lib/marketplace-plugins.ts +53 -0
- package/lib/marketplace-routes.ts +12 -0
- package/lib/model-vendors.ts +13 -0
- package/lib/name-taken-error.ts +7 -0
- package/lib/notifications.ts +37 -0
- package/lib/permission-modes.ts +25 -0
- package/lib/personal-usage-service.ts +19 -0
- package/lib/personal-work-service.ts +159 -0
- package/lib/plugin-parameters.ts +64 -0
- package/lib/preview-verdict.ts +26 -0
- package/lib/relative-time.ts +11 -0
- package/lib/session.ts +108 -0
- package/lib/share-link.ts +4 -0
- package/lib/stale-build-reload.ts +41 -0
- package/lib/start-work-request.ts +34 -0
- package/lib/startup-progress.ts +9 -0
- package/lib/subagents.ts +12 -0
- package/lib/thinking-levels.ts +2 -0
- package/lib/token-analytics.ts +168 -0
- package/lib/token-usage.ts +64 -0
- package/lib/trace-view-model.ts +292 -0
- package/lib/transport.ts +29 -0
- package/lib/use-now.ts +11 -0
- package/lib/use-work-trace.ts +175 -0
- package/lib/user-display.ts +49 -0
- package/lib/work-conversation.ts +118 -0
- package/lib/work-file-service.ts +118 -0
- package/lib/work-model.ts +38 -0
- package/lib/work-notices.ts +23 -0
- package/lib/work-progress.ts +41 -0
- package/lib/work-projection.ts +122 -0
- package/lib/work-questions.ts +18 -0
- package/lib/work-start-draft.ts +61 -0
- package/lib/work-start-loadout.ts +100 -0
- package/lib/work-start-source.ts +16 -0
- package/lib/work-state-presentation.ts +80 -0
- package/lib/work-stream-source.ts +32 -0
- package/package.json +81 -5
- package/pages/computers/computers-page.tsx +56 -0
- package/pages/computers/connect-computer-page.tsx +92 -0
- package/pages/computers/install-commands.tsx +42 -0
- package/pages/computers/remove-computer-dialog.tsx +33 -0
- package/pages/computers/rename-computer-dialog.tsx +37 -0
- package/pages/computers/room-rules-dialog.tsx +55 -0
- package/pages/login-page.css +33 -0
- package/pages/login-page.tsx +88 -0
- package/pages/login-threads.tsx +51 -0
- package/pages/marketplace-page.tsx +59 -0
- package/pages/profile-page.tsx +68 -0
- package/pages/workbench/library-page.tsx +88 -0
- package/pages/workbench/new-work-page.tsx +24 -0
- package/pages/workbench/person.tsx +13 -0
- package/pages/workbench/personal-work-context.tsx +93 -0
- package/pages/workbench/personal-work-page.tsx +100 -0
- package/pages/workbench/personal-works-page.tsx +36 -0
- package/pages/workbench/share-dialog.tsx +57 -0
- package/pages/workbench/title-dialog.tsx +35 -0
- package/pages/workbench/usage-page.tsx +52 -0
- package/public/assets/brand/talgent-lettering.png +0 -0
- package/public/assets/brand/talgent-logo-page-bg.png +0 -0
- package/public/assets/brand/talgent-logo-white-bg.png +0 -0
- package/public/assets/brand/talgent-mark-page-bg.png +0 -0
- package/public/assets/brand/talgent-mark-white-bg.png +0 -0
- package/public/assets/brand/talgent-mark.png +0 -0
- package/public/assets/product-icons/LICENSE +21 -0
- package/public/assets/product-icons/README.md +13 -0
- package/public/assets/product-icons/anthropic.svg +1 -0
- package/public/assets/product-icons/deepseek.svg +1 -0
- package/public/assets/product-icons/glm.svg +1 -0
- package/public/assets/product-icons/kimi.svg +1 -0
- package/public/assets/product-icons/linear.svg +1 -0
- package/public/assets/product-icons/minimax.svg +1 -0
- package/public/assets/product-icons/notion.svg +1 -0
- package/public/assets/product-icons/openai.svg +1 -0
- package/public/assets/product-icons/qwen.svg +1 -0
- package/styles/base.css +95 -0
- package/styles/fonts.css +14 -0
- package/styles/markdown.css +79 -0
- package/styles/uber-theme.css +96 -0
- package/styles/work-composer.css +222 -0
- package/styles/work-stream.css +343 -0
- package/styles/workbench.css +144 -0
- package/styles/workspace.css +260 -0
- package/test-support/backend.ts +67 -0
- package/test-support/plugin-summary.ts +8 -0
- package/test-support/setup.ts +59 -0
- package/vite-preset.ts +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Qwen</title><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"></path></svg>
|
package/styles/base.css
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* Page geometry, brand artwork, scrollbars and the app shell. */
|
|
2
|
+
|
|
3
|
+
/* HeroUI's inline span needs a layout box for its size to constrain the SVG. */
|
|
4
|
+
.spinner {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
flex-shrink: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* Page geometry and readable document content; HeroUI owns component appearance. */
|
|
10
|
+
:root {
|
|
11
|
+
color-scheme: light;
|
|
12
|
+
--background: oklch(97.2% 0 0);
|
|
13
|
+
--brand-foreground: #18181b;
|
|
14
|
+
/* Shared topbar geometry: one row on desktop, controls no taller than a HeroUI Button. */
|
|
15
|
+
--topbar-height: 44px;
|
|
16
|
+
--topbar-control-height: 36px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Approved brand artwork; component states remain owned by HeroUI. */
|
|
20
|
+
.p-brand-icon, .p-brand-name { background: var(--brand-foreground); }
|
|
21
|
+
.p-brand-icon { mask: url('/assets/brand/talgent-mark.png') center / 32px 32px no-repeat; }
|
|
22
|
+
.p-brand-name { mask: url('/assets/brand/talgent-lettering.png') center calc(50% + 3px) / 84px auto no-repeat; }
|
|
23
|
+
|
|
24
|
+
html {
|
|
25
|
+
scroll-behavior: smooth;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
* {
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* One scrollbar everywhere: a 12px grab area (thinner than Windows' 17px
|
|
33
|
+
default) whose thumb draws 6px and widens to 8px under the pointer.
|
|
34
|
+
Engines with ::-webkit-scrollbar (Chromium, Safari) take the custom gutter;
|
|
35
|
+
setting scrollbar-width/scrollbar-color on an element switches Chromium back
|
|
36
|
+
to its standard scrollbar, so only Firefox gets those. A scroller that hides
|
|
37
|
+
its bar declares scrollbar-width: none, which still wins.
|
|
38
|
+
Overlay backdrops are excluded for the reason HeroUI disabled its own global
|
|
39
|
+
scrollbar rule (@heroui/styles base.css): backdrop clicks stop closing them.
|
|
40
|
+
:where() keeps these at zero specificity so any scroller can override.
|
|
41
|
+
HeroUI scrollers (Dropdown, Select, Modal, Table, ScrollShadow) apply its
|
|
42
|
+
`scrollbar` utility, which reads --scrollbar-width/--scrollbar-color; those
|
|
43
|
+
are reset to auto where the custom gutter exists, and HeroUI's thin default
|
|
44
|
+
is kept for Firefox with this thumb color. */
|
|
45
|
+
:root, [data-theme] { --scrollbar-thumb: color-mix(in oklab, var(--foreground) 22%, transparent); }
|
|
46
|
+
@supports selector(::-webkit-scrollbar) {
|
|
47
|
+
:root, [data-theme] { --scrollbar-width: auto; --scrollbar-color: auto; }
|
|
48
|
+
}
|
|
49
|
+
:where(:not(.modal__backdrop, .alert-dialog__backdrop))::-webkit-scrollbar { width: 12px; height: 12px; }
|
|
50
|
+
:where(:not(.modal__backdrop, .alert-dialog__backdrop))::-webkit-scrollbar-track, :where(:not(.modal__backdrop, .alert-dialog__backdrop))::-webkit-scrollbar-corner { background: transparent; }
|
|
51
|
+
:where(:not(.modal__backdrop, .alert-dialog__backdrop))::-webkit-scrollbar-thumb {
|
|
52
|
+
min-height: 32px;
|
|
53
|
+
min-width: 32px;
|
|
54
|
+
border: 3px solid transparent;
|
|
55
|
+
border-radius: 999px;
|
|
56
|
+
background: var(--scrollbar-thumb) padding-box;
|
|
57
|
+
}
|
|
58
|
+
:where(:not(.modal__backdrop, .alert-dialog__backdrop))::-webkit-scrollbar-thumb:hover { border-width: 2px; background-color: color-mix(in oklab, var(--foreground) 38%, transparent); }
|
|
59
|
+
:where(:not(.modal__backdrop, .alert-dialog__backdrop))::-webkit-scrollbar-thumb:active { border-width: 2px; background-color: color-mix(in oklab, var(--foreground) 50%, transparent); }
|
|
60
|
+
@supports not selector(::-webkit-scrollbar) {
|
|
61
|
+
:where(:not(.modal__backdrop, .alert-dialog__backdrop)) { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) transparent; }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
body {
|
|
65
|
+
min-width: 0;
|
|
66
|
+
min-height: 100dvh;
|
|
67
|
+
margin: 0;
|
|
68
|
+
font-size: 16px;
|
|
69
|
+
line-height: 1.5;
|
|
70
|
+
font-variant-numeric: tabular-nums;
|
|
71
|
+
text-rendering: geometricPrecision;
|
|
72
|
+
-webkit-font-smoothing: antialiased;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
button,
|
|
76
|
+
[role="button"],
|
|
77
|
+
select,
|
|
78
|
+
label:has(input[type="file"]) {
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
button:disabled,
|
|
83
|
+
[aria-disabled="true"] {
|
|
84
|
+
cursor: not-allowed;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.app-shell {
|
|
88
|
+
display: grid;
|
|
89
|
+
grid-template-columns: 248px minmax(0, 1fr);
|
|
90
|
+
min-height: 100dvh;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.app-shell[data-sidebar-state="collapsed"] {
|
|
94
|
+
grid-template-columns: 72px minmax(0, 1fr);
|
|
95
|
+
}
|
package/styles/fonts.css
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* Inter Latin variable font used by the official HeroUI preview. SIL OFL: ../assets/fonts/Inter-OFL.txt */
|
|
2
|
+
@font-face {
|
|
3
|
+
font-family: "Inter";
|
|
4
|
+
font-style: normal;
|
|
5
|
+
font-weight: 100 900;
|
|
6
|
+
font-display: swap;
|
|
7
|
+
src: url("../assets/fonts/inter-latin.woff2") format("woff2");
|
|
8
|
+
unicode-range: U+0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
9
|
+
}
|
|
10
|
+
:root { --font-inter: "Inter", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Noto Sans SC", sans-serif; }
|
|
11
|
+
/* Monospace Latin, then the same CJK sans as body text: monospace stacks carry
|
|
12
|
+
* no CJK face, so Chinese in code otherwise falls back to a serif system font. */
|
|
13
|
+
:root { --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Noto Sans SC", monospace; }
|
|
14
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* Streamdown renders utility classes from its own bundle: beside this package
|
|
2
|
+
in the workspace, and as its sibling once installed from the registry. */
|
|
3
|
+
@source "../node_modules/streamdown/dist/*.js";
|
|
4
|
+
@source "../node_modules/@streamdown/code/dist/*.js";
|
|
5
|
+
@source "../../../streamdown/dist/*.js";
|
|
6
|
+
@source "../../../@streamdown/code/dist/*.js";
|
|
7
|
+
|
|
8
|
+
@theme inline {
|
|
9
|
+
--color-primary: var(--foreground);
|
|
10
|
+
--color-muted-foreground: var(--foreground);
|
|
11
|
+
--color-sidebar: var(--surface-secondary);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Adapt Streamdown's document theme to HeroUI without changing UI tokens.
|
|
15
|
+
* Streamdown uses `muted` for a surface; HeroUI uses it for secondary text. */
|
|
16
|
+
.app-markdown {
|
|
17
|
+
--muted: var(--surface-secondary);
|
|
18
|
+
--background: var(--surface);
|
|
19
|
+
min-width: 0;
|
|
20
|
+
max-width: 100%;
|
|
21
|
+
color: var(--foreground);
|
|
22
|
+
font-family: var(--font-sans);
|
|
23
|
+
font-size: 15px;
|
|
24
|
+
line-height: 1.75;
|
|
25
|
+
letter-spacing: normal;
|
|
26
|
+
overflow-wrap: anywhere;
|
|
27
|
+
line-break: strict;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.app-markdown > :first-child { margin-top: 0; }
|
|
31
|
+
.app-markdown > :last-child { margin-bottom: 0; }
|
|
32
|
+
.app-markdown :is(h1, h2, h3, h4, h5, h6) { line-height: 1.4; }
|
|
33
|
+
:is(.app-markdown, .app-markdown-inline) [data-streamdown="inline-code"] {
|
|
34
|
+
border: 1px solid var(--separator);
|
|
35
|
+
background: color-mix(in oklab, var(--foreground) 9%, var(--surface));
|
|
36
|
+
font-size: .9em;
|
|
37
|
+
box-decoration-break: clone;
|
|
38
|
+
}
|
|
39
|
+
/* A code block is one framed box. Streamdown's header row (language label)
|
|
40
|
+
* and outer card double the frame and add a row, so they are dropped; the copy
|
|
41
|
+
* control floats in the box's corner while the block is hovered or focused. */
|
|
42
|
+
.app-markdown [data-streamdown="code-block"] { position: relative; gap: 0; padding: 0; border: 0; border-radius: var(--radius); background: none; }
|
|
43
|
+
.app-markdown [data-streamdown="code-block-header"] { display: none; }
|
|
44
|
+
.app-markdown [data-streamdown="code-block"] > div:has(> [data-streamdown="code-block-actions"]) { position: absolute; top: 6px; right: 6px; margin: 0; height: auto; opacity: 0; transition: opacity .15s; }
|
|
45
|
+
.app-markdown [data-streamdown="code-block"]:is(:hover, :focus-within) > div:has(> [data-streamdown="code-block-actions"]) { opacity: 1; }
|
|
46
|
+
.app-markdown [data-streamdown="code-block-body"] { padding: 12px 14px; border-radius: var(--radius); font-size: 13px; line-height: 1.6; }
|
|
47
|
+
.app-markdown .task-list-item { list-style: none; }
|
|
48
|
+
.app-markdown [data-streamdown="blockquote"] { font-style: normal; }
|
|
49
|
+
:is(.app-markdown, .app-markdown-inline) [data-streamdown="link"] { text-underline-offset: 3px; }
|
|
50
|
+
.app-markdown :is(pre, code) { line-break: auto; }
|
|
51
|
+
.app-markdown [data-streamdown="table-wrapper"] { min-width: 0; max-width: 100%; }
|
|
52
|
+
/* Inherited `anywhere` lets the table squeeze columns until words split
|
|
53
|
+
* ("Rea|d"); cells keep whole words and the wrapper scrolls instead. */
|
|
54
|
+
.app-markdown :is(th, td) { overflow-wrap: break-word; }
|
|
55
|
+
|
|
56
|
+
@media (max-width: 640px) {
|
|
57
|
+
.app-markdown :is(th, td) { overflow-wrap: anywhere; white-space: normal; }
|
|
58
|
+
.app-markdown :is(th, td) code { white-space: normal; word-break: break-word; }
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Inline Markdown takes the type of the line it sits in. */
|
|
62
|
+
.app-markdown-inline { overflow-wrap: anywhere; }
|
|
63
|
+
@media (hover: none) {
|
|
64
|
+
.app-markdown [data-streamdown="code-block"] > div:has(> [data-streamdown="code-block-actions"]) { opacity: 1; }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* A source listing wraps long lines under a hanging indent, so the counter
|
|
68
|
+
* still numbers logical lines and continuations stay clear of the gutter,
|
|
69
|
+
* which is as wide as the last line number (--line-gutter, in ch). */
|
|
70
|
+
.app-code-listing [data-streamdown="code-block-body"] { overflow-x: hidden; }
|
|
71
|
+
.app-code-listing [data-streamdown="code-block-body"] :is(pre, code) { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
72
|
+
.app-code-listing pre code > span { padding-left: calc(var(--line-gutter, 2ch) + 1rem); text-indent: calc(-1 * (var(--line-gutter, 2ch) + 1rem)); }
|
|
73
|
+
.app-code-listing pre code > span::before { width: var(--line-gutter, 2ch); margin-right: 1rem; text-indent: 0; }
|
|
74
|
+
|
|
75
|
+
/* A stored document shown inside a page: its headings sit below the page
|
|
76
|
+
title around it. */
|
|
77
|
+
.app-markdown-document h1 { font-size: 18px; margin-top: 20px; }
|
|
78
|
+
.app-markdown-document h2 { font-size: 16px; margin-top: 18px; }
|
|
79
|
+
.app-markdown-document h3 { font-size: 15px; }
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/* Exported from the user-selected HeroUI Theme Builder configuration.
|
|
2
|
+
* https://heroui.com/en/themes?base=0&chroma=0&formRadius=small&hue=0&lightness=0&radius=small
|
|
3
|
+
* Retrieved 2026-09-21; values below are the official export, unchanged. */
|
|
4
|
+
/*
|
|
5
|
+
* HeroUI Theme Customization
|
|
6
|
+
* Add this to your global.css after importing @heroui/styles
|
|
7
|
+
* Only includes variables users need to customize
|
|
8
|
+
* @see https://heroui.com/docs/react/getting-started/theming
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
:root,
|
|
12
|
+
.light,
|
|
13
|
+
.default,
|
|
14
|
+
[data-theme="light"],
|
|
15
|
+
[data-theme="default"] {
|
|
16
|
+
/* Theme Colors (Light Mode) */
|
|
17
|
+
--accent: oklch(0 0 0);
|
|
18
|
+
--accent-foreground: oklch(99.11% 0 0);
|
|
19
|
+
--background: oklch(97.02% 0.0000 0.00);
|
|
20
|
+
--border: oklch(90.00% 0.0000 0.00);
|
|
21
|
+
--danger: oklch(0.573 0.2249 21.97);
|
|
22
|
+
--danger-foreground: oklch(98% 0.0200 21.97);
|
|
23
|
+
--default: oklch(94.00% 0.0000 0.00);
|
|
24
|
+
--default-foreground: oklch(21.03% 0.0059 0.00);
|
|
25
|
+
--field-background: oklch(100.00% 0.0000 0.00);
|
|
26
|
+
--field-border: transparent;
|
|
27
|
+
--field-foreground: oklch(21.03% 0.0000 0.00);
|
|
28
|
+
--field-placeholder: oklch(55.17% 0.0000 0.00);
|
|
29
|
+
--focus: oklch(0 0 0);
|
|
30
|
+
--foreground: oklch(21.03% 0.0000 0.00);
|
|
31
|
+
/* 52.5% keeps secondary text at 4.5:1 on the page, white and --default surfaces. */
|
|
32
|
+
--muted: oklch(52.50% 0.0000 0.00);
|
|
33
|
+
--overlay: oklch(100.00% 0.0000 0.00);
|
|
34
|
+
--overlay-foreground: oklch(21.03% 0.0000 0.00);
|
|
35
|
+
--scrollbar: oklch(87.10% 0.0000 0.00);
|
|
36
|
+
--segment: oklch(100.00% 0.0000 0.00);
|
|
37
|
+
--segment-foreground: oklch(21.03% 0.0000 0.00);
|
|
38
|
+
--separator: oklch(92.00% 0.0000 0.00);
|
|
39
|
+
--success: oklch(0.6277 0.1604 153.06);
|
|
40
|
+
--success-foreground: oklch(98% 0.0160 153.06);
|
|
41
|
+
--surface: oklch(100.00% 0.0000 0.00);
|
|
42
|
+
--surface-foreground: oklch(21.03% 0.0000 0.00);
|
|
43
|
+
--surface-secondary: oklch(95.24% 0.0000 0.00);
|
|
44
|
+
--surface-secondary-foreground: oklch(21.03% 0.0000 0.00);
|
|
45
|
+
--surface-tertiary: oklch(93.73% 0.0000 0.00);
|
|
46
|
+
--surface-tertiary-foreground: oklch(21.03% 0.0000 0.00);
|
|
47
|
+
--warning: oklch(0.8446 0.1525 80.6);
|
|
48
|
+
--warning-foreground: oklch(15% 0.0457 80.60);
|
|
49
|
+
--accent-soft-foreground: oklch(0 0 0);
|
|
50
|
+
|
|
51
|
+
/* Border Radius */
|
|
52
|
+
--radius: 0.25rem;
|
|
53
|
+
--field-radius: 0.25rem;
|
|
54
|
+
|
|
55
|
+
/* Font Family */
|
|
56
|
+
/* Make sure to load Inter font in your app */
|
|
57
|
+
--font-sans: var(--font-inter);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.dark,
|
|
61
|
+
[data-theme="dark"] {
|
|
62
|
+
color-scheme: dark;
|
|
63
|
+
/* Theme Colors (Dark Mode) */
|
|
64
|
+
--accent: oklch(0.9848 0 0);
|
|
65
|
+
--accent-foreground: oklch(15% 0.0000 0.00);
|
|
66
|
+
--background: oklch(12.00% 0.0000 0.00);
|
|
67
|
+
--border: oklch(28.00% 0.0000 0.00);
|
|
68
|
+
--danger: oklch(0.7044 0.1872 23.19);
|
|
69
|
+
--danger-foreground: oklch(15% 0.0500 23.19);
|
|
70
|
+
--default: oklch(27.40% 0.0000 0.00);
|
|
71
|
+
--default-foreground: oklch(99.11% 0 0);
|
|
72
|
+
--field-background: oklch(21.03% 0.0000 0.00);
|
|
73
|
+
--field-border: transparent;
|
|
74
|
+
--field-foreground: oklch(99.11% 0.0000 0.00);
|
|
75
|
+
--field-placeholder: oklch(70.50% 0.0000 0.00);
|
|
76
|
+
--focus: oklch(0.9848 0 0);
|
|
77
|
+
--foreground: oklch(99.11% 0.0000 0.00);
|
|
78
|
+
--muted: oklch(70.50% 0.0000 0.00);
|
|
79
|
+
--overlay: oklch(21.03% 0.0000 0.00);
|
|
80
|
+
--overlay-foreground: oklch(99.11% 0.0000 0.00);
|
|
81
|
+
--scrollbar: oklch(70.50% 0.0000 0.00);
|
|
82
|
+
--segment: oklch(39.64% 0.0000 0.00);
|
|
83
|
+
--segment-foreground: oklch(99.11% 0.0000 0.00);
|
|
84
|
+
--separator: oklch(25.00% 0.0000 0.00);
|
|
85
|
+
--success: oklch(0.6514 0.1321 156.22);
|
|
86
|
+
--success-foreground: oklch(15% 0.0396 156.22);
|
|
87
|
+
--surface: oklch(21.03% 0.0000 0.00);
|
|
88
|
+
--surface-foreground: oklch(99.11% 0.0000 0.00);
|
|
89
|
+
--surface-secondary: oklch(25.70% 0.0000 0.00);
|
|
90
|
+
--surface-secondary-foreground: oklch(99.11% 0.0000 0.00);
|
|
91
|
+
--surface-tertiary: oklch(27.21% 0.0000 0.00);
|
|
92
|
+
--surface-tertiary-foreground: oklch(99.11% 0.0000 0.00);
|
|
93
|
+
--warning: oklch(0.8803 0.1348 86.06);
|
|
94
|
+
--warning-foreground: oklch(15% 0.0404 86.06);
|
|
95
|
+
--accent-soft-foreground: oklch(0.9848 0 0);
|
|
96
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/* A Work's pending actions, composer, progress, charts and previews. */
|
|
2
|
+
|
|
3
|
+
.pending-action-dock {
|
|
4
|
+
position: relative;
|
|
5
|
+
z-index: 5;
|
|
6
|
+
display: grid;
|
|
7
|
+
grid-template-columns: minmax(0, 1fr);
|
|
8
|
+
align-items: start;
|
|
9
|
+
gap: 8px;
|
|
10
|
+
margin: 0 12px 7px;
|
|
11
|
+
pointer-events: auto;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.pending-card {
|
|
15
|
+
display: grid;
|
|
16
|
+
grid-template-columns: minmax(0, 1fr);
|
|
17
|
+
align-items: start;
|
|
18
|
+
gap: 10px;
|
|
19
|
+
min-height: 62px;
|
|
20
|
+
padding: 7px 9px;
|
|
21
|
+
pointer-events: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.pending-card-collapsed {
|
|
25
|
+
min-height: 48px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.composer {
|
|
29
|
+
padding: 8px 12px 10px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.composer-box {
|
|
33
|
+
position: relative;
|
|
34
|
+
padding: 10px 10px 9px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.composer-textarea {
|
|
38
|
+
min-height: 38px;
|
|
39
|
+
width: 100%;
|
|
40
|
+
resize: none;
|
|
41
|
+
padding: 0 2px;
|
|
42
|
+
font-size: 15px;
|
|
43
|
+
line-height: 1.5;
|
|
44
|
+
outline: none;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.composer-tools {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
justify-content: space-between;
|
|
51
|
+
gap: 12px;
|
|
52
|
+
margin-top: 8px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.composer-tool-row {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
gap: 4px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.composer-status-icon {
|
|
62
|
+
width: 18px;
|
|
63
|
+
height: 18px;
|
|
64
|
+
flex: 0 0 auto;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.composer-primary-actions {
|
|
68
|
+
display: inline-flex;
|
|
69
|
+
flex: 0 0 auto;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: flex-end;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.composer-primary-actions-split {
|
|
75
|
+
height: 34px;
|
|
76
|
+
overflow: visible;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.composer-split-button,
|
|
80
|
+
.composer-primary-button {
|
|
81
|
+
display: inline-flex;
|
|
82
|
+
width: 38px;
|
|
83
|
+
height: 36px;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
gap: 7px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.composer-primary-actions-split .composer-primary-button {
|
|
90
|
+
width: 42px;
|
|
91
|
+
min-width: 42px;
|
|
92
|
+
height: 34px;
|
|
93
|
+
padding: 0;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.composer-primary-actions-split .composer-primary-send {
|
|
97
|
+
width: 42px;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.composer-primary-actions-split .composer-split-menu-button {
|
|
101
|
+
width: 28px;
|
|
102
|
+
height: 34px;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.composer-primary-button:active,
|
|
106
|
+
.composer-split-button:active {
|
|
107
|
+
transform: translateY(1px) scale(0.99);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.composer-primary-button:focus-visible,
|
|
111
|
+
.composer-split-button:focus-visible {
|
|
112
|
+
outline: 2px solid rgb(0 212 164 / 0.34);
|
|
113
|
+
outline-offset: 2px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.composer-primary-button:disabled,
|
|
117
|
+
.composer-split-button:disabled {
|
|
118
|
+
cursor: not-allowed;
|
|
119
|
+
transform: none;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.progress-steps,
|
|
123
|
+
.artifacts-section {
|
|
124
|
+
display: grid;
|
|
125
|
+
gap: 6px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.artifacts-toolbar {
|
|
129
|
+
display: flex;
|
|
130
|
+
min-width: 0;
|
|
131
|
+
align-items: center;
|
|
132
|
+
justify-content: space-between;
|
|
133
|
+
gap: 10px;
|
|
134
|
+
margin-bottom: 10px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.artifacts-count {
|
|
138
|
+
font-size: 12px;
|
|
139
|
+
font-weight: 680;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.artifacts-file-list {
|
|
143
|
+
margin-top: 0;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.progress-steps {
|
|
147
|
+
font-size: 13px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.progress-steps div {
|
|
151
|
+
display: flex;
|
|
152
|
+
align-items: center;
|
|
153
|
+
gap: 8px;
|
|
154
|
+
padding: 8px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@media (max-width: 1280px) {
|
|
158
|
+
.agent-grid {
|
|
159
|
+
grid-template-columns: minmax(0, 1fr);
|
|
160
|
+
height: auto;
|
|
161
|
+
min-height: 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.agent-grid .stream-panel {
|
|
165
|
+
height: min(760px, calc(100vh - 96px));
|
|
166
|
+
min-height: min(560px, calc(100vh - 96px));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.token-chart {
|
|
172
|
+
overflow: hidden;
|
|
173
|
+
padding: 8px 9px 9px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.token-chart svg {
|
|
177
|
+
display: block;
|
|
178
|
+
width: 100%;
|
|
179
|
+
height: 145px;
|
|
180
|
+
overflow: visible;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.chart-axis-label {
|
|
184
|
+
font-size: 10px;
|
|
185
|
+
font-weight: 650;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.chart-legend {
|
|
189
|
+
display: flex;
|
|
190
|
+
gap: 12px;
|
|
191
|
+
margin-top: 6px;
|
|
192
|
+
font-size: 11px;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.chart-legend span {
|
|
196
|
+
display: inline-flex;
|
|
197
|
+
align-items: center;
|
|
198
|
+
gap: 5px;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.chart-legend i {
|
|
202
|
+
display: inline-block;
|
|
203
|
+
width: 8px;
|
|
204
|
+
height: 8px;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.html-preview-shell {
|
|
208
|
+
position: relative;
|
|
209
|
+
min-width: 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.html-preview-fullscreen {
|
|
213
|
+
position: absolute;
|
|
214
|
+
z-index: 2;
|
|
215
|
+
top: 8px;
|
|
216
|
+
right: 8px;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.html-frame {
|
|
220
|
+
width: 100%;
|
|
221
|
+
height: 220px;
|
|
222
|
+
}
|