Repository navigation
Claude/lucid archimedes 6xkh25 - #705
Closed
WhoAlwaysZzz wants to merge 79 commits into
Closed
WhoAlwaysZzz wants to merge 79 commits into
WhoAlwaysZzz wants to merge 79 commits into
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
prism-react-renderer bundles only ~15 grammars, so Java, C#, Ruby, PHP, shell, TOML, Dockerfiles and friends rendered as plain text. Load the missing grammars on demand from prismjs/components, resolve the language from the file path client-side (incl. Dockerfile/Makefile/Gemfile), and pick a light or dark highlight theme from the active dashboard theme. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Prism emits class names like "token table" (TOML headers, Markdown tables) that collide with Tailwind's .table utility (display: table), splitting one source line across several rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Opening a function or class used to land on line 1 of its file even though the header said e.g. "Lines 340-380". Scroll the range into view, and accept an optional target line in openCodeViewer (marked more strongly) for jumping to a specific line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Self-contained (Node built-ins only) so the dashboard dev server and the standalone viewer can share it, like staleness.ts. Searches an allowlist of project-relative files with literal/regex, case and whole-word options, skips binary and oversized files, caches file contents by mtime and caps the result size. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Expose core's content search from the dashboard dev server and mirror it in the standalone viewer. Only files listed in the knowledge graph are searched — the same allowlist /file-content.json enforces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Resolve a (path, line) location to the file node or the innermost function/class whose lineRange covers the line, tolerant of ./ and backslash path spellings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
A third search mode next to Fuzzy/Semantic queries /search-content.json (debounced, cancellable) with match-case / whole-word / regex toggles. Hits are grouped by file with the matched text marked; choosing one drills into the file in the graph, selects the innermost node covering the line and opens the code viewer at that line. Files with hits light up in the graph like fuzzy results. The results dropdown now also supports arrow keys + Enter in every mode and shows up to 10 node results instead of 5. Result counts use a translated plural instead of appending an English "s". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
annotations.json lives next to the knowledge graph in the data directory, separate from knowledge-graph.json so /understand never overwrites it. Includes payload validation, atomic writes and a shared GET/PUT request handler for the dashboard server and the viewer. A corrupt file is never reported as empty, so clients can't save over it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
The dashboard dev server reads and writes the data directory's annotations.json (token-gated, JSON-only PUT). The standalone viewer keeps its read-only contract: it serves committed annotations but refuses writes, so viewer edits stay in the browser. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
NodeInfo's Tags section gains removable personal tags with a small "+" pill, and a one-line "+ Add note" link opens a note editor (Ctrl+Enter saves, Esc cancels). Annotations persist to the project's annotations.json through the dashboard server, falling back to this browser's localStorage when the server is read-only or unreachable. Personal tags and notes are folded into the fuzzy search index. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
A small accent pencil next to the complexity label shows which nodes carry your tags or notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
A collapsed container rendered as an empty box with no affordance. Show a ▸/▾ disclosure marker and a centred "Click to expand" label. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Picking a search result, sidebar link or file-tree entry whose node sits in a collapsed container only produced a "1 hit" badge. Expand that container and keep the node centred while the layout settles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Its amber-100 text is tuned for dark backgrounds and was near-invisible on the Light Minimal preset; mirror the light override WarningBanner already gets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
The slide-up source panel was fixed at 40vh. Drag its top edge to resize (height remembered per browser, clamped so the graph stays visible); double-click the edge to return to the default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Layer, selected node, view mode, open code viewer (+ line) and search live in the hash: a refresh restores where you were, back/forward walk your navigation (search typing replaces instead of pushing), and a link can point someone at a specific node. A reloaded graph re-applies the URL instead of resetting it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
… backgroundColor React warned when the highlight theme changed while the viewer was open. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
One box for files (fuzzy path match), graph nodes, commands (diff, filters, export, path finder, personas, themes, detail level, view mode, copy link, selected-node actions) and a jump into full-text code search. Works from inside text fields; commands named by the query sort first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Add a tsconfig for server/ (Node types) to the build graph and raise the app's lib to ES2022 — src/__tests__ imports vite.config, which pulls in core code using Array.prototype.at. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
/ai/config (GET/PUT) and /ai/chat (POST, Server-Sent Events) behind the access token. Two protocols reach practically any vendor: OpenAI-compatible chat/completions (GPT, DeepSeek, GLM, Qwen, Moonshot, OpenRouter, Ollama…) and the Anthropic Messages API via the official SDK with an optional custom base URL. On the official Anthropic API with a model that supports it, server-side refusal fallback is enabled. Settings incl. the API key live in ~/.understand-anything/ai.json (0600), never in the project, and the key is never sent back to the browser. Also includes an OpenAI-compatible embeddings client for semantic search. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…lder Browser wrapper for /ai/config and the streaming /ai/chat endpoint, starting-point presets for common vendors (all fields stay editable), and a bounded prompt context per node: summary, user notes/tags, relationships and a line-numbered source excerpt around its range. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…ontent Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…ator class Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
The user's note (plus line notes and tags) becomes each step's description; functions and classes lead with their file so the tour navigates to the right layer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
startCustomTour(steps) plays arbitrary steps through the existing step/next/prev actions; stopTour and startTour clear it, so the graph's own tour is untouched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Function, class-name and plain tokens that name a graph node (a definition in the same file first, then in files this file imports) get a dotted underline on hover; Ctrl/Cmd+click selects that node and opens its code at its line range, staying in the expanded modal. Names resolve once per file against a name index cached per graph. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…alysis Breadth-first over reverse dependency edges with shortest depth; edge direction (incl. tested_by/configures pointing the other way) lives in a shared helper so impact, rules and review order agree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Selectors are path globs (**, *, ?, {a,b}, plain prefixes) or layer:<id or
name>; functions and classes inherit their file's path and layers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…down Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
A collapsible outline lists the graph's function/class nodes inside the open file (by filePath + lineRange or contains edges), nested by range; clicking one scrolls to and flashes its first line. Thin bars in the gutter mark each node's lineRange (hover shows name and lines, click jumps), with the open node's bar in the accent colour. The outline toggle is remembered in localStorage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
The tour's fit-to-highlight waits for every highlighted node to render, and sub-file nodes are hidden at the default file detail level, so a function step zoomed out to the whole layer. Highlight its file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Clicking a gutter line number opens a small inline editor (Ctrl/Cmd+Enter saves, Esc cancels, saving empty deletes). Notes are stored on the file's node as annotation `lines`, so they show whichever node of the file is open; lines with a note get an accent dot in the gutter and the note inline below them (click to edit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
A "My tour from notes" button (Project overview and Learn panel, shown once nodes are annotated) opens a builder: filter by personal tag, pick graph or note-time order, reorder or drop steps, then play it with the regular tour, the note as each step's text. The palette offers the builder, one-step "Play my tour: #tag" commands and Exit tour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
A file counts as read once the code viewer has shown its source. Read files get a check mark in the Files tab, Project Overview shows an "N / M files read" bar, and the palette offers "Reset reading progress". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Obsidian reads [[README.md]] or [[api.ts]] as a link to a file with that extension, not to the README.md.md / api.ts.md notes we write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Two new Export menu entries and palette commands download the user's annotations, built in the browser: one Markdown file, or a zip with an index note plus one note per annotated node. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo # Conflicts: # understand-anything-plugin/packages/dashboard/src/components/ProjectOverview.tsx # understand-anything-plugin/packages/dashboard/src/hooks/usePaletteCommands.ts # understand-anything-plugin/packages/dashboard/src/locales/en.ts # understand-anything-plugin/packages/dashboard/src/locales/ja.ts # understand-anything-plugin/packages/dashboard/src/locales/ko.ts # understand-anything-plugin/packages/dashboard/src/locales/ru.ts # understand-anything-plugin/packages/dashboard/src/locales/zh-TW.ts # understand-anything-plugin/packages/dashboard/src/locales/zh.ts
New `analysis` section in all six locales (hotspots, impact analysis, architecture rules, PR review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
… mark map analysisStore holds the active overlay (hotspots, impact, rules, review) and derives nodeMarks + markedEdges from it; CustomNode tints/rings marked nodes (heat scale, impact depth, violations, review state) with theme-aware tokens, and GraphView highlights marked edges, also on aggregated container edges. Marked nodes are exempt from selection and diff fading. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…or for the overlays Header: Hotspots toggle with 30/90/365-day window, Rules button with a violation badge, Review button when a diff overlay is loaded. Sidebar: hottest files, impact list grouped by depth, violations per rule, and the review walkthrough (next/prev, arrow keys, reviewed checkbox, comment, progress, copy summary as Markdown; persisted per project + diff in localStorage). The rules editor saves arch-rules.json, or this browser's storage on read-only servers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
An Impact button next to Ask AI / Focus toggles the impact overlay for the node; a churn card shows commits, last change and authors for its file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
… review Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…review Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo # Conflicts: # understand-anything-plugin/packages/dashboard/src/hooks/usePaletteCommands.ts # understand-anything-plugin/packages/dashboard/src/locales/en.ts # understand-anything-plugin/packages/dashboard/src/locales/ja.ts # understand-anything-plugin/packages/dashboard/src/locales/ko.ts # understand-anything-plugin/packages/dashboard/src/locales/ru.ts # understand-anything-plugin/packages/dashboard/src/locales/zh-TW.ts # understand-anything-plugin/packages/dashboard/src/locales/zh.ts
…CLAUDE.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
…cies Marketplace installs only see understand-anything-plugin/, so its own pnpm-lock.yaml must list @anthropic-ai/sdk, @types/node and prismjs for --frozen-lockfile installs to succeed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Ask AI, saving annotations, semantic search and rule editing only work on the dev server, so /understand-dashboard now installs and starts it first and falls back to this fork's prebuilt read-only viewer release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
spawn('xdg-open') emits an unhandled 'error' on headless Linux and
minimal WSL, which crashed the viewer right after it printed its URL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S2asCSfqSH4uBLvLdzKJHo
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
Linked issue(s)
How I tested this
pnpm lintpnpm --filter @understand-anything/core testpnpm testVersioning