Skip to content

feat: A2UI cards as editable files in the Files tree #87

Description

@Lancetnik

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:

  • 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.

This is #67 for cards.

What already exists (from #117)

  • 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
  • ADR 0011 (editable files), ADR 0016 (layers + suppression), ADR 0007 (files, user-writable tab), ADRs 0036–0039 (Cards)

See also: #67 (skills as editable files in the Files tree), #121.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions