You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat: A2UI cards as editable files in the Files tree #87
With #117 (#85) the card catalog lives on disk, but the app has no surface for it: to see which Cards exist, fix a label or stop one from being offered to the model you have to find the directory yourself — the same gap skills had before #67 and ADR 0016.
Describe the solution you'd like
Two surfaces, both already precedented:
Files tree — cards appear as editable files, written through the same path as any other editable file, with the optimistic-concurrency semantics of ADR 0011. Editing a card is editing a file.
Settings page — cards listed by layer (Bundled / Global / Profile) with enable/disable and per-profile suppression, exactly the shape the skills page has.
Profile Cards already live in the Files space, at the profile's workspace/cards/ (ADR 0036) — check how far editing them already works; Global Cards live at <root>/cards/ and are not in any tree yet.
The switches exist, with no UI:CardStateStore over cards.json (src/assistant/cards/__init__.py) — install-wide Disable, per-profile Suppression, default-on; CardCatalog resolves availability.
The delete cascade is built but never called:StateStore.purge clears a deleted shared Card's Disable and every profile's Suppression, so a later same-named Card starts on. Deleting a Card from this page must call it; deleting a Profile Card with rm today leaves its off-record behind.
A switch must reach running chats: the rich-views description lists each available Card's topic and is built with the agent, so a toggle must trigger the same profile reload the skill switches do — until Agent capabilities apply on the next message, not on the next reload #121 removes that need.
A file that fails to load is skipped with a log warning only; this page is the natural place to surface "this card did not load, and why".
Additional context
web/src/components/settings/SkillsPage.svelte, ProfileSkillsSection.svelte — the skills page to mirror
src/assistant/gateway/routes/skill.py — the skill routes (list, toggle, delete + purge) to mirror
Is your feature request related to a problem?
With #117 (#85) the card catalog lives on disk, but the app has no surface for it: to see which Cards exist, fix a label or stop one from being offered to the model you have to find the directory yourself — the same gap skills had before #67 and ADR 0016.
Describe the solution you'd like
Two surfaces, both already precedented:
This is #67 for cards.
What already exists (from #117)
workspace/cards/(ADR 0036) — check how far editing them already works; Global Cards live at<root>/cards/and are not in any tree yet.CardStateStoreovercards.json(src/assistant/cards/__init__.py) — install-wide Disable, per-profile Suppression, default-on;CardCatalogresolves availability.StateStore.purgeclears a deleted shared Card's Disable and every profile's Suppression, so a later same-named Card starts on. Deleting a Card from this page must call it; deleting a Profile Card withrmtoday leaves its off-record behind.rich-viewsdescription lists each available Card'stopicand is built with the agent, so a toggle must trigger the same profile reload the skill switches do — until Agent capabilities apply on the next message, not on the next reload #121 removes that need.Additional context
web/src/components/settings/SkillsPage.svelte,ProfileSkillsSection.svelte— the skills page to mirrorsrc/assistant/gateway/routes/skill.py— the skill routes (list, toggle, delete + purge) to mirrorSee also: #67 (skills as editable files in the Files tree), #121.