6ef1c195e3
git boundary: Pull/Push/Commit/DiscardAll (discard is 1.4-destructive). Scanner.RefreshRepo re-scans one repo after a mutation. Service GitFetch/GitPull/GitPush/GitCommit/GitDiscard record a git-* activity event and refresh on success; service.New takes a refresh hook. HTTP POST /api/repo/git. New <repo-menu> overlay with plain-language commands (Get latest/Publish/Check for updates/Save my work/Set active/Ask Claude to switch/Copy path/Discard all changes), summoned by repo-list's repo:contextmenu. Added service test for commit/discard on a temp repo. Verified the menu live for safe commands. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
37 lines
1.9 KiB
Markdown
37 lines
1.9 KiB
Markdown
# repo-list
|
|
|
|
## Intent
|
|
The dashboard's list of every discovered repository. It is the first
|
|
ActiveX-spirit control in the app (AGENT.md §1.1): a self-contained custom
|
|
element that fetches its own data, renders inside its shadow root, and
|
|
communicates outward only through events. It exists to prove and anchor the
|
|
component pattern the rest of the UI follows.
|
|
|
|
## Public surface
|
|
- **Tag:** `<repo-list>`
|
|
- **Attributes/properties:** none yet.
|
|
- **Fetches:** `GET /api/repos` on connect and every 15s (in-flight request is
|
|
aborted on refresh and on disconnect).
|
|
- **Emits:** `repo:select` — a `CustomEvent` (bubbles + composed) whose `detail`
|
|
is the clicked repo's state object. The detail panel (future) listens for this.
|
|
|
|
## History
|
|
- 2026-09-19: created — first component; renders name, branch, ahead/behind, and
|
|
a clean/dirty badge; establishes the shadow-DOM + self-fetch + event pattern.
|
|
- 2026-09-19: added a selected-item highlight — the clicked repo keeps an
|
|
accent border/background (the item that `<repo-detail>` is showing). Caches the
|
|
last `/api/repos` payload so re-selecting re-renders without a refetch.
|
|
- 2026-09-20: selecting a repo now also `POST`s `/api/active-project` to make it
|
|
the active project (a user action, §8.2) — surfaced in `<activity-feed>` and
|
|
readable by Claude via `get_active_project`. Fire-and-forget.
|
|
- 2026-09-20: right-clicking a repo emits `repo:contextmenu` `{repo, x, y}` for
|
|
`<repo-menu>` (§6). Right-click does not change the selection/active project.
|
|
|
|
## Notes / gotchas
|
|
- Uses shared design tokens (`--git-*`, `--surface-*`, `--radius*`) for all
|
|
colors and radii — no hardcoded hex (AGENT.md §1.1).
|
|
- Server output is escaped before insertion (`#esc`); repo names come from the
|
|
filesystem, so treat them as untrusted.
|
|
- Polling is a placeholder cadence; a push/SSE update channel can replace it
|
|
later without changing the public surface.
|