feat: user-customizable draft welcome starters

Let users curate the draft welcome chips: pin existing commands and skills
as starters, remove them, and drag to reorder — all inline on the draft
screen via a '+' picker dialog and per-chip remove, with no separate
settings UI.

A starter references a command or skill; its scope is inherited from the
item (user-scope -> global, project-scope -> per-project). Global starters
persist to settings.json (useUIStore + client/server sanitizers); project
starters persist to the project config alongside worktree setup commands.
The two scopes form ordered namespaces shown global-first then project,
reorderable only within each group.

The six built-in Session magic-prompt commands are the default global set
and stay available in the picker for re-pinning if removed; they keep their
bespoke icons, while user commands/skills fall back to the Commands/Skills
section icons. Chip labels are normalized (/simplify-code -> 'Simplify
code'). Missing commands/skills are skipped rather than shown broken.

Drag-to-reorder works on desktop and mobile: rectSortingStrategy for the
wrapping multi-row layout, CSS.Translate (no scale) so the lifted chip
doesn't stretch, and MouseSensor + long-press TouchSensor so taps still
submit and swipes still scroll. The '+' picker is a searchable dialog on
every surface.
This commit is contained in:
Bohdan Triapitsyn
2026-05-30 02:04:32 +03:00
parent af615df719
commit 6d4f070d91
18 changed files with 590 additions and 50 deletions
+2
View File
@@ -1,4 +1,5 @@
import type { WorktreeMetadata } from '@/types/worktree';
import type { DraftStarterRef } from '@/lib/draftStarters';
export type RuntimePlatform = 'web' | 'desktop' | 'vscode';
@@ -672,6 +673,7 @@ export interface SettingsPayload {
gitModelId?: string;
pwaAppName?: string;
mobileKeyboardMode?: 'native' | 'resize-content';
draftStarters?: DraftStarterRef[];
[key: string]: unknown;
}