mirror of
https://github.com/leonvanzyl/autocoder.git
synced 2026-02-02 07:23:35 +00:00
feat: Add arbitrary directory project storage with registry system
This major update replaces the fixed `generations/` directory with support for storing projects in any directory on the filesystem. Projects are now tracked via a cross-platform registry system. ## New Features ### Project Registry (`registry.py`) - Cross-platform registry storing project name-to-path mappings - Platform-specific config locations: - Windows: %APPDATA%\autonomous-coder\projects.json - macOS: ~/Library/Application Support/autonomous-coder/projects.json - Linux: ~/.config/autonomous-coder/projects.json - POSIX path format for cross-platform compatibility - File locking for concurrent access safety (fcntl/msvcrt) - Atomic writes via temp file + rename to prevent corruption - Fixed Windows file locking issue with tempfile.mkstemp() ### Filesystem Browser API (`server/routers/filesystem.py`) - REST endpoints for browsing directories server-side - Cross-platform support with blocked system paths: - Windows: C:\Windows, Program Files, ProgramData, etc. - macOS: /System, /Library, /private, etc. - Linux: /etc, /var, /usr, /bin, etc. - Universal blocked paths: .ssh, .aws, .gnupg, .docker, etc. - Hidden file detection (Unix dot-prefix + Windows attributes) - UNC path blocking for security - Windows drive enumeration via ctypes - Directory creation with validation - Added `has_children` field to DirectoryEntry schema ### UI Folder Browser (`ui/src/components/FolderBrowser.tsx`) - React component for selecting project directories - Breadcrumb navigation with clickable segments - Windows drive selector - New folder creation inline - Fixed text visibility with explicit color values ## Updated Components ### Server Routers - `projects.py`: Uses registry instead of fixed generations/ directory - `agent.py`: Uses registry for project path lookups - `features.py`: Uses registry for database path resolution - `spec_creation.py`: Uses registry for WebSocket project resolution ### Process Manager (`server/services/process_manager.py`) - Fixed sandbox issue: subprocess now uses project_dir as cwd - This allows the Claude SDK sandbox to access external project directories ### Schemas (`server/schemas.py`) - Added `has_children` to DirectoryEntry - Added `in_progress` to ProjectStats - Added path field to ProjectSummary and ProjectDetail ### UI Components - `NewProjectModal.tsx`: Multi-step wizard with folder selection - Added clarifying text about subfolder creation - Fixed text color visibility issues ### API Client (`ui/src/lib/api.ts`) - Added filesystem API functions (listDirectory, createDirectory) - Fixed Windows path splitting for directory creation ### Documentation - Updated CLAUDE.md with registry system details - Updated command examples for absolute paths ## Security Improvements - Blocked `.` and `..` in directory names to prevent traversal - Added path blocking check in project creation - UNC path blocking throughout filesystem API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
35
CLAUDE.md
35
CLAUDE.md
@@ -39,8 +39,9 @@ pip install -r requirements.txt
|
||||
# Run the main CLI launcher
|
||||
python start.py
|
||||
|
||||
# Run agent directly for a specific project
|
||||
python autonomous_agent_demo.py --project-dir PROJECT_NAME
|
||||
# Run agent directly for a project (use absolute path or registered name)
|
||||
python autonomous_agent_demo.py --project-dir C:/Projects/my-app
|
||||
python autonomous_agent_demo.py --project-dir my-app # if registered
|
||||
```
|
||||
|
||||
### React UI (in ui/ directory)
|
||||
@@ -66,6 +67,29 @@ npm run lint # Run ESLint
|
||||
- `security.py` - Bash command allowlist validation (ALLOWED_COMMANDS whitelist)
|
||||
- `prompts.py` - Prompt template loading with project-specific fallback
|
||||
- `progress.py` - Progress tracking, database queries, webhook notifications
|
||||
- `registry.py` - Project registry for mapping names to paths (cross-platform)
|
||||
|
||||
### Project Registry
|
||||
|
||||
Projects can be stored in any directory. The registry (`projects.json`) maps project names to paths:
|
||||
- **Windows**: `%APPDATA%\autonomous-coder\projects.json`
|
||||
- **macOS**: `~/Library/Application Support/autonomous-coder/projects.json`
|
||||
- **Linux**: `~/.config/autonomous-coder/projects.json`
|
||||
|
||||
The registry uses:
|
||||
- POSIX path format (forward slashes) for cross-platform compatibility
|
||||
- File locking for concurrent access safety
|
||||
- Atomic writes (temp file + rename) to prevent corruption
|
||||
|
||||
### Server API (server/)
|
||||
|
||||
The FastAPI server provides REST endpoints for the UI:
|
||||
|
||||
- `server/routers/projects.py` - Project CRUD with registry integration
|
||||
- `server/routers/features.py` - Feature management
|
||||
- `server/routers/agent.py` - Agent control (start/stop/pause/resume)
|
||||
- `server/routers/filesystem.py` - Filesystem browser API with security controls
|
||||
- `server/routers/spec_creation.py` - WebSocket for interactive spec creation
|
||||
|
||||
### Feature Management
|
||||
|
||||
@@ -90,14 +114,17 @@ MCP tools available to the agent:
|
||||
- `src/hooks/useProjects.ts` - React Query hooks for API calls
|
||||
- `src/lib/api.ts` - REST API client
|
||||
- `src/lib/types.ts` - TypeScript type definitions
|
||||
- `src/components/FolderBrowser.tsx` - Server-side filesystem browser for project folder selection
|
||||
- `src/components/NewProjectModal.tsx` - Multi-step project creation wizard
|
||||
|
||||
### Project Structure for Generated Apps
|
||||
|
||||
Generated projects are stored in `generations/PROJECT_NAME/` with:
|
||||
Projects can be stored in any directory (registered in `projects.json`). Each project contains:
|
||||
- `prompts/app_spec.txt` - Application specification (XML format)
|
||||
- `prompts/initializer_prompt.md` - First session prompt
|
||||
- `prompts/coding_prompt.md` - Continuation session prompt
|
||||
- `features.db` - SQLite database with feature test cases
|
||||
- `.agent.lock` - Lock file to prevent multiple agent instances
|
||||
|
||||
### Security Model
|
||||
|
||||
@@ -116,7 +143,7 @@ Defense-in-depth approach configured in `client.py`:
|
||||
|
||||
### Prompt Loading Fallback Chain
|
||||
|
||||
1. Project-specific: `generations/{project}/prompts/{name}.md`
|
||||
1. Project-specific: `{project_dir}/prompts/{name}.md`
|
||||
2. Base template: `.claude/templates/{name}.template.md`
|
||||
|
||||
### Agent Session Flow
|
||||
|
||||
Reference in New Issue
Block a user