diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6f2845b..2200e11 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ { "name": "understand-anything", "description": "Multi-agent codebase analysis with interactive dashboard, guided tours, and skill commands", - "version": "1.2.2", + "version": "1.3.0", "source": "./understand-anything-plugin" } ] diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 375688e..eae103b 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "understand-anything", "description": "AI-powered codebase understanding — analyze, visualize, and explain any project", - "version": "1.2.2", + "version": "1.3.0", "author": { "name": "Lum1104" }, diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 76707fd..5e189f6 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "understand-anything", "displayName": "Understand Anything", "description": "AI-powered codebase understanding — analyze, visualize, and explain any project", - "version": "1.2.2", + "version": "1.3.0", "author": { "name": "Lum1104" }, diff --git a/understand-anything-plugin/package.json b/understand-anything-plugin/package.json index 59ca16d..7ee16e9 100644 --- a/understand-anything-plugin/package.json +++ b/understand-anything-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@understand-anything/skill", - "version": "1.2.2", + "version": "1.3.0", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/understand-anything-plugin/packages/core/src/analyzer/layer-detector.ts b/understand-anything-plugin/packages/core/src/analyzer/layer-detector.ts index 07eb89f..e50e94f 100644 --- a/understand-anything-plugin/packages/core/src/analyzer/layer-detector.ts +++ b/understand-anything-plugin/packages/core/src/analyzer/layer-detector.ts @@ -39,6 +39,16 @@ const LAYER_PATTERNS: Array<{ patterns: string[]; layerName: string; description layerName: "Middleware Layer", description: "Request/response middleware and interceptors", }, + { + patterns: ["client", "integration", "external", "sdk", "vendor", "adapter"], + layerName: "External Services", + description: "External service integrations, SDKs, and third-party adapters", + }, + { + patterns: ["worker", "job", "queue", "cron", "consumer", "processor", "scheduler", "background"], + layerName: "Background Tasks", + description: "Background workers, job processors, and scheduled tasks", + }, { patterns: ["util", "helper", "lib", "common", "shared"], layerName: "Utility Layer", diff --git a/understand-anything-plugin/packages/dashboard/src/App.tsx b/understand-anything-plugin/packages/dashboard/src/App.tsx index d4867a8..2067b14 100644 --- a/understand-anything-plugin/packages/dashboard/src/App.tsx +++ b/understand-anything-plugin/packages/dashboard/src/App.tsx @@ -63,7 +63,7 @@ function App() { // Navigation { key: "Escape", - description: "Close panels and modals", + description: "Close panels / go back to overview", action: () => { // Read from store at invocation time to avoid stale closures const state = useDashboardStore.getState(); @@ -71,6 +71,8 @@ function App() { state.closeCodeViewer(); } else if (state.selectedNodeId) { state.selectNode(null); + } else if (state.navigationLevel === "layer-detail") { + state.navigateToOverview(); } else if (state.tourActive) { state.stopTour(); } else { @@ -114,15 +116,6 @@ function App() { category: "Tour", }, // View toggles - { - key: "l", - description: "Toggle layer visualization", - action: () => { - const state = useDashboardStore.getState(); - state.toggleLayers(); - }, - category: "View", - }, { key: "d", description: "Toggle diff mode", @@ -195,13 +188,15 @@ function App() { }, [setDiffOverlay]); // Determine sidebar content - // Learn persona always shows LearnPanel; tour active overrides everything - const sidebarContent = tourActive || persona === "junior" ? ( - - ) : selectedNodeId ? ( - - ) : ( - + // NodeInfo always takes priority when a node is selected. + // Learn mode adds LearnPanel below it; otherwise ProjectOverview shows when idle. + const isLearnMode = tourActive || persona === "junior"; + const sidebarContent = ( + <> + {selectedNodeId && } + {isLearnMode && } + {!selectedNodeId && !isLearnMode && } + ); return ( @@ -268,7 +263,7 @@ function App() { {/* Right sidebar */} -