Remove unnecessary `as any` and `as string[]` casts by using the properly
typed DomainMeta interface. Fix historyNodes and childNodes to resolve from
activeGraph instead of graph so domain view mode works correctly. Use
type-narrowing filters to eliminate non-null assertions. Add early return
guard for step nodes with no filePath.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ViewMode type, DOMAIN_EDGE_TYPES, and domain/flow/step entries to
dashboard store, CustomNode, GraphView, and NodeInfo Record maps so the
dashboard compiles with the new core domain node and edge types.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add all 13 node types (including non-code) to VALID_PREFIXES and TYPE_TO_PREFIX
to prevent valid IDs like config:tsconfig.json from being stripped
- Add fallback normalizeNodeId on edge endpoints not found in idMap, fixing
silent relationship loss when edges use different malformed variants than nodes
- Add DroppedEdge interface with source, target, type, and reason fields so
callers can surface exactly which edges were lost and why
- Use honest Record<string, unknown>[] return types instead of unsafe type casts
- Align SKILL.md complexity aliases with COMPLEXITY_STRING_MAP
- Add 5 new tests for non-code types, cross-variant edges, dropped edge detail,
and validateGraph integration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Parallel file-analyzer subagents can produce inconsistent node IDs
(project-name prefixed, double-prefixed, bare paths) and invalid
complexity values. Phase 3 ASSEMBLE now normalizes these deterministically
before merging, preventing cascading edge drops and dashboard load failures.
- Add normalize-graph.ts with normalizeNodeId, normalizeComplexity,
and normalizeBatchOutput utilities
- Rewrite SKILL.md Phase 3 with 6-step normalization sequence
- Strengthen file-analyzer prompt with ID format warnings
- Add 32 normalization tests and 2 schema boundary tests
The PostToolUse hook used `<<<` (bash herestring) which fails when
Claude Code runs hooks under `/bin/sh`. Replace with `echo | grep`
for POSIX compatibility.
Runs on every pull_request: builds core and skill packages (which also
serves as TypeScript type-check), then runs all Vitest tests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add README.zh-TW.md (Traditional Chinese translation)
- Update language nav links in all READMEs to include 繁體中文
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove displayName from plugin.json (not in Copilot manifest schema)
- Use ln -sf for idempotent skill symlinks
- Use rm -f for safer uninstall
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each skill must be symlinked individually into ~/.copilot/skills/,
not the entire skills directory as a single entry.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `.copilot-plugin/plugin.json` for auto-discovery in VS Code (mirrors `.cursor-plugin/` format)
- Add `.vscode/INSTALL.md` with two install options: auto-discovery and personal skills via symlink
- Update README.md and README.zh-CN.md with VS Code section and compatibility table row
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Expand feature cards from 3 to 6 covering new capabilities across
v1.2.0–v2.0.0 releases. Update install note and footer tagline to
reflect multi-platform support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split the header into three sections: fixed left (project name, persona),
scrollable middle (diff toggle, node type filters, layer legend), and
fixed right (filter, export, path, theme actions). Prevents toolbar
overflow when projects have many layers or node types.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The foreignObject approach caused canvas tainting — browsers block
canvas.toBlob() when the SVG contains embedded DOM content. Extracted
a shared buildCleanSvg() helper using only rect/line/text elements,
reused by both PNG and SVG export.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolved conflicts by keeping main's features (ThemeProvider, TokenGate,
WarningBanner, graph validation, layer navigation, sidebar composing
behavior) and integrating PR's new features (FilterPanel, ExportMenu,
PathFinderModal, NodeTooltip, ProjectOverview stats) on top.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reduced from 40vh to 25vh so the overlay sits closer to the bottom
and leaves more room for graph nodes above.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix all issues from the 5-agent parallel code review of universal file
type support:
- Parser error handling: add console.warn in JSON/YAML catch blocks,
warn on unbalanced braces in Protobuf/Terraform parsers
- Parser correctness: filter .PHONY special targets in Makefile parser,
handle opening brace on next line in Shell parser, fix per-stage
EXPOSE port assignment in Dockerfile parser
- Graph builder: use nodeType-based ID prefix instead of hardcoded
"file:", warn on unknown definition kinds, detect duplicate node IDs
- Type safety: export NodeType alias, add ServiceInfo.lineRange, type
dashboard color maps as Record<NodeType,...>, refactor
getDirectionalLabel to Record<EdgeType,...>, consolidate NodeCategory
- Schema: add StrictLanguageConfigSchema with extensions/filenames
refinement, fix Infrastructure/Schema-Data category comments
- Agent prompts: fix Jenkinsfile language ID (groovy → jenkinsfile),
fix css.md edge type (configures → related), remove shell.md
Makefile cross-reference
- Tests: 20+ new edge case tests across parsers, graph builder,
language registry, and plugin registry
- Documentation: add JSDoc to all 12 parser classes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduce interactive graph tools and UI improvements: add FilterPanel, ExportMenu, PathFinderModal and NodeTooltip components; extend CustomNode data with incoming/outgoing counts and tags. Wire new components into App (buttons + keyboard shortcuts F/E/P) and implement outside-click/escape handling. Update GraphView to apply persona + filter rules, compute connection counts, register ReactFlow instance, and render per-node tooltips. Add JSON/SVG/PNG export that respects persona/filters and a BFS-based path finder UI. Enhance ProjectOverview with complexity distribution, most-connected nodes and average connections. Extend store with FilterState, edge category types, reactFlowInstance and toggles.
- Expand persona filter in GraphView.tsx to show all 9 file-level node
types (file, config, document, service, table, endpoint, pipeline,
schema, resource) instead of only "file", fixing invisible nodes
- Add serves, provisions, and routes edge types with creation criteria
to file-analyzer-prompt.md
- Fix related edge weight from 0.3 to 0.5 to match SKILL.md default
- Add filenames to openapiConfig for proper filename-based detection
- Add TODO comments to kubernetesConfig and jsonSchemaConfig explaining
content-based detection limitations
- Clarify that module/concept types are reserved for higher-level agents
- Update language-registry tests for 38 built-in configs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 1 (SCAN): Include non-code files in scan, add fileCategory to
batch metadata. Phase 2 (ANALYZE): Add batching strategy for non-code
files, group related infra/data/doc files together, pass fileCategory
per file. Phase 4 (ARCHITECTURE): Inject non-code language snippets
(markdown, yaml, dockerfile, sql, etc.), pass all node types and all
edge types to architecture analyzer. Phase 5 (TOUR): Include non-code
nodes in tour candidate pool, pass all edge types for topology analysis.
Update node type reference table (5 -> 13 types), edge type reference
table (18 -> 26 types), edge weight conventions, and inline validation
script to handle file-level non-code node types for layer coverage.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>