- Introduced new planning files including PROJECT.md, REQUIREMENTS.md, ROADMAP.md, and STATE.md to outline the vision and requirements for SSH multi-context workspaces. - Added ARCHITECTURE.md and CONCERNS.md to detail the codebase structure and address technical debt, known bugs, and security considerations. - Created CONVENTIONS.md to establish coding standards and practices for the project. - Updated .gitignore to exclude demo files and added configuration for planning tools. This commit lays the groundwork for enhancing SSH functionality and user experience in managing multiple workspaces.
14 KiB
Codebase Structure
Analysis Date: 2026-02-12
Directory Layout
claude-devtools/
├── src/
│ ├── main/ # Electron main process (Node.js)
│ │ ├── constants/ # Message tags, worktree patterns
│ │ ├── ipc/ # IPC handlers by domain
│ │ ├── services/ # Business logic services
│ │ │ ├── analysis/ # Chunk building, semantic steps
│ │ │ ├── discovery/ # Project/session scanning
│ │ │ ├── error/ # Error detection, triggers
│ │ │ ├── infrastructure/ # Cache, config, file watching
│ │ │ └── parsing/ # JSONL parsing, message classification
│ │ ├── types/ # Main process type definitions
│ │ ├── utils/ # Main utilities (jsonl, pathDecoder)
│ │ └── index.ts # Main process entry point
│ ├── preload/ # Electron preload (IPC bridge)
│ │ ├── constants/ # IPC channel names
│ │ └── index.ts # ElectronAPI implementation
│ ├── renderer/ # React application
│ │ ├── components/ # UI components by feature
│ │ │ ├── chat/ # Session message display
│ │ │ ├── common/ # Shared UI primitives
│ │ │ ├── dashboard/ # Overview pages
│ │ │ ├── layout/ # App shell, sidebars
│ │ │ ├── notifications/ # Notification UI
│ │ │ ├── search/ # Search UI
│ │ │ ├── settings/ # Settings pages
│ │ │ └── sidebar/ # Navigation
│ │ ├── constants/ # CSS variables, layout, colors
│ │ ├── contexts/ # React contexts (TabUIContext)
│ │ ├── hooks/ # Custom React hooks
│ │ ├── store/ # Zustand state management
│ │ │ ├── slices/ # Domain slices
│ │ │ └── utils/ # Store helpers
│ │ ├── types/ # Renderer type definitions
│ │ ├── utils/ # Renderer utilities
│ │ ├── App.tsx # React root component
│ │ ├── main.tsx # React entry point
│ │ └── index.css # Global styles, theme
│ └── shared/ # Cross-process code
│ ├── constants/ # Cache, window, colors
│ ├── types/ # Shared type definitions
│ └── utils/ # Pure utilities
├── test/ # Vitest tests
│ ├── main/ # Main process tests
│ │ ├── ipc/ # IPC handler tests
│ │ ├── services/ # Service tests
│ │ └── utils/ # Utility tests
│ ├── renderer/ # Renderer tests
│ │ ├── hooks/ # Hook tests
│ │ ├── store/ # Store tests
│ │ └── utils/ # Utility tests
│ └── shared/ # Shared code tests
├── resources/ # App icons, assets
├── dist/ # Build output (renderer)
├── dist-electron/ # Build output (main, preload)
├── .claude/ # Claude Code configuration
│ ├── plans/ # Feature plans
│ └── rules/ # Project rules
├── .planning/ # GSD planning documents
│ └── codebase/ # Codebase analysis docs
├── package.json # Dependencies, scripts
├── tsconfig.json # TypeScript config (base)
├── tsconfig.node.json # TypeScript config (main)
├── vite.config.ts # Vite build config
└── vitest.config.ts # Vitest test config
Directory Purposes
src/main/
- Purpose: Electron main process - file system access, JSONL parsing, business logic
- Contains: Entry point, services (5 domains), IPC handlers (10 domains), types, utilities
- Key files:
index.ts(app lifecycle),services/index.ts(barrel export),ipc/handlers.ts(IPC setup)
src/main/services/analysis/
- Purpose: Chunk building and session analysis
- Contains: ChunkBuilder, ChunkFactory, ConversationGroupBuilder, ProcessLinker, SemanticStepExtractor, SemanticStepGrouper, SubagentDetailBuilder, ToolExecutionBuilder, ToolResultExtractor, ToolSummaryFormatter
- Key files:
ChunkBuilder.ts(orchestrator),ChunkFactory.ts(chunk creation),SemanticStepExtractor.ts(step extraction)
src/main/services/discovery/
- Purpose: Project/session scanning, subagent resolution
- Contains: ProjectScanner, ProjectPathResolver, SessionSearcher, SessionContentFilter, SubagentLocator, SubagentResolver, SubprojectRegistry, WorktreeGrouper
- Key files:
ProjectScanner.ts(file system scanning),SubagentResolver.ts(subagent linking)
src/main/services/infrastructure/
- Purpose: Core application infrastructure
- Contains: DataCache, FileWatcher, ConfigManager, NotificationManager, TriggerManager, UpdaterService, SshConnectionManager, FileSystemProvider (local/SSH)
- Key files:
DataCache.ts(LRU cache),FileWatcher.ts(file monitoring),ConfigManager.ts(config persistence)
src/main/services/parsing/
- Purpose: JSONL parsing and classification
- Contains: SessionParser, MessageClassifier, ClaudeMdReader, GitIdentityResolver
- Key files:
SessionParser.ts(JSONL parsing),MessageClassifier.ts(message categorization)
src/main/services/error/
- Purpose: Error detection and notification triggers
- Contains: ErrorDetector, ErrorMessageBuilder, ErrorTriggerChecker, ErrorTriggerTester, TriggerMatcher
- Key files:
ErrorDetector.ts(token-based detection),TriggerMatcher.ts(pattern matching)
src/main/ipc/
- Purpose: IPC request handlers organized by domain
- Contains: projects, sessions, search, subagents, validation, utility, notifications, config, ssh, updater handlers
- Key files:
handlers.ts(registration),sessions.ts(session operations),config.ts(configuration)
src/preload/
- Purpose: Secure IPC bridge between main and renderer
- Contains: ElectronAPI implementation, IPC channel constants
- Key files:
index.ts(contextBridge API),constants/ipcChannels.ts(channel names)
src/renderer/components/chat/
- Purpose: Session message display and visualization
- Contains: Chat groups (User, AI, System), chat history, display items, viewers (markdown, code, diff), SessionContextPanel (visible context tracking)
- Key files:
ChatHistory.tsx(timeline container),AIChatGroup.tsx(AI responses),ContextBadge.tsx(per-turn context popover)
src/renderer/components/chat/items/
- Purpose: Individual message/tool item renderers
- Contains: BaseItem, LinkedToolItem, ExecutionTrace, SubagentItem, ThinkingItem, TextItem, SlashItem, TeammateMessageItem, MetricsPill
- Key files:
LinkedToolItem.tsx(tool call+result),SubagentItem.tsx(subagent display)
src/renderer/components/chat/SessionContextPanel/
- Purpose: Visible context tracking panel UI
- Contains: Main panel component, section wrappers, per-injection item renderers, directory tree, formatting utils
- Key files:
index.tsx(panel component),components/(section wrappers),items/(injection renderers)
src/renderer/store/
- Purpose: Zustand state management
- Contains: Store creation, 14 domain slices, store utilities
- Key files:
index.ts(store composition, IPC listeners),slices/sessionDetailSlice.ts(session data),slices/tabSlice.ts(tab management)
src/renderer/store/slices/
- Purpose: Domain-specific state slices
- Contains: projectSlice, repositorySlice, sessionSlice, sessionDetailSlice, subagentSlice, conversationSlice, tabSlice, tabUISlice, paneSlice, uiSlice, notificationSlice, configSlice, connectionSlice, updateSlice
- Key files:
sessionDetailSlice.ts(session data),tabUISlice.ts(per-tab UI state)
src/shared/
- Purpose: Cross-process types and pure utilities
- Contains: Type definitions (api, notifications, visualization), utilities (tokenFormatting, modelParser, logger), constants (cache, window, colors)
- Key files:
types/index.ts(type re-exports),utils/tokenFormatting.ts(token utilities)
test/
- Purpose: Vitest unit tests
- Contains: Tests organized by process (main, renderer, shared), mirrors src/ structure
- Key files:
main/services/analysis/ChunkBuilder.test.ts,renderer/store/sessionSlice.test.ts
Key File Locations
Entry Points:
src/main/index.ts: Main process entry (381 lines) - app lifecycle, service initialization, window creationsrc/renderer/main.tsx: Renderer entry (12 lines) - React renderingsrc/preload/index.ts: Preload bridge (369 lines) - ElectronAPI implementationsrc/renderer/App.tsx: React root - theme, IPC listeners, layout
Configuration:
package.json: Dependencies, build scriptstsconfig.json: Base TypeScript configtsconfig.node.json: Main process TypeScript configvite.config.ts: Vite build configurationvitest.config.ts: Vitest test configurationsrc/renderer/index.css: Global styles, CSS custom properties
Core Logic:
src/main/services/analysis/ChunkBuilder.ts: Chunk building orchestrationsrc/main/services/parsing/SessionParser.ts: JSONL parsingsrc/main/services/discovery/SubagentResolver.ts: Subagent linkingsrc/main/services/infrastructure/DataCache.ts: LRU cachesrc/main/services/infrastructure/FileWatcher.ts: File monitoring
Testing:
test/main/services/analysis/ChunkBuilder.test.ts: Chunk building teststest/main/services/parsing/SessionParser.test.ts: JSONL parsing teststest/renderer/store/sessionSlice.test.ts: Session state tests
Naming Conventions
Files:
- Services/Components: PascalCase -
ChunkBuilder.ts,SessionParser.ts,AIChatGroup.tsx - Utilities: camelCase -
pathDecoder.ts,jsonl.ts,formatters.ts - Types: camelCase -
messages.ts,data.ts,api.ts - Barrel exports:
index.ts
Directories:
- All lowercase with domain names -
services/,analysis/,components/ - Feature-based organization -
components/chat/,components/settings/
Constants:
- UPPER_SNAKE_CASE -
PARALLEL_WINDOW_MS,MAX_CACHE_SESSIONS,SESSION_REFRESH_DEBOUNCE_MS
Functions:
- Type guards:
isXxx-isUserChunk(),isParsedRealUserMessage(),isAIChunk() - Builders:
buildXxx-buildChunks(),buildSubagentDetail(),buildDisplayItems() - Getters:
getXxx-getSessionPath(),getProjects(),getTaskCalls() - Creators:
createXxx-createLogger(),createConfigSlice(),createWindow()
Type Guards:
- Message:
isParsedRealUserMessage(),isParsedInternalUserMessage(),isAssistantMessage() - Chunk:
isUserChunk(),isAIChunk(),isSystemChunk(),isCompactChunk() - Context:
isClaudeMdInjection(),isMentionedFileInjection(),isToolOutputInjection(),isThinkingTextInjection(),isTeamCoordinationInjection(),isUserMessageInjection()
Where to Add New Code
New Service (Main Process):
- Implementation:
src/main/services/{domain}/{ServiceName}.ts - Export: Add to
src/main/services/{domain}/index.tsbarrel - Usage: Import from
@main/servicesor@main/services/{domain}
New IPC Handler:
- Implementation: Add to existing
src/main/ipc/{domain}.tsor create new domain file - Channel constant: Add to
src/preload/constants/ipcChannels.ts - Registration: Add to
src/main/ipc/handlers.tsif new domain - API exposure: Add method to ElectronAPI in
src/preload/index.ts - Type: Update
@shared/types/api.tsif needed
New React Component:
- Primary code:
src/renderer/components/{feature}/{ComponentName}.tsx - Feature categories: chat, common, dashboard, layout, notifications, search, settings, sidebar
- Tests:
test/renderer/components/{feature}/{ComponentName}.test.tsx
New Zustand Slice:
- Implementation:
src/renderer/store/slices/{domain}Slice.ts - Export: Add factory function
create{Domain}Slice - Integration: Add to store composition in
src/renderer/store/index.ts - Type: Update
AppStateinsrc/renderer/store/types.ts
New Hook:
- Implementation:
src/renderer/hooks/use{Name}.ts - Tests:
test/renderer/hooks/use{Name}.test.ts - Import: Direct import from file (no barrel exports for hooks)
Utilities:
- Main process:
src/main/utils/{utilityName}.ts - Renderer:
src/renderer/utils/{utilityName}.ts - Shared (pure):
src/shared/utils/{utilityName}.ts
Types:
- Main process only:
src/main/types/{name}.ts - Renderer only:
src/renderer/types/{name}.ts - Shared across processes:
src/shared/types/{name}.ts
Special Directories
node_modules/
- Purpose: Package dependencies
- Generated: Yes (via
pnpm install) - Committed: No
dist/ and dist-electron/
- Purpose: Build output (production bundles)
- Generated: Yes (via
pnpm build) - Committed: No
.planning/codebase/
- Purpose: GSD codebase analysis documents
- Generated: Yes (via
/gsd:map-codebase) - Committed: Yes (planning metadata)
.claude/plans/
- Purpose: Feature implementation plans
- Generated: Yes (via
/gsd:plan-phase) - Committed: Yes (project planning)
test/mocks/
- Purpose: Test fixtures and mock data
- Generated: No (manually created)
- Committed: Yes (test infrastructure)
resources/
- Purpose: Application icons and assets
- Generated: No (manually created)
- Committed: Yes (app resources)
src/renderer/components/chat/SessionContextPanel/
- Purpose: Visible context tracking panel UI (6 context categories)
- Generated: No
- Committed: Yes
- Special: Deep component hierarchy with section wrappers and item renderers
src/main/services/
- Purpose: Domain-organized business logic
- Generated: No
- Committed: Yes
- Special: Each domain has barrel export (
index.ts)
Structure analysis: 2026-02-12