2d7f814a23
Slice 1: internal/service is the one capability layer both the HTTP API and the MCP server call (AGENT.md 1.7); /api/repos and /api/repo route through it. Slice 2: internal/mcp serves an MCP server over Streamable HTTP at /mcp (go-sdk v1.8.0) with read tools list_repos and get_repo as thin adapters over the service, plus a round-trip test. Enabled air polling so hot reload works across the Docker-on-Windows bind mount. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Changelog
Append-only running history of all changes (AGENT.md §9.1). Newest last.
2026-09-19 — Project scaffold
- What: Initial runnable skeleton for the GitManager multi-repo dashboard.
Added the Go backend (
cmd/server/main.go+internal/{config,logging,git,repos,render}), the Echo HTTP server with/,/help,/healthz, and/api/repos, a read-only repo scanner that discovers repositories underGIT_REPO_ROOTSand keeps an in-memory index, the<repo-list>web component, shared design tokens (web/static/app.css), page shells (web/templates/{index,help}.html), and the dev tooling:Dockerfile(build/dev/runtime stages),docker-compose.yml,.air.toml,.env.example,.gitignore,go.mod. - Why: Stand up the architecture defined in AGENT.md so feature work can begin.
- Affects: whole repo (foundation);
components/repo-list.
2026-09-19 — Repo detail panel
- What: Added the
<repo-detail>component (right dock) that listens forrepo:selectand shows a repo's remotes, local branches (current + upstream), and 20 most recent commits. Backed by a newGET /api/repo?path=endpoint (restricted to indexed repos) and new read-only git readers (LocalBranches,RecentCommits,RemoteDetails) plusrepos.BuildDetailandIndex.Get.<repo-list>now highlights the selected repo;index.htmllays the two panels out left/right; help page documents the detail view. - Why: Make the dashboard drill into a single repository (the detail half of the list+detail default in AGENT.md §4).
- Affects:
components/repo-detail,components/repo-list,internal/git,internal/repos,cmd/server,web/templates.
Notes to confirm (from AGENT.md §11)
- Go module path is the placeholder
gitmanager; change it if this gets a canonical import path (e.g. a GitHub URL). - All items in AGENT.md §11 (discovery strategy, background fetch, forge providers, listen address, container credentials) remain open.
2026-09-19 — Redefine the app as a two-way Claude companion (contract only)
- What: Updated AGENT.md to make the Claude integration the defining pillar,
no code yet. §0 now states the two-way purpose (Claude↔app) and the
non-expert, GUI-first goal; added law §1.7 (one service layer behind both the
GUI and the MCP server); stack table gained MCP server (Go SDK over Streamable
HTTP at
/mcp), SSE (app→browser), and flipped forge to Gitea-first read+write; layout addedinternal/{service,mcp,activity}; §6 added the right-click plain-language command vocabulary; §8 rewritten into "Claude integration" (8.1 MCP server, 8.2 activity feed + active project, 8.3 graceful project handoff, 8.4 forge read+write with "Merge & clean up"); §10 step 4 and §11 updated (three decisions resolved, new open items)..env.examplenow documentsGITEA_TOKEN(read+write scope). - Why: Thomas described the real vision — the app should act as an extension
of Claude: usable like an MCP by Claude, notifying Claude of in-app actions to
stay in sync, cooperative project handoff when he's interrupted, plain-language
right-click commands for non-experts, and one-click "merge & clean up" so PRs
stop cluttering repos. Decisions locked: cooperative pull-first handoff; Gitea
writes enabled (confirmed per §1.4); MCP over HTTP
/mcp. - Affects:
AGENT.md,.env.example(architecture/contract only — no code).
2026-09-19 — Service layer + MCP server (Claude integration, read tools)
- What: Slice 1 — extracted
internal/service, the one capability layer both the HTTP API and the MCP server call (§1.7); the/api/reposand/api/repohandlers now route through it. Slice 2 — addedinternal/mcp: an MCP server (github.com/modelcontextprotocol/go-sdkv1.8.0) served over Streamable HTTP at/mcp, with read toolslist_reposandget_repoas thin adapters over the service. Added a round-trip test (internal/mcp/mcp_test.go) using a real temp git repo + the in-memory MCP transport. Verified the HTTP/mcphandshake locally and in Docker. - Why: First step of the two-way Claude integration (AGENT.md §8.1) — prove Claude can connect to the app over MCP before building deeper features on it.
- Affects:
internal/service(new),internal/mcp(new),cmd/server/main.go,go.mod/go.sum,.air.toml. - Gotcha: Docker-on-Windows bind mounts do NOT deliver filesystem events, so
air's watch-based reload silently never fired. Fixed by enabling air polling
(
poll = true,poll_interval = 500in.air.toml).