feat: web dashboard for browsing and managing memories#537
Open
ryanhill4L wants to merge 20 commits intotoejough:mainfrom
Open
feat: web dashboard for browsing and managing memories#537ryanhill4L wants to merge 20 commits intotoejough:mainfrom
ryanhill4L wants to merge 20 commits intotoejough:mainfrom
Conversation
…y package Add Effectiveness() and Quadrant() methods to Stored type for computing memory impact metrics. Effectiveness returns followed/total ratio. Quadrant classifies into working/hidden-gem/leech/noise/insufficient-data based on effectiveness threshold (50%) and surfaced count vs median. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ects)
Add GET /api/memories/{slug} with path traversal validation, 404 handling,
and pending evaluations array. Add GET /api/stats with aggregate counts,
avg effectiveness, and quadrant distribution. Add GET /api/projects with
per-project stats sorted alphabetically. Add PendingEvaluations field to
memory.Stored and wire through ToStored for detail endpoint access.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 'serve' case to cli.go dispatch switch with --port flag (default
3001) and --data-dir flag. Wire real Retriever into Server, bind HTTP
listener to 127.0.0.1:{port}, open browser on startup (open/xdg-open),
and graceful shutdown on SIGINT/SIGTERM via signalContext().
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement memory detail at /memories/:slug with SBIA sections, effectiveness metrics, metadata (including createdAt piped from TOML), pending evaluations table, 404 handling, and back navigation to dashboard. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add PUT /api/memories/{slug}, DELETE /api/memories/{slug}, and
POST /api/memories/{slug}/restore endpoints with DI-injected
dependencies (MemoryModifier, FileOps interfaces) for testability.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add GET /api/surface?q=...&project=... endpoint that runs BM25 scoring and returns structured results with scores. Uses thin wrapper approach calling retriever + BM25 directly from server package, avoiding surface pipeline stages (haiku gate, transcript suppression, etc.) irrelevant to the API. Returns JSON with matches and nearMisses arrays, each with slug, bm25Score, finalScore, situation, and action fields. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add GET /api/activity endpoint that synthesizes events from memory timestamps (created_at, updated_at, pending_evaluations[].surfaced_at). Events sorted newest-first with page/limit pagination. Frontend page shows paginated event list with colored type badges and Load more button. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add skeleton loading placeholders, error boundaries with retry buttons, and keyboard navigation across all frontend pages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The targ check-full suite had 5 failing checks (lint-full, coverage, deadcode, check-thin-api, check-nils). This commit addresses the issues within our control: - Add frontend/go.mod to exclude node_modules from Go tooling. The flatted npm package ships Go source files that triggered 59 lint issues and all 7 check-thin-api failures. A module boundary stops all standard Go tools; check-thin-api still needs a targ update to respect go.mod boundaries. - Rename internal/context to internal/sessionctx to avoid conflict with the stdlib context package (revive var-naming violation). - Fix varnamelen (pe -> pendingEval, ts -> timestamp), wsl whitespace, and wrapcheck (wrap os.* errors in serve.go DI wrappers) lint violations. - Suppress gosec G117 on APIToken/AccessToken struct fields that are CLI flag structs and keychain payloads, not logged secrets. - Remove dead error-handling branch in resolveToken — the tokenresolver.Resolve method never returns a non-nil error. - Add tests for anthropic.Client.Caller, osFileOps (MkdirAll, Rename, Stat), and surface recordInstrumentation error paths to satisfy the 80% per-function coverage threshold. AI-Used: [claude]
Add nilaway nil guards in test files for gomega+nilaway compatibility, suppress react-refresh lint on shadcn/ui variant exports, and add postinstall script to remove flatted's Go bindings from node_modules. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e removal) Update field access from flat Behavior/Impact/Action to Content.Behavior etc., replace removed retrieve package with listerAdapter wrapping memory.Lister, and update all test struct literals. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a1f6b09 to
14148f1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
engram serveCLI subcommand that starts an HTTP server on127.0.0.1:3001with browser auto-openinternal/server/package with full REST API: list/detail/stats/projects/surface/activity endpoints plus update/delete mutations — all using dependency injection, no direct I/Ofrontend/with:Effectiveness()andQuadrant()computed methods to the memory packageinternal/context→internal/sessionctxto avoid stdlib collisionImplementation notes
MemoryLister/Surfacerinterfacestarg check-fullpasses (lint, coverage, nilaway, dead code, thin-api, decl order)npm run buildandnpm run lintpass clean/api/*to the Go server in dev; production builds are static assetsTest plan
targ check-full— all Go checks passcd frontend && npm run build— TypeScript + Vite build cleancd frontend && npm run lint— ESLint cleanengram serveopens browser, dashboard renders with real memory data🤖 Generated with Claude Code