Replace platform-specific install approaches with a consistent
per-skill symlink pattern for OpenCode and Codex (both share
~/.agents/skills/), matching the OpenCode docs requirement of
<name>/SKILL.md discovery.
Changes:
- OpenCode: migrate from opencode.json plugin config to direct
skill symlinks in ~/.agents/skills/<name>/
- Codex: replace broken bundle symlink (understand-anything/ had
no SKILL.md at root) with individual per-skill symlinks, matching
OpenCode exactly
- All platforms: add universal ~/.understand-anything-plugin symlink
so understand-dashboard SKILL.md can reliably find packages/dashboard/
- All platforms: use idempotent [ -e ] || [ -L ] || ln -s guard to
handle multi-platform installs on the same machine
- All platforms: use ln -sf and rm -f for robust re-installs and
partial uninstalls
- understand-dashboard/SKILL.md: replace fragile dirname-based path
resolution with a prioritized candidate loop with explicit error
guard
- Remove orphaned .opencode/plugins/understand-anything.js and its
build scaffolding
- Update all three README variants (en, zh-CN, ja-JP) to reflect
new OpenCode AI-driven install method
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
OpenCode installs the repo via git and looks at the root for the plugin
entry point. Our skills/agents live inside understand-anything-plugin/,
so OpenCode couldn't find them.
- Add .opencode/plugins/understand-anything.js that uses the config hook
to inject understand-anything-plugin/skills/ into skills.paths
- Add "main" field to root package.json pointing to the plugin entry
- Update INSTALL.md with version pinning and troubleshooting sections
Closes#16
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
15-task TDD plan covering LanguageConfig types, LanguageRegistry,
12 language configs, GenericTreeSitterPlugin, prompt snippets,
and migration from TS-only TreeSitterPlugin.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Design for making Understand-Anything language-agnostic instead of
TypeScript-heavy. Covers LanguageConfig registry, GenericTreeSitterPlugin,
language-aware prompts, and support for 12 languages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set minZoom to 0.01 so fit-view works on graphs with hundreds of nodes
- Add TourFitView to pan/zoom to highlighted nodes during guided tours
- Add SelectedNodeFitView to center graph on node selected via search
- Wrap GraphView in ReactFlowProvider to enable useReactFlow() hooks
Thanks to @blackboxaicode for the insight on these improvements.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The original commit 9fe003a introduced normalization logic in three
separate places (Phase 4 inline, Phase 5 inline, Phase 5.5), creating
an ordering conflict where "do not use field X" rules appeared before
"convert field X to field Y" rules. An LLM following instructions
sequentially could drop legacy fields before converting them.
- Consolidate all layer normalization into Phase 4 as ordered steps
- Consolidate all tour normalization into Phase 5 as ordered steps
- Remove redundant Phase 5.5 entirely
- Fix misleading "from current prompt" comments about envelope format
- Add defensive handling for nodes-as-objects edge case
- Wrap JSON examples in arrays for visual consistency with prompts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update raw GitHub URLs in README to remove understand-anything-plugin/
prefix for Codex and OpenClaw INSTALL.md paths. Replace Cursor section
with auto-discovery via .cursor-plugin/plugin.json.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add .cursor-plugin/plugin.json with skills/agents paths pointing into
understand-anything-plugin/. Add .claude-plugin/plugin.json alongside
existing marketplace.json.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move .codex/, .opencode/, .openclaw/ from understand-anything-plugin/ to
repo root so each AI coding platform discovers its config at the standard
location. Delete .cursor/ (replaced by .cursor-plugin/plugin.json in next
commit). Plugin source code stays inside understand-anything-plugin/.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace full flatten approach with minimal restructure: only move platform
config directories (.codex, .opencode, .openclaw) to repo root for discovery.
Add Cursor/Claude plugin descriptors. Remove Gemini extension. Keep all
plugin source code inside understand-anything-plugin/.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace all named agent dispatches (project-scanner, file-analyzer,
architecture-analyzer, tour-builder, graph-reviewer) with subagent
dispatches using prompt template files. Add context injection for each
phase including README content, package manifest, directory tree,
framework-specific guidance, and cross-validation data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each subagent dispatch now injects relevant context from the main session:
- Scanner: README + package manifest
- File Analyzer: framework info + project description from Phase 1
- Architecture Analyzer: framework layer hints + directory tree
- Tour Builder: README + entry point
- Graph Reviewer: scan inventory for cross-validation + phase warnings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Guard diffNodeIds construction and per-edge lookups behind diffMode
check to avoid unnecessary Set spreads and has() calls on every
graph recompute when diff mode is inactive.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Edge weights, node ID prefix conventions, and tag formatting were listed
in both Check 1 (Schema Validation — Critical) and Check 7 (Quality —
Warning). A deterministic script following check headings would classify
these as warnings, potentially approving invalid graphs. Remove the
duplicates from Check 7 since Check 1 already covers them as critical.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The exclusion rule conditionally kept .sh files for bash-first projects,
but the source-file whitelist and language mapping table had no .sh entry,
causing retained shell files to be dropped or untyped. Add .sh/.bash to
the whitelist and language table (mapped to 'bash'), and remove the
conditional exclusion rule.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Duplicate node IDs were listed under Check 6 (Warning) but classified as
critical in the Severity Classification section. A script following check
headings would classify duplicates as warnings, letting invalid graphs
pass review. Move duplicate-ID check to its own Check 5 (Critical) and
renumber subsequent checks.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Redesign all 5 agent prompts with a "Phase 1 — Script" + "Phase 2 — LLM
Reasoning" structure. Agents now write and execute scripts for deterministic
work (validation, file discovery, structure extraction, graph analysis)
before applying LLM judgment for semantic tasks (summaries, tags, pedagogy).
Key changes per agent:
- graph-reviewer: script performs all 6 validation checks deterministically
- project-scanner: script handles file discovery, language detection, line counting
- file-analyzer: script extracts functions/classes/imports via regex patterns
- architecture-analyzer: script computes import adjacency, inter-group frequency
- tour-builder: script calculates fan-in, BFS traversal, cluster detection
Design safeguards:
- scriptCompleted sentinel field guards against partial script output
- Batch-indexed temp paths prevent collision in concurrent file-analyzer agents
- Explicit "trust the script" directives prevent LLM from re-reading raw data
- Up to 2 script retries on failure
- Explicit instructions to strip intermediate fields from final output
- Bash tool added to all agent tool lists
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previously only FILE nodes responded to clicks with the code viewer overlay.
Now all node types open the detail viewer on click. Also added a direct click
handler on CustomNode to fix click events not firing for child nodes inside
group layers on Windows.
Bump version to 1.0.4.