═══════════════════════════════════════════════════════════════════════
@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)
78 lines
2.1 KiB
YAML
78 lines
2.1 KiB
YAML
name: Size limit
|
|
|
|
# ROADMAP TODO #6 — enforces bundle-size budgets defined in
|
|
# .size-limit.cjs on every push to main and every PR. Failures block
|
|
# merge so that bundle bloat is a visible, deliberate decision.
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- 'packages/**'
|
|
- 'pnpm-lock.yaml'
|
|
- 'pnpm-workspace.yaml'
|
|
- 'package.json'
|
|
- '.size-limit.cjs'
|
|
- '.gitea/workflows/size-limit.yml'
|
|
pull_request:
|
|
branches: [main]
|
|
paths:
|
|
- 'packages/**'
|
|
- 'pnpm-lock.yaml'
|
|
- 'pnpm-workspace.yaml'
|
|
- 'package.json'
|
|
- '.size-limit.cjs'
|
|
|
|
concurrency:
|
|
group: size-limit-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
size:
|
|
name: size-limit
|
|
runs-on: [ubuntu-latest, bytelyst, hostinger]
|
|
container:
|
|
image: node:20-bookworm
|
|
timeout-minutes: 10
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
github-server-url: https://gitea.bytelyst.com
|
|
|
|
- name: Install pinned pnpm
|
|
run: |
|
|
npm install -g pnpm@10.6.5
|
|
pnpm --version
|
|
|
|
- name: Install dependencies
|
|
run: HUSKY=0 pnpm install --frozen-lockfile
|
|
|
|
- name: Build measured packages
|
|
# size-limit measures dist/ — ensure every entry in
|
|
# .size-limit.cjs has a fresh build before running.
|
|
run: |
|
|
pnpm --filter @bytelyst/api-client \
|
|
--filter @bytelyst/auth-client \
|
|
--filter @bytelyst/celebrations \
|
|
--filter @bytelyst/quick-actions \
|
|
--filter @bytelyst/react-auth \
|
|
--filter @bytelyst/dashboard-shell \
|
|
--filter @bytelyst/ai-ui \
|
|
--filter @bytelyst/command-palette \
|
|
run build
|
|
|
|
- name: Enforce size budgets
|
|
run: pnpm size
|
|
|
|
- name: Upload size report
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: size-limit-${{ github.run_id }}
|
|
path: |
|
|
.size-limit/
|
|
retention-days: 14
|
|
continue-on-error: true
|