basalt-ui 1.41.0 → 2.0.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/AGENTS.md +46 -43
- package/CHANGELOG.md +535 -518
- package/MIGRATING.md +945 -37
- package/README.md +171 -366
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +16 -26
- package/agent/templates/DESIGN.md.tpl +1 -1
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +465 -844
- package/configs/oxlint-plugin.test.ts +661 -709
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +14 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/doctor-upgrade.d.ts +31 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +269 -0
- package/dist/cli/doctor.d.ts +13 -29
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +51 -9
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +48 -172
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +39 -132
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -37
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -23
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +77 -170
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +14 -43
- package/src/cli/doctor-upgrade.ts +392 -0
- package/src/cli/doctor.ts +81 -72
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +100 -384
- package/src/cli/init.ts +60 -51
- package/src/cli/sync.ts +13 -68
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +36 -191
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* validated, the error text, the denial reason, or the approve/deny affordances.
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
|
-
* import { ToolChip } from 'basalt-ui/agent
|
|
11
|
+
* import { ToolChip } from 'basalt-ui/agent'
|
|
12
12
|
*
|
|
13
13
|
* <ToolChip
|
|
14
14
|
* part={part}
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
import { Box, Button, Collapse, Group, Stack, Text, UnstyledButton } from '@mantine/core'
|
|
20
20
|
import { useDisclosure } from '@mantine/hooks'
|
|
21
21
|
import type { JSX } from 'react'
|
|
22
|
-
import { isToolCallSettled } from '../
|
|
23
|
-
import type { ToolCallPart } from '../
|
|
24
|
-
import { cx } from '
|
|
25
|
-
import type { BasaltProps } from '
|
|
26
|
-
import { assertRequiredProps } from '
|
|
27
|
-
import { alpha, VX } from '
|
|
22
|
+
import { isToolCallSettled } from '../parts'
|
|
23
|
+
import type { ToolCallPart } from '../parts'
|
|
24
|
+
import { cx } from '../../common/props'
|
|
25
|
+
import type { BasaltProps } from '../../common/props'
|
|
26
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
27
|
+
import { alpha, VX } from '../../tokens'
|
|
28
28
|
|
|
29
29
|
// Mirrors thread-message.tsx's micro-label/rail/code-block idiom (docs/DESIGN-SPEC.md §3/§5) —
|
|
30
30
|
// duplicated locally rather than imported, matching the existing part-list.tsx/thread-message.tsx
|
|
@@ -81,8 +81,8 @@ function stateMeta(part: ToolCallPart): { readonly label: string; readonly dotTo
|
|
|
81
81
|
// `part` is `never` here ONLY at compile time — this switch is genuinely exhaustive today,
|
|
82
82
|
// so adding an eighth ToolCallPart state without a case above makes this assignment a tsc
|
|
83
83
|
// error, the same gate `assertNever` provides. But `part` at RUNTIME can be a value this
|
|
84
|
-
// build never declared:
|
|
85
|
-
// validation, and
|
|
84
|
+
// build never declared: a consumer-owned thread store may persist to localStorage with no
|
|
85
|
+
// shape validation, and a transport may carry wire data with zero validation, so a 1.10.0-shaped
|
|
86
86
|
// flat tool part (`state` undefined) or a future/foreign `state` string both reach here.
|
|
87
87
|
// That must never THROW during render — mirrors ThreadTranscript's fallbackRenderer
|
|
88
88
|
// doctrine (unknown data renders inert, it doesn't blank the transcript) — so, unlike a
|
|
@@ -101,10 +101,10 @@ function formatDuration(ms: number): string {
|
|
|
101
101
|
|
|
102
102
|
export type ToolChipProps = BasaltProps & {
|
|
103
103
|
readonly part: ToolCallPart
|
|
104
|
-
readonly defaultExpanded?: boolean
|
|
104
|
+
readonly defaultExpanded?: boolean | undefined
|
|
105
105
|
/** Rendered only in 'approval-requested'. Omit both to render a read-only chip. */
|
|
106
|
-
readonly onApprove?: (approvalId: string) => void
|
|
107
|
-
readonly onDeny?: (approvalId: string, reason?: string) => void
|
|
106
|
+
readonly onApprove?: ((approvalId: string) => void) | undefined
|
|
107
|
+
readonly onDeny?: ((approvalId: string, reason?: string) => void) | undefined
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
/**
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* outside React state.
|
|
28
28
|
*/
|
|
29
29
|
import { useCallback, useState } from 'react'
|
|
30
|
-
import { useIsomorphicLayoutEffect } from '
|
|
30
|
+
import { useIsomorphicLayoutEffect } from '../../common/isomorphic-layout-effect'
|
|
31
31
|
|
|
32
32
|
const KEYBOARD_INSET_VAR = '--vx-keyboard-inset'
|
|
33
33
|
|
|
@@ -88,13 +88,13 @@
|
|
|
88
88
|
/** Tuning knobs passed through to `@tanstack/react-virtual`'s `useVirtualizer`. */
|
|
89
89
|
export type VirtualizeOptions = {
|
|
90
90
|
/** Extra rows rendered beyond the visible viewport, each side. Library default: 1. */
|
|
91
|
-
readonly overscan?: number
|
|
91
|
+
readonly overscan?: number | undefined
|
|
92
92
|
/** Estimated row height in px, used before a row has been measured. */
|
|
93
|
-
readonly estimateSize?: number
|
|
93
|
+
readonly estimateSize?: number | undefined
|
|
94
94
|
/** Where the transcript sits on first mount. Default 'end' — a chat transcript opens at the
|
|
95
95
|
newest message. 'start' opens at the oldest. See this module's fourth composition rule
|
|
96
96
|
above for the mechanism and why a consumer restoring its own scroll position wants 'start'. */
|
|
97
|
-
readonly initialScroll?: 'end' | 'start'
|
|
97
|
+
readonly initialScroll?: 'end' | 'start' | undefined
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -103,7 +103,7 @@ export type VirtualizeOptions = {
|
|
|
103
103
|
* scroll container, so there is no valid virtualized layout without one.
|
|
104
104
|
*/
|
|
105
105
|
export type VirtualizeProps =
|
|
106
|
-
| { readonly virtualize?: false; readonly height?:
|
|
106
|
+
| { readonly virtualize?: false | undefined; readonly height?: undefined }
|
|
107
107
|
| { readonly virtualize: true | VirtualizeOptions; readonly height: number | string }
|
|
108
108
|
|
|
109
109
|
/** The enabled branch of {@link VirtualizeProps}, with `height` no longer optional. */
|
|
@@ -126,7 +126,7 @@ export type ResolvedVirtualize = {
|
|
|
126
126
|
* transcript body with inner scroll, no `@tanstack/react-virtual` peer installed).
|
|
127
127
|
*/
|
|
128
128
|
export type RowHeightProps =
|
|
129
|
-
| { readonly virtualize?: false; readonly height?: number | string }
|
|
129
|
+
| { readonly virtualize?: false | undefined; readonly height?: number | string | undefined }
|
|
130
130
|
| { readonly virtualize: true | VirtualizeOptions; readonly height: number | string }
|
|
131
131
|
|
|
132
132
|
/** The resolved shape of {@link RowHeightProps} — exactly one of the three row body layouts. */
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentError — the closed, serializable shape of a failed turn (V2-SPEC § 6).
|
|
3
|
+
*
|
|
4
|
+
* `useAgentThreadRuns({ onError })` keeps the raw thrown value; `ThreadRunState.error` and the
|
|
5
|
+
* `chat.turn` telemetry carry this union instead, so a consumer switches on `kind` rather than
|
|
6
|
+
* parsing an error body. Classification is duck-typed on purpose: this module must never resolve
|
|
7
|
+
* the optional `ai` peer at runtime.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* - `http`: the chat endpoint answered with a non-2xx `status` (AI SDK's `APICallError`).
|
|
12
|
+
* - `stream`: the UI-message stream was malformed (AI SDK's `UIMessageStreamError`).
|
|
13
|
+
* - `server`: an `error` chunk arrived mid-stream, or any other failure; `message` is the server's
|
|
14
|
+
* `errorText` or the thrown error's message.
|
|
15
|
+
* - `aborted`: the request was aborted by something other than `stop()`.
|
|
16
|
+
*/
|
|
17
|
+
export type AgentError =
|
|
18
|
+
| { readonly kind: 'http'; readonly status: number }
|
|
19
|
+
| { readonly kind: 'stream'; readonly chunkType: string; readonly chunkId: string }
|
|
20
|
+
| { readonly kind: 'server'; readonly message: string }
|
|
21
|
+
| { readonly kind: 'aborted' }
|
|
22
|
+
|
|
23
|
+
function stringField(value: unknown, key: string): string | undefined {
|
|
24
|
+
if (typeof value !== 'object' || value === null) return undefined
|
|
25
|
+
const field = (value as Record<string, unknown>)[key]
|
|
26
|
+
return typeof field === 'string' ? field : undefined
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Maps whatever a transport threw onto the closed `AgentError` union. */
|
|
30
|
+
export function toAgentError(error: unknown): AgentError {
|
|
31
|
+
// By name, not `instanceof Error`: a `fetch` abort is a DOMException, which is not an Error.
|
|
32
|
+
if (stringField(error, 'name') === 'AbortError') return { kind: 'aborted' }
|
|
33
|
+
const status =
|
|
34
|
+
typeof error === 'object' && error !== null
|
|
35
|
+
? (error as Record<string, unknown>)['statusCode']
|
|
36
|
+
: undefined
|
|
37
|
+
if (typeof status === 'number') return { kind: 'http', status }
|
|
38
|
+
const chunkType = stringField(error, 'chunkType')
|
|
39
|
+
const chunkId = stringField(error, 'chunkId')
|
|
40
|
+
if (chunkType !== undefined && chunkId !== undefined)
|
|
41
|
+
return { kind: 'stream', chunkType, chunkId }
|
|
42
|
+
return { kind: 'server', message: stringField(error, 'message') ?? String(error) }
|
|
43
|
+
}
|
package/src/agent/history.ts
CHANGED
|
@@ -1,27 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createChatHistoryStore — persisted, ring-buffered chat history on createPersistedState.
|
|
3
|
-
*
|
|
4
|
-
* Returns a stable hook factory (call once per module per stable key) that provides the full
|
|
5
|
-
* message history, an append function, and a clear function. Messages are trimmed to `max`
|
|
6
|
-
* (default 100) via a ring-buffer strategy — oldest entries are dropped first.
|
|
7
|
-
*
|
|
8
|
-
* SSR-safe: the underlying createPersistedState handles the server snapshot (returns initial).
|
|
9
|
-
* Cross-tab: the 'storage' event propagates changes to other tabs automatically.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* import { createChatHistoryStore } from 'basalt-ui/agent'
|
|
13
|
-
*
|
|
14
|
-
* // Call once at module scope with a stable key:
|
|
15
|
-
* const useChatHistory = createChatHistoryStore({ key: 'main-chat', version: 1 })
|
|
16
|
-
*
|
|
17
|
-
* // In a component:
|
|
18
|
-
* function Chat() {
|
|
19
|
-
* const { messages, append, clear } = useChatHistory()
|
|
20
|
-
* // ...
|
|
21
|
-
* }
|
|
22
|
-
*/
|
|
23
|
-
import { useCallback, useRef } from 'react'
|
|
24
|
-
import { createPersistedState } from '../state'
|
|
1
|
+
/** ChatMessage — the typed message shape every thread carries. */
|
|
25
2
|
import type { AgentPart } from './parts'
|
|
26
3
|
|
|
27
4
|
// ── ChatMessage ───────────────────────────────────────────────────────────────
|
|
@@ -44,87 +21,5 @@ export type ChatMessage<TPart = AgentPart> = {
|
|
|
44
21
|
readonly parts: TPart[]
|
|
45
22
|
readonly createdAt: number
|
|
46
23
|
/** How the turn ended. Absent on user messages and on pre-1.11 persisted assistant messages. */
|
|
47
|
-
readonly finish?: 'complete' | 'stopped' | 'error'
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// ── createChatHistoryStore options ────────────────────────────────────────────
|
|
51
|
-
|
|
52
|
-
export type ChatHistoryStoreOptions = {
|
|
53
|
-
/** localStorage key (namespaced as `basalt:<key>`). Stable — changes key lose history. */
|
|
54
|
-
readonly key: string
|
|
55
|
-
/** Envelope version. Increment when the ChatMessage shape changes to clear old data. */
|
|
56
|
-
readonly version: number
|
|
57
|
-
/**
|
|
58
|
-
* Maximum number of messages to retain. Oldest messages are dropped when exceeded.
|
|
59
|
-
* @default 100
|
|
60
|
-
*/
|
|
61
|
-
readonly max?: number
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// ── Return type of the factory hook ──────────────────────────────────────────
|
|
65
|
-
|
|
66
|
-
export type ChatHistoryStore<TPart = AgentPart> = {
|
|
67
|
-
/** All retained messages, oldest first. */
|
|
68
|
-
readonly messages: ChatMessage<TPart>[]
|
|
69
|
-
/** Append a message. Trims to `max` if needed (ring-buffer: drops oldest). */
|
|
70
|
-
readonly append: (message: ChatMessage<TPart>) => void
|
|
71
|
-
/** Clear all messages. */
|
|
72
|
-
readonly clear: () => void
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// ── createChatHistoryStore ────────────────────────────────────────────────────
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Creates a stable persisted chat history hook for the given key + version.
|
|
79
|
-
*
|
|
80
|
-
* Call this ONCE per module (not inside a component). The returned hook can be called in any
|
|
81
|
-
* component that needs access to the same history. All instances sharing the same key stay
|
|
82
|
-
* in sync across tabs via the 'storage' event.
|
|
83
|
-
*
|
|
84
|
-
* @example
|
|
85
|
-
* // src/chat/history.ts — ONE stable creation per key:
|
|
86
|
-
* export const useChatHistory = createChatHistoryStore({ key: 'main-chat', version: 1 })
|
|
87
|
-
*
|
|
88
|
-
* // In a component:
|
|
89
|
-
* const { messages, append, clear } = useChatHistory()
|
|
90
|
-
* append({ id: crypto.randomUUID(), role: 'user', parts: [...], createdAt: Date.now() })
|
|
91
|
-
*/
|
|
92
|
-
export function createChatHistoryStore<TPart = AgentPart>(
|
|
93
|
-
opts: ChatHistoryStoreOptions,
|
|
94
|
-
): () => ChatHistoryStore<TPart> {
|
|
95
|
-
const max = opts.max ?? 100
|
|
96
|
-
|
|
97
|
-
const usePersistedMessages = createPersistedState<ChatMessage<TPart>[]>({
|
|
98
|
-
key: opts.key,
|
|
99
|
-
version: opts.version,
|
|
100
|
-
initial: [],
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
return function useChatHistoryStore(): ChatHistoryStore<TPart> {
|
|
104
|
-
const [messages, setMessages] = usePersistedMessages()
|
|
105
|
-
|
|
106
|
-
// Ref mirrors the latest committed value so that two synchronous append() calls in one
|
|
107
|
-
// render cycle accumulate correctly. createPersistedState's setter is a whole-value setter
|
|
108
|
-
// (not a functional updater), so the second call would otherwise overwrite the first.
|
|
109
|
-
const ref = useRef(messages)
|
|
110
|
-
ref.current = messages
|
|
111
|
-
|
|
112
|
-
const append = useCallback(
|
|
113
|
-
(message: ChatMessage<TPart>): void => {
|
|
114
|
-
const next = [...ref.current, message]
|
|
115
|
-
// Ring-buffer: trim to max, dropping oldest entries first.
|
|
116
|
-
const trimmed = next.length > max ? next.slice(next.length - max) : next
|
|
117
|
-
ref.current = trimmed // sync so a second append in the same tick sees the update
|
|
118
|
-
setMessages(trimmed)
|
|
119
|
-
},
|
|
120
|
-
[setMessages],
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
const clear = useCallback((): void => {
|
|
124
|
-
ref.current = []
|
|
125
|
-
setMessages([])
|
|
126
|
-
}, [setMessages])
|
|
127
|
-
|
|
128
|
-
return { messages, append, clear }
|
|
129
|
-
}
|
|
24
|
+
readonly finish?: 'complete' | 'stopped' | 'error' | undefined
|
|
130
25
|
}
|
package/src/agent/id.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Id-minting helpers shared across the agent layer: `mintThreadId` (a low-stakes client-side id —
|
|
3
|
-
* threads, run/chat namespaces — used by
|
|
4
|
-
* `
|
|
5
|
-
* id
|
|
6
|
-
* treats as its only idempotency key), and `withPartIds` (stamps sequence ids onto streamed
|
|
3
|
+
* threads, run/chat namespaces — used by `useAgentThreadRuns`'s per-send run id and
|
|
4
|
+
* `aiSdkTransport`'s fixed chat id; the thread store itself is consumer-owned), `mintMessageId`
|
|
5
|
+
* (the higher-stakes id `appendMessage` treats as its only idempotency key), and `withPartIds` (stamps sequence ids onto streamed
|
|
7
6
|
* parts). Grouped here because they're the id-minting leaves every store/hook/transport in this
|
|
8
7
|
* layer sits above — not because they share a mechanism (`mintMessageId` deliberately diverges
|
|
9
8
|
* from `mintThreadId` on rung 3; see its own doc).
|
|
@@ -145,7 +144,7 @@ export function mintMessageId(): string {
|
|
|
145
144
|
* // part.id is always defined here
|
|
146
145
|
* }
|
|
147
146
|
*/
|
|
148
|
-
export async function* withPartIds<TPart extends { id?: string }>(
|
|
147
|
+
export async function* withPartIds<TPart extends { id?: string | undefined }>(
|
|
149
148
|
runId: string,
|
|
150
149
|
source: AsyncGenerator<TPart>,
|
|
151
150
|
): AsyncGenerator<TPart & { id: string }> {
|
package/src/agent/index.ts
CHANGED
|
@@ -1,123 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* basalt-ui/agent —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (ai, use-stick-to-bottom) are all lazily loaded — importing this module does NOT eagerly resolve
|
|
7
|
-
* either of them. This module ships no markdown renderer — `agent/** -> content` is lint-blocked
|
|
8
|
-
* by design, so `PartList` takes a consumer-supplied `components.text`; basalt's own is
|
|
9
|
-
* `basalt-ui/content`'s `Markdown`.
|
|
10
|
-
*
|
|
11
|
-
* Install optional peers:
|
|
12
|
-
* bun add ai # aiSdkTransport
|
|
13
|
-
* bun add use-stick-to-bottom # BasaltStickToBottom
|
|
2
|
+
* basalt-ui/agent — the AI chat surface: a Mantine-free streaming runtime (`src/agent/**` outside
|
|
3
|
+
* `chat/`) plus the chat UI (`src/agent/chat/**`). `aiSdkTransport` (the `ai` npm package) is the
|
|
4
|
+
* one transport; `useAgentThreadRuns` is the one runner. Optional peers (`ai`,
|
|
5
|
+
* `use-stick-to-bottom`) load lazily — importing this module does not resolve either.
|
|
14
6
|
*
|
|
15
7
|
* @example
|
|
16
|
-
* import {
|
|
17
|
-
*
|
|
18
|
-
* const transport = edenTransport((input, signal) =>
|
|
19
|
-
* api.chat.post({ body: { message: input }, fetch: { signal } }),
|
|
20
|
-
* )
|
|
21
|
-
*
|
|
22
|
-
* function Chat() {
|
|
23
|
-
* const { parts, status, send, stop } = useAgentStream({ transport })
|
|
24
|
-
* return (
|
|
25
|
-
* <BasaltStickToBottom style={{ height: '400px', overflow: 'auto' }}>
|
|
26
|
-
* <PartList parts={parts} />
|
|
27
|
-
* <button onClick={() => send('Hello')}>Send</button>
|
|
28
|
-
* {status === 'streaming' && <button onClick={stop}>Stop</button>}
|
|
29
|
-
* </BasaltStickToBottom>
|
|
30
|
-
* )
|
|
31
|
-
* }
|
|
8
|
+
* import { aiSdkTransport, useAgentThreadRuns, ThreadFeed, Composer } from 'basalt-ui/agent'
|
|
32
9
|
*/
|
|
33
10
|
|
|
34
|
-
// ──
|
|
35
|
-
export type {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
Drafted,
|
|
39
|
-
StartPart,
|
|
40
|
-
TextPart,
|
|
41
|
-
ReasoningPart,
|
|
42
|
-
ToolCallPart,
|
|
43
|
-
ToolCallState,
|
|
44
|
-
SourcePart,
|
|
45
|
-
ErrorPart,
|
|
46
|
-
} from './parts'
|
|
47
|
-
export { parseAgentPart, isStartPart, isToolCallSettled, TERMINAL_TOOL_STATES } from './parts'
|
|
48
|
-
|
|
49
|
-
// ── mergePart (identity-addressed accumulator) ───────────────────────────────
|
|
50
|
-
export { mergePart } from './merge'
|
|
11
|
+
// ── Parts ─────────────────────────────────────────────────────────────────────
|
|
12
|
+
export type { AgentPart, ToolCallPart } from './parts'
|
|
13
|
+
export { parseAgentPart } from './parts'
|
|
14
|
+
export type { ForeignPart, TranscriptPart, PartRenderers, PartRenderer } from './foreign'
|
|
51
15
|
|
|
52
|
-
// ──
|
|
53
|
-
export { withPartIds } from './id'
|
|
54
|
-
|
|
55
|
-
// ── coalesceParts (adjacent + by-id merge for display) ───────────────────────
|
|
56
|
-
export { coalesceParts } from './coalesce'
|
|
57
|
-
|
|
58
|
-
// ── foreign parts (the open half of the part-renderer registry) ──────────────
|
|
59
|
-
export { definePartRenderers, narrowAgentPart } from './foreign'
|
|
60
|
-
export type {
|
|
61
|
-
ForeignPart,
|
|
62
|
-
TranscriptPart,
|
|
63
|
-
ConsumerPart,
|
|
64
|
-
PartRenderers,
|
|
65
|
-
PartRenderContext,
|
|
66
|
-
PartRenderer,
|
|
67
|
-
} from './foreign'
|
|
68
|
-
|
|
69
|
-
// ── AgentTransport + edenTransport ───────────────────────────────────────────
|
|
70
|
-
export type { AgentTransport, ResumableAgentTransport } from './transport'
|
|
71
|
-
export { edenTransport, isResumable } from './transport'
|
|
72
|
-
|
|
73
|
-
// ── aiSdkTransport (recommended default, optional peer: ai) ──────────────────
|
|
16
|
+
// ── Transport and runner ──────────────────────────────────────────────────────
|
|
74
17
|
export { aiSdkTransport } from './ai-sdk-transport'
|
|
75
|
-
export type { AiSdkTransport, AiSdkTransportOptions } from './ai-sdk-transport'
|
|
76
|
-
|
|
77
|
-
// ── useAgentStream ────────────────────────────────────────────────────────────
|
|
78
|
-
export { useAgentStream } from './use-agent-stream'
|
|
79
|
-
export type { StreamStatus, UseAgentStreamReturn } from './use-agent-stream'
|
|
80
|
-
|
|
81
|
-
// ── useAgentThreadRuns ────────────────────────────────────────────────────────
|
|
82
18
|
export { useAgentThreadRuns } from './use-agent-thread-runs'
|
|
83
|
-
export type {
|
|
84
|
-
|
|
85
|
-
UseAgentThreadRunsArgs,
|
|
86
|
-
UseAgentThreadRunsReturn,
|
|
87
|
-
} from './use-agent-thread-runs'
|
|
88
|
-
|
|
89
|
-
// ── PartList + renderer types ─────────────────────────────────────────────────
|
|
90
|
-
export { PartList } from './part-list'
|
|
91
|
-
export type {
|
|
92
|
-
PartListProps,
|
|
93
|
-
AgentPartRenderers,
|
|
94
|
-
TextPartRenderer,
|
|
95
|
-
ReasoningPartRenderer,
|
|
96
|
-
ToolCallPartRenderer,
|
|
97
|
-
SourcePartRenderer,
|
|
98
|
-
ErrorPartRenderer,
|
|
99
|
-
} from './part-list'
|
|
19
|
+
export type { ThreadRunState } from './use-agent-thread-runs'
|
|
20
|
+
export type { AgentError } from './error'
|
|
100
21
|
|
|
101
|
-
// ──
|
|
102
|
-
export {
|
|
103
|
-
export type {
|
|
104
|
-
|
|
105
|
-
// ── createChatHistoryStore + ChatMessage ──────────────────────────────────────
|
|
106
|
-
export { createChatHistoryStore } from './history'
|
|
107
|
-
export type { ChatMessage, ChatHistoryStore, ChatHistoryStoreOptions } from './history'
|
|
108
|
-
|
|
109
|
-
// ── createThreadsStore + AgentThread ──────────────────────────────────────────
|
|
110
|
-
export { createThreadsStore } from './thread'
|
|
111
|
-
export type { AgentThread, ThreadStatus, ThreadsStore, ThreadsStoreOptions } from './thread'
|
|
112
|
-
|
|
113
|
-
// ── AgentOutcome + heuristicOutcome ────────────────────────────────────────────
|
|
114
|
-
export { heuristicOutcome } from './outcome'
|
|
22
|
+
// ── Thread contracts (the store is consumer-owned) ────────────────────────────
|
|
23
|
+
export type { ChatMessage } from './history'
|
|
24
|
+
export type { AgentThread, ThreadStatus, ThreadsStore } from './thread'
|
|
115
25
|
export type { AgentOutcome, OutcomeResolver } from './outcome'
|
|
26
|
+
export type { AgentTransport, ResumableAgentTransport } from './transport'
|
|
116
27
|
|
|
117
|
-
// ──
|
|
118
|
-
export {
|
|
119
|
-
export
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
} from './
|
|
28
|
+
// ── Chat UI ───────────────────────────────────────────────────────────────────
|
|
29
|
+
export { ThreadFeed } from './chat/thread-feed'
|
|
30
|
+
export { ThreadFeedRow } from './chat/thread-feed-row'
|
|
31
|
+
export type { MessageAffordances } from './chat/message-affordances'
|
|
32
|
+
export { Composer } from './chat/composer'
|
|
33
|
+
export type { ComposerHandle, ComposerSubmit } from './chat/composer'
|
|
34
|
+
export { ToolChip } from './chat/tool-chip'
|
package/src/agent/outcome.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* multi-thread feed — only a short, past-tense summary of what happened. AgentOutcome is
|
|
6
6
|
* that DIFFERENT, smaller shape: a title, a one-line summary, and a status. Producing one
|
|
7
7
|
* is the job of an OutcomeResolver (typically an LLM-backed summarizer wired by the
|
|
8
|
-
* consumer)
|
|
8
|
+
* consumer).
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* import type { AgentOutcome } from 'basalt-ui/agent'
|
|
@@ -32,12 +32,12 @@ import type { AgentThread } from './thread'
|
|
|
32
32
|
* turn has settled, so those never apply here.
|
|
33
33
|
*
|
|
34
34
|
* Note there are THREE overlapping status-shaped unions in this module family, one per layer:
|
|
35
|
-
* `StreamStatus` (single-turn stream lifecycle, `./
|
|
35
|
+
* the internal `StreamStatus` (single-turn stream lifecycle, `./thread`), `ThreadStatus` (persisted
|
|
36
36
|
* thread lifecycle, `./thread`), and this `AgentOutcome['status']` (feed-facing terminal
|
|
37
37
|
* projection). They are related but not identical — `StreamStatus`'s `'idle'` (no turn in
|
|
38
38
|
* flight) corresponds to `ThreadStatus`'s `'pending'` (thread created, no turn started yet); the
|
|
39
39
|
* literal rename from `'idle'` to `'pending'` is intentionally deferred since it would ripple
|
|
40
|
-
* into `
|
|
40
|
+
* into `useAgentThreadRuns` and its call sites.
|
|
41
41
|
*
|
|
42
42
|
* @example
|
|
43
43
|
* const outcome: AgentOutcome = { title: 'New chat', summary: '', status: 'done' }
|
|
@@ -65,56 +65,3 @@ export type AgentOutcome = {
|
|
|
65
65
|
export type OutcomeResolver<TPart = AgentPart> = (
|
|
66
66
|
thread: AgentThread<TPart>,
|
|
67
67
|
) => AgentOutcome | Promise<AgentOutcome>
|
|
68
|
-
|
|
69
|
-
// ── heuristicOutcome ──────────────────────────────────────────────────────────
|
|
70
|
-
|
|
71
|
-
const TITLE_MAX = 48
|
|
72
|
-
const SUMMARY_MAX = 88
|
|
73
|
-
|
|
74
|
-
/** Trim `text` to at most `max` characters, appending an ellipsis when cut. */
|
|
75
|
-
function truncate(text: string, max: number): string {
|
|
76
|
-
if (text.length <= max) return text
|
|
77
|
-
return `${text.slice(0, max - 1).trimEnd()}…`
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** The leading sentence/clause of `text` (up to the first `.`, `!`, or `?`), trimmed. */
|
|
81
|
-
function firstClause(text: string): string {
|
|
82
|
-
const match = text.match(/^[^.!?]+[.!?]?/)
|
|
83
|
-
return (match?.[0] ?? text).trim()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* DEMO-ONLY provisional heuristic — never the production path. Coalesces the last assistant
|
|
88
|
-
* message's text parts into one string and derives a title/summary/status from it with no
|
|
89
|
-
* model call. Real apps should wire an OutcomeResolver backed by an LLM summarizer; this
|
|
90
|
-
* exists purely so a feed has something to render before that wiring lands.
|
|
91
|
-
*
|
|
92
|
-
* @example
|
|
93
|
-
* const outcome = heuristicOutcome(thread)
|
|
94
|
-
* // { title: 'Fixed the flaky test', summary: 'Fixed the flaky test by awaiting…', status: 'done' }
|
|
95
|
-
*/
|
|
96
|
-
export function heuristicOutcome(thread: AgentThread): AgentOutcome {
|
|
97
|
-
const lastAssistant = thread.messages.toReversed().find((message) => message.role === 'assistant')
|
|
98
|
-
if (lastAssistant === undefined) {
|
|
99
|
-
return { title: 'New chat', summary: '', status: 'done' }
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const text = lastAssistant.parts
|
|
103
|
-
.filter((part): part is Extract<AgentPart, { type: 'text' }> => part.type === 'text')
|
|
104
|
-
.map((part) => part.text)
|
|
105
|
-
.join('')
|
|
106
|
-
.trim()
|
|
107
|
-
|
|
108
|
-
if (text.length === 0) {
|
|
109
|
-
return { title: 'New chat', summary: '', status: 'done' }
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
const lastPart = lastAssistant.parts[lastAssistant.parts.length - 1]
|
|
113
|
-
const status: AgentOutcome['status'] = lastPart?.type === 'error' ? 'error' : 'done'
|
|
114
|
-
|
|
115
|
-
return {
|
|
116
|
-
title: truncate(firstClause(text), TITLE_MAX),
|
|
117
|
-
summary: truncate(text, SUMMARY_MAX),
|
|
118
|
-
status,
|
|
119
|
-
}
|
|
120
|
-
}
|
package/src/agent/part-list.tsx
CHANGED
|
@@ -241,21 +241,21 @@ const DEFAULT_RENDERERS: AgentPartRenderers = {
|
|
|
241
241
|
// ── PartList ──────────────────────────────────────────────────────────────────
|
|
242
242
|
|
|
243
243
|
export type PartListProps<TPart extends AgentPart = AgentPart> = {
|
|
244
|
-
/** The parts accumulator from
|
|
244
|
+
/** The parts accumulator from useAgentThreadRuns. */
|
|
245
245
|
readonly parts: TPart[]
|
|
246
246
|
/**
|
|
247
247
|
* Override individual part renderers. Omitted keys fall back to the headless defaults.
|
|
248
248
|
* Pass `{ text: ({ part, settled }) => <Markdown streaming={!settled} contentTrust="untrusted" density="chat">{part.text}</Markdown> }`
|
|
249
249
|
* to enable rich markdown rendering.
|
|
250
250
|
*/
|
|
251
|
-
readonly components?: Partial<AgentPartRenderers<TPart>>
|
|
251
|
+
readonly components?: Partial<AgentPartRenderers<TPart>> | undefined
|
|
252
252
|
/**
|
|
253
253
|
* `false` while the message these parts belong to is still streaming — forwarded to every
|
|
254
254
|
* renderer so a text renderer can drop out of streaming mode (and a fenced mermaid/diagram can
|
|
255
255
|
* upgrade) once the turn finishes. Defaults to `true`: a caller that knows nothing about a run
|
|
256
256
|
* is rendering a finished list, and un-settled must be opted into by the thing that does know.
|
|
257
257
|
*/
|
|
258
|
-
readonly settled?: boolean
|
|
258
|
+
readonly settled?: boolean | undefined
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
/**
|