بنقرة واحدة
documentation-robotics-viewer-architecture
Display architectural overview and critical file locations
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Display architectural overview and critical file locations
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Start Storybook server and list available stories
Sync OpenAPI specs and generate TypeScript types
Run Vite build and check bundle size
Build Docker image and run deployment checks
Show coding patterns for React Flow nodes, Zustand, and Tailwind
Run Playwright tests and Storybook validation
| name | documentation_robotics_viewer-architecture |
| description | Display architectural overview and critical file locations |
| user_invocable | true |
| args | null |
| generated | true |
| generation_timestamp | "2026-02-23T16:05:21.369Z" |
| generation_version | 2.0 |
| source_project | documentation_robotics_viewer |
| source_codebase_hash | 00a2f9723e9a7f64 |
Quick-reference skill for documentation_robotics_viewer architecture overview and critical file locations.
/documentation_robotics_viewer-architecture
Displays a comprehensive architectural overview of the documentation_robotics_viewer project, including:
Layered Architecture with Hexagonal/Ports & Adapters Pattern
┌─────────────────────────────────────────────────────────────┐
│ Application Layer │
│ (src/apps/embedded/) │
│ Routes, Components, Stores, App-specific Logic │
│ CAN import from core layer │
├─────────────────────────────────────────────────────────────┤
│ Core Layer │
│ (src/core/) │
│ Reusable, Framework-agnostic │
│ NEVER imports from app layer │
│ │
│ ├─ nodes/ Custom React Flow nodes (15+ types) │
│ ├─ edges/ Custom edge types │
│ ├─ layout/ Layout engines (Dagre, ELK, D3, Graphviz)│
│ ├─ services/ Data transformers, parsers │
│ ├─ stores/ Global Zustand stores │
│ └─ components/ Base UI (GraphViewer, panels) │
├─────────────────────────────────────────────────────────────┤
│ External Infrastructure │
│ DR CLI Server (REST + WebSocket) │
└─────────────────────────────────────────────────────────────┘
YAML/JSON Files
↓
yamlParser.ts / jsonSchemaParser.ts
↓
ModelStore (Zustand)
↓
nodeTransformer.ts (MetaModel → React Flow)
↓
Layout Engines (calculate positions)
↓
GraphViewer.tsx (viewport culling)
↓
React Flow Canvas
src/
├── core/ # Framework-agnostic reusable code
│ ├── nodes/ # 15+ custom node types
│ │ ├── business/ # BusinessFunction, BusinessService, BusinessCapability
│ │ ├── motivation/ # Goal, Stakeholder, Constraint, Driver, etc.
│ │ ├── c4/ # Container, Component, ExternalActor
│ │ └── index.ts # ★ Node registry (nodeTypes map)
│ ├── edges/ # Custom edge types
│ ├── layout/
│ │ ├── engines/ # Dagre, ELK, D3Force, Graphviz
│ │ └── business/ # Business-specific layouts
│ ├── services/
│ │ ├── nodeTransformer.ts # ★★★ Core transformation pipeline
│ │ ├── dataLoader.ts # Data loading orchestration
│ │ ├── yamlParser.ts # YAML instance parsing
│ │ └── jsonSchemaParser.ts # JSON Schema parsing
│ ├── stores/ # Global Zustand stores
│ │ ├── modelStore.ts # Main model data
│ │ ├── layerStore.ts # Layer visibility
│ │ └── elementStore.ts # Element selection
│ └── components/
│ ├── GraphViewer.tsx # ★★ Main canvas (viewport culling)
│ └── base/ # BaseInspectorPanel, BaseControlPanel
├── apps/embedded/ # TanStack Router app
│ ├── routes/ # Route components
│ ├── components/ # App-specific components
│ ├── stores/ # App-specific stores (authStore, chatStore)
│ └── services/ # App-specific graph builders
└── catalog/ # Storybook (578 stories, 97 files)
src/core/services/nodeTransformer.ts (873 lines)
getNodeTypeForElement() - Maps element type to node typeextractNodeData() - Extracts node data from elementsprecalculateDimensions() - Calculates node sizessrc/core/components/GraphViewer.tsx
src/core/nodes/index.ts
nodeTypes map)src/core/layout/engines/ - Layout algorithm implementations
DagreLayoutEngine.ts - Hierarchical layoutsElkLayoutEngine.ts - Advanced Eclipse Layout KernelD3ForceLayoutEngine.ts - Physics simulationsGraphvizLayoutEngine.ts - DOT language via WASMsrc/core/stores/modelStore.ts - Main data store
src/apps/embedded/routes/ - Route components
SharedLayout (3-column pattern)src/core/services/yamlParser.ts - YAML instance parsing
business.function.name) to UUIDssrc/core/services/crossLayerReferenceExtractor.ts
npm test before completing tasksList.Item → ListItem)// 1. Define dimension constants
export const YOUR_NODE_WIDTH = 180;
export const YOUR_NODE_HEIGHT = 100;
// 2. Create memoized component
export const YourNode = memo(({ data, id: _id }: { data: YourNodeData; id?: string }) => {
return (
<div
role="article"
aria-label={`Your Type: ${data.label}`}
style={{
width: YOUR_NODE_WIDTH, // ★ Use exported constant
height: YOUR_NODE_HEIGHT, // ★ Use exported constant
// ... inline styles (NOT Tailwind)
}}
>
{/* ★ ALWAYS include 4 Handles */}
<Handle type="target" position={Position.Top} id="top" />
<Handle type="source" position={Position.Bottom} id="bottom" />
<Handle type="target" position={Position.Left} id="left" />
<Handle type="source" position={Position.Right} id="right" />
{/* content */}
</div>
);
});
// 3. Set displayName
YourNode.displayName = 'YourNode';
// 4. Register in src/core/nodes/index.ts
export const nodeTypes = {
yourType: YourNode,
// ...
};
// 5. Update nodeTransformer.ts (3 places):
// - getNodeTypeForElement()
// - extractNodeData()
// - precalculateDimensions()
import { create } from 'zustand';
export const useYourStore = create<YourState>((set, get) => ({
// State
items: [],
// Actions
addItem: (item) => set((state) => ({
items: [...state.items, item]
})),
// Computed values
getItemById: (id) => get().items.find(i => i.id === id),
}));
// Usage: Direct hook call (NO Provider needed)
const { items, addItem } = useYourStore();
# Development
npm run dev # Start Vite dev server
# Testing
npm test # Unit tests (1170 tests, ~10s)
npm run test:e2e # E2E with DR CLI server
npm run test:storybook # Validate 578 stories
# Storybook
npm run storybook:dev # Start on port 61001
npm run storybook:build # Build for production
npm run test:storybook:a11y # WCAG 2.1 AA accessibility report
# Build
npm run build # Production build
# Follow the critical pipeline:
# 1. Data loading
cat src/core/services/yamlParser.ts
cat src/core/services/dataLoader.ts
# 2. Transformation
cat src/core/services/nodeTransformer.ts # ★ MOST CRITICAL
# 3. Layout
ls src/core/layout/engines/
# 4. Rendering
cat src/core/components/GraphViewer.tsx
# 1. Read existing node for pattern
cat src/core/nodes/motivation/GoalNode.tsx
# 2. Create your node (follow the pattern!)
# 3. Register in node registry
cat src/core/nodes/index.ts
# 4. Update transformer (3 places)
cat src/core/services/nodeTransformer.ts
# 5. Test
npm test -- tests/unit/nodes/
npm run storybook:dev
# Check layout engine implementation
cat src/core/layout/engines/DagreLayoutEngine.ts
# Check dimension calculations
grep -n "precalculateDimensions" src/core/services/nodeTransformer.ts
# Verify node dimensions exported correctly
cat src/core/nodes/motivation/GoalNode.tsx | grep "export const.*WIDTH\|HEIGHT"
# List all Zustand stores
ls src/core/stores/
ls src/apps/embedded/stores/
# Check main model store
cat src/core/stores/modelStore.ts
# See how stores are used in components
grep -r "useModelStore" src/apps/embedded/components/
| Symptom | Check These Files |
|---|---|
| Node not rendering | nodeTransformer.ts (all 3 functions), nodes/index.ts |
| Layout overlaps | Layout engine calculate(), precalculateDimensions() |
| Edges not connecting | Handle IDs in node component, edge source/target |
| State not updating | Zustand store actions, React component hooks |
| Tests failing | Test fixtures, mock data in tests/fixtures/ |
README.mddocumentation/architecture-overview.mddocumentation/DR_CLI_INTEGRATION_GUIDE.mddocumentation/YAML_MODELS.mddocumentation/ACCESSIBILITY.mdCLAUDE.md (this file powers this skill)This skill was automatically generated from project architecture analysis.