Use dashboard store state at handler runtime and simplify shortcut wiring to avoid stale closures. App.tsx: replace many useDashboardStore selectors with runtime getState() calls inside keyboard shortcut actions and reduce useMemo dependencies to showKeyboardHelp. KeyboardShortcutsHelp.tsx: remove local Escape key effect (handled globally). useKeyboardShortcuts.ts: ignore shortcuts while typing in inputs/textareas/contentEditable (allow Escape), and improve Mac detection via userAgentData.platform fallback; use the same isMac flag in formatShortcutKey. README (zh-CN & ja-JP): add link to Turkish README (README.tr-TR.md).
Replace the previous opencode.json example with a directive to fetch and follow the INSTALL.md from the Understand-Anything repo's .opencode path. Also update the OpenCode table entry to indicate "AI güdümlü kurulum" (AI-guided installation). Changes apply to README.tr-TR.md to streamline installation instructions.
Introduce keyboard shortcuts to the dashboard and add contributor docs. Adds a reusable useKeyboardShortcuts hook (with formatShortcutKey), a KeyboardShortcutsHelp modal component, and integrates shortcuts into App.tsx (registering keys like ?, Escape, /, ArrowLeft/Right, l, d and wiring store actions). Adds related styles (.glass-heavy, .kbd) to index.css. Also adds a comprehensive CONTRIBUTING.md with setup, workflow, testing, and PR guidelines.
Add a new Turkish translation file README.tr-TR.md with the full localized documentation and quickstart instructions. Update README.md to include a link to the Turkish README in the language selector so Turkish-speaking users can access the translated docs.
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>