Add addNonCodeFile() and addNonCodeFileWithAnalysis() methods that create
graph nodes with the appropriate non-code types (document, config, service,
table, endpoint, pipeline, schema, resource).
addNonCodeFileWithAnalysis() creates child nodes for definitions, services,
endpoints, steps, and resources with "contains" edges to the parent file.
Add mapKindToNodeType() helper for mapping definition kinds to node types.
Extend EXTENSION_LANGUAGE map with all non-code file extensions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
LLMs systematically abbreviate node types (e.g. "func" instead of
"function") and edge types (e.g. "extends" instead of "inherits"),
causing dashboard validation failures. This combines two fixes:
Option A: Rename the ambiguous `func:` ID prefix to `function:` across
all prompts, source code, tests, and example data so LLMs see consistent
naming. Also fix `relates_to` ghost edge type in django.md.
Option B: Add NODE_TYPE_ALIASES and EDGE_TYPE_ALIASES normalization maps
in schema.ts that transparently correct common abbreviations before Zod
validation, as a runtime safety net.
Closes#36
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace flat all-nodes-at-once graph with a two-level drill-down:
- Level 1: layer cluster nodes (free-form graph of architectural layers)
- Level 2: file nodes within a layer + portal nodes to adjacent layers
- Breadcrumb navigation with Escape key to go back
Add swim-lane "Flow" view showing all files in columns ordered by
request lifecycle (API → Middleware → Service → Data → etc.) using
dagre for within-lane vertical positioning.
Sidebar improvements:
- Navigation history trail (← Back + clickable breadcrumbs)
- Directional connection labels (imports/imported by, contains/contained in)
- Separate "Defined in this file" section for child classes/functions
- Fix search dropdown overlapping breadcrumbs (z-index)
- Remove redundant CodeViewer auto-open on node click
Layer detector: add External Services and Background Tasks patterns.
Replace the TypeScript/JavaScript-biased analysis pipeline with a truly
language-agnostic system. The core architecture was already language-neutral
(graph schema, dashboard, search) — the bias lived in agent prompts,
tree-sitter plugin, and language-lesson system.
Core changes:
- LanguageConfig + FrameworkConfig types with Zod validation
- LanguageRegistry (12 languages) and FrameworkRegistry (10 frameworks)
- Config-driven TreeSitterPlugin replacing hardcoded TS/JS grammars
- PluginRegistry now delegates to LanguageRegistry for extension mapping
- Language-lesson system uses config for display names and concepts
Prompt system:
- SKILL.md generalized: dynamic injection of language snippets and
framework addendums instead of hardcoded if/else conditionals
- 12 language prompt snippets (languages/*.md) with concepts, patterns,
frameworks per language
- 10 framework addendums (frameworks/*.md) with canonical file roles,
edge patterns, architectural layers — Django/FastAPI/Flask preserved
and split, plus React/Next.js/Express/Vue/Spring/Rails/Gin added
- Extended entry points, directory patterns, and test patterns across
all 12 language ecosystems in base prompts
Move packages/{core,dashboard,skill} into understand-anything-plugin/ to
conform to the Claude Code plugin format. Add .claude-plugin/marketplace.json
for plugin discovery. Update workspace config and docs accordingly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>