═══════════════════════════════════════════════════════════════════════
@bytelyst/ai-ui bump 0.1.0 → 0.4.0
═══════════════════════════════════════════════════════════════════════
Folds three more roadmap milestones into the flagship package.
0.2: <ToolCallCard> — disclosure card; status pill, JSON preview
<CitationChip> — inline citation marker + hover preview
useToolCalls() — per-turn tool-invocation state machine
(begin/update/settle/clear); preserves insertion
order across updates; auto-computes durationMs
0.3: <AgentTimeline> — vertical think→act→observe→respond trace;
embeds ToolCallCard for kind='tool_call' steps
<ModelPicker> — model dropdown with capability chips, cost,
latency, context window, disabled gating
0.4: <ToolPalette> — searchable tool list with MCP-style discovery
(source can be ToolDescriptor[] OR an
'mcp://...' URL resolved via a discover
adapter; default adapter is fetch+JSON)
Types extended:
- ToolInvocation, ToolCallStatus, Citation added
- Message gains optional toolInvocations + citations
Tests: 53/53 (27 old + 26 new) · typecheck clean · 7.65 KB / 35 KB
═══════════════════════════════════════════════════════════════════════
NEW PACKAGE: @bytelyst/command-palette@0.1.0
═══════════════════════════════════════════════════════════════════════
Wave 3 deliverable — Cmd-K dialog with three modes and pluggable command
registration. Roadmap §Wave 3 of ROADMAP_2026.md.
What's exported:
<CommandRegistryProvider> — wrap your app once
<CommandPalette> — the dialog (Cmd-K / Ctrl-K)
useRegisterCommands() — contribute commands for component lifetime
useCommands() — read snapshot
useCommandRegistry() — imperative access
useCommandPalette() — open/close state + global hotkey
fuzzyScore / scoreCommand — exposed for tests + custom UIs
Three modes:
actions — invoke a registered run()
navigate — jump to href via onNavigate or window.location
ask-ai — host-supplied askAiPanel; default renders an 'Ask AI: <q>'
suggestion that products can wire to <ChatStream>
Keyboard:
↑ ↓ navigate selection
Enter activate
Tab cycle mode tabs (Shift+Tab reverses)
Esc close
Niceties:
- Fuzzy matcher (substring + subsequence with light scoring)
- localStorage-backed recents float to top of actions mode
- requires() gate hides commands wholesale (auth / feature-flag)
- aria-haspopup, role=dialog, role=listbox, role=option, aria-selected
- Backdrop click closes; Esc handler at document level
- Hotkey suppressed by Cmd-K / Ctrl-K default; configurable
Tests: 26/26 · typecheck clean · 3.91 KB / 15 KB
═══════════════════════════════════════════════════════════════════════
CI plumbing
═══════════════════════════════════════════════════════════════════════
- .size-limit.cjs gains @bytelyst/command-palette entry
- .gitea/workflows/size-limit.yml build filter expanded
- All 8 measured packages comfortably under budget
Refs:
learning_ai_uxui_web/docs/ROADMAP_2026.md §Wave 2 (0.2/0.3/0.4)
learning_ai_uxui_web/docs/ROADMAP_2026.md §Wave 3 (Command palette)
docs/ROADMAP_2026_DECISIONS.md §10 (Vercel AI SDK shape continues)
83 lines
2.8 KiB
JavaScript
83 lines
2.8 KiB
JavaScript
/**
|
|
* ROADMAP TODO #6 — Bundle-size budgets for @bytelyst/* packages.
|
|
*
|
|
* Each entry measures the gzipped size of a package's built `dist/`
|
|
* output. The 'limit' field is the budget — PRs that exceed it fail CI.
|
|
*
|
|
* Initial budgets per learning_ai_uxui_web/docs/ROADMAP_2026.md §5
|
|
* "Performance budgets":
|
|
* - Pure-TS clients → 8 KB
|
|
* - Feature packs → 6 KB
|
|
* - UI primitive slices → ~1 KB per primitive (whole pkg < 30 KB)
|
|
* - Tokens / design-tokens → 12 KB (CSS heavy)
|
|
*
|
|
* Pilot scope (this commit): wire up 6 representative packages. Rollout
|
|
* to the rest of @bytelyst/* lands incrementally as packages stabilise.
|
|
*
|
|
* Run locally:
|
|
* pnpm -w size — full check
|
|
* pnpm -w size --why <name> — explain what's contributing
|
|
*
|
|
* To add a package:
|
|
* 1. Confirm the package has 'build' in its scripts and emits to dist/
|
|
* 2. Add an entry below with name, path, and limit
|
|
* 3. Run `pnpm -w size --update` to record the current baseline if
|
|
* you're starting under-budget (optional)
|
|
*/
|
|
module.exports = [
|
|
// ── Pure-TS clients (8 KB) ──────────────────────────────────────
|
|
{
|
|
name: '@bytelyst/api-client',
|
|
path: 'packages/api-client/dist/index.js',
|
|
limit: '8 KB',
|
|
gzip: true,
|
|
},
|
|
{
|
|
name: '@bytelyst/auth-client',
|
|
path: 'packages/auth-client/dist/index.js',
|
|
limit: '8 KB',
|
|
gzip: true,
|
|
},
|
|
// ── Feature packs (6 KB) ────────────────────────────────────────
|
|
{
|
|
name: '@bytelyst/celebrations',
|
|
path: 'packages/celebrations/dist/index.js',
|
|
limit: '6 KB',
|
|
gzip: true,
|
|
},
|
|
{
|
|
name: '@bytelyst/quick-actions',
|
|
path: 'packages/quick-actions/dist/index.js',
|
|
limit: '6 KB',
|
|
gzip: true,
|
|
},
|
|
// ── React bindings (10 KB — slightly higher for hooks + context) ─
|
|
{
|
|
name: '@bytelyst/react-auth',
|
|
path: 'packages/react-auth/dist/index.js',
|
|
limit: '10 KB',
|
|
gzip: true,
|
|
},
|
|
// ── Shells / composite UI (30 KB) ───────────────────────────────
|
|
{
|
|
name: '@bytelyst/dashboard-shell',
|
|
path: 'packages/dashboard-shell/dist/index.js',
|
|
limit: '30 KB',
|
|
gzip: true,
|
|
},
|
|
// ── AI-native UI (35 KB — streaming + parsing is heavy) ─────────
|
|
{
|
|
name: '@bytelyst/ai-ui',
|
|
path: 'packages/ai-ui/dist/index.js',
|
|
limit: '35 KB',
|
|
gzip: true,
|
|
},
|
|
// ── Command palette (15 KB — fuzzy + dialog + registry) ─────────
|
|
{
|
|
name: '@bytelyst/command-palette',
|
|
path: 'packages/command-palette/dist/index.js',
|
|
limit: '15 KB',
|
|
gzip: true,
|
|
},
|
|
];
|