Skip to content

Latest commit

 

History

History
954 lines (736 loc) · 30.5 KB

File metadata and controls

954 lines (736 loc) · 30.5 KB

Custom Updates - AutoCoder

This document tracks all customizations made to AutoCoder that deviate from the upstream repository. Reference this file before any updates to preserve these changes.


Table of Contents

  1. UI Theme Customization
  2. Playwright Browser Configuration
  3. Research Agent (AutoCoder Plus)
  4. Research Agent UI Integration
  5. Git Branch Safety
  6. Smart Testing Mode
  7. Re-analyze Codebase for Existing Projects
  8. Stuck Agent Detection
  9. Update Checklist

1. UI Theme Customization

Overview

The UI has been customized from the default neobrutalism style to a clean Twitter/Supabase-style design.

Design Changes:

  • No shadows
  • Thin borders (1px)
  • Rounded corners (1.3rem base)
  • Blue accent color (Twitter blue)
  • Clean typography (Open Sans)

Modified Files

ui/src/styles/custom-theme.css

Purpose: Main theme override file that replaces neo design with clean Twitter style.

Key Changes:

  • All --shadow-neo-* variables set to none
  • All status colors (pending, progress, done) use Twitter blue
  • Rounded corners: --radius-neo-lg: 1.3rem
  • Font: Open Sans
  • Removed all transform effects on hover
  • Dark mode with proper contrast

CSS Variables (Light Mode):

--color-neo-accent: oklch(0.6723 0.1606 244.9955);  /* Twitter blue */
--color-neo-pending: oklch(0.6723 0.1606 244.9955);
--color-neo-progress: oklch(0.6723 0.1606 244.9955);
--color-neo-done: oklch(0.6723 0.1606 244.9955);

CSS Variables (Dark Mode):

--color-neo-bg: oklch(0.08 0 0);
--color-neo-card: oklch(0.16 0.005 250);
--color-neo-border: oklch(0.30 0 0);

How to preserve: This file should NOT be overwritten. It loads after globals.css and overrides it.


ui/src/components/KanbanColumn.tsx

Purpose: Modified to support themeable kanban columns without inline styles.

Changes:

  1. colorMap changed from inline colors to CSS classes:
// BEFORE (original):
const colorMap = {
  pending: 'var(--color-neo-pending)',
  progress: 'var(--color-neo-progress)',
  done: 'var(--color-neo-done)',
}

// AFTER (customized):
const colorMap = {
  pending: 'kanban-header-pending',
  progress: 'kanban-header-progress',
  done: 'kanban-header-done',
}
  1. Column div uses CSS class instead of inline style:
// BEFORE:
<div className="neo-card overflow-hidden" style={{ borderColor: colorMap[color] }}>

// AFTER:
<div className={`neo-card overflow-hidden kanban-column ${colorMap[color]}`}>
  1. Header div simplified (removed duplicate color class):
// BEFORE:
<div className={`... ${colorMap[color]}`} style={{ backgroundColor: colorMap[color] }}>

// AFTER:
<div className="kanban-header px-4 py-3 border-b border-[var(--color-neo-border)]">
  1. Title text color:
// BEFORE:
text-[var(--color-neo-text-on-bright)]

// AFTER:
text-[var(--color-neo-text)]

2. Playwright Browser Configuration

Overview

Changed default Playwright settings for better performance:

  • Default browser: Firefox (lower CPU usage)
  • Default mode: Headless (saves resources)

Modified Files

client.py

Changes:

# BEFORE:
DEFAULT_PLAYWRIGHT_HEADLESS = False

# AFTER:
DEFAULT_PLAYWRIGHT_HEADLESS = True
DEFAULT_PLAYWRIGHT_BROWSER = "firefox"

New function added:

def get_playwright_browser() -> str:
    """
    Get the browser to use for Playwright.
    Options: chrome, firefox, webkit, msedge
    Firefox is recommended for lower CPU usage.
    """
    return os.getenv("PLAYWRIGHT_BROWSER", DEFAULT_PLAYWRIGHT_BROWSER).lower()

Playwright args updated:

playwright_args = [
    "@playwright/mcp@latest",
    "--viewport-size", "1280x720",
    "--browser", browser,  # NEW: configurable browser
]

.env.example

Updated documentation:

# PLAYWRIGHT_BROWSER: Which browser to use for testing
# - firefox: Lower CPU usage, recommended (default)
# - chrome: Google Chrome
# - webkit: Safari engine
# - msedge: Microsoft Edge
# PLAYWRIGHT_BROWSER=firefox

# PLAYWRIGHT_HEADLESS: Run browser without visible window
# - true: Browser runs in background, saves CPU (default)
# - false: Browser opens a visible window (useful for debugging)
# PLAYWRIGHT_HEADLESS=true

3. Research Agent (AutoCoder Plus)

Overview

Added a new Research Agent that analyzes existing codebases and generates documentation. This enables AutoCoder to work with existing projects, not just create new ones from scratch.

Workflow:

1. /gsd:map-codebase        → Analyzes existing codebase
2. Output: .planning/codebase/*.md  (STACK, ARCHITECTURE, STRUCTURE, CONVENTIONS, INTEGRATIONS)
3. /gsd-to-autocoder-spec   → Converts to app_spec.txt
4. AutoCoder                → Continues development on existing code

New Files Created

MCP Server & Database

File Purpose
mcp_server/research_mcp.py MCP server with 6 research tools
api/research_database.py SQLAlchemy models for research state
api/stack_detector.py Technology stack detection (70+ frameworks)
api/pattern_analyzer.py Architecture pattern analysis
api/convention_extractor.py Code convention extraction

Commands & Skills

File Purpose
.claude/commands/gsd-map-codebase.md Slash command for research
.claude/skills/gsd-map-codebase/SKILL.md Skill definition
.claude/templates/research_prompt.template.md Research agent prompt

Modified Files

client.py

Added research MCP server configuration:

RESEARCH_MCP_TOOLS = [
    "mcp__research__research_scan_files",
    "mcp__research__research_detect_stack",
    "mcp__research__research_add_finding",
    "mcp__research__research_get_context",
    "mcp__research__research_finalize",
    "mcp__research__research_get_stats",
]

# In create_client():
if agent_type == "research":
    mcp_servers = {
        "research": {
            "command": sys.executable,
            "args": ["-m", "mcp_server.research_mcp"],
            "env": {"PROJECT_DIR": str(project_dir.resolve())},
        },
    }

agent.py

Added research agent type handling:

elif agent_type == "research":
    print("Running as RESEARCH agent (codebase analysis)")
    prompt = get_research_prompt(project_dir)

Fixed: Added agent_type=agent_type to create_client() call.

prompts.py

Added research prompt loading:

def get_research_prompt(project_dir: Path | None = None) -> str:
    return load_prompt("research_prompt", project_dir)

autonomous_agent_demo.py

Added "research" to CLI arguments:

choices=["initializer", "coding", "testing", "research"]

Server Files

File Changes
server/routers/agent.py Added /start-research, /research/status, /research/stop endpoints
server/services/process_manager.py Added ResearchAgentProcessManager class and start_research() method
server/websocket.py Added ResearchTracker class for real-time progress updates
server/schemas.py Added ResearchStatus, WSResearchUpdateMessage schemas

Research MCP Tools

Tool Purpose
research_scan_files(pattern, limit) Scan files matching glob pattern
research_detect_stack() Auto-detect technology stack from manifests
research_add_finding(document, section, content, source_files) Add finding to document
research_get_context(document) Get current document state
research_finalize() Write final markdown files
research_get_stats() Get progress statistics

Output Structure

{project}/.planning/
├── research.db              # SQLite database (temporary)
└── codebase/
    ├── STACK.md             # Languages, frameworks, dependencies
    ├── ARCHITECTURE.md      # Patterns, layers, data flow
    ├── STRUCTURE.md         # Directory layout
    ├── CONVENTIONS.md       # Code style, naming
    └── INTEGRATIONS.md      # APIs, databases, services

Usage

CLI:

python autonomous_agent_demo.py --project-dir /path/to/project --agent-type research

Claude Code:

/gsd:map-codebase

After research completes:

/gsd-to-autocoder-spec

Branch

All changes are on branch: feature/research-agent


4. Research Agent UI Integration

Overview

Added a complete UI flow for analyzing existing codebases directly from the browser. Users can now select a folder, watch the research progress in real-time, and view the generated documentation.

User Flow:

Landing Page → "Analyze Existing Codebase" (dropdown)
      ↓
Modal: Select folder + enter project name
      ↓
Progress View: Real-time updates via WebSocket
      ↓
Results View: Tabbed markdown documentation
      ↓
"Convert to AutoCoder Spec" → Continue to spec creation

New UI Components

File Purpose
ui/src/components/research/AnalyzeCodebaseModal.tsx Folder selection modal with project naming
ui/src/components/research/ResearchProgressView.tsx Real-time progress with 🔬 mascot and WebSocket
ui/src/components/research/ResearchResultsView.tsx Tabbed view for 5 documentation files
ui/src/components/research/MarkdownViewer.tsx Markdown rendering with syntax highlighting
ui/src/components/research/index.ts Barrel exports

Modified UI Files

ui/src/components/ProjectSelector.tsx

Added "Analyze Existing Codebase" option:

// New dropdown menu item
<DropdownMenuItem onSelect={() => setShowAnalyzeModal(true)}>
  <FolderSearch size={16} />
  Analyze Existing Codebase
</DropdownMenuItem>

// Modal integration
<AnalyzeCodebaseModal
  isOpen={showAnalyzeModal}
  onClose={() => setShowAnalyzeModal(false)}
  onStartAnalysis={(projectName, projectDir) => {
    navigate(`/research/${projectName}`)
  }}
/>

ui/src/App.tsx

Added research routes:

<Route path="/research/:projectName" element={<ResearchProgressView />} />
<Route path="/research/:projectName/results" element={<ResearchResultsView />} />

ui/src/main.tsx

Added BrowserRouter:

import { BrowserRouter } from 'react-router-dom'

<BrowserRouter>
  <App />
</BrowserRouter>

ui/src/hooks/useWebSocket.ts

Added research_update message handling:

case 'research_update':
  setState(prev => ({
    ...prev,
    researchPhase: message.phase,
    researchFilesScanned: message.files_scanned,
    researchFindingsCount: message.findings_count,
    researchLogs: [...prev.researchLogs, { message: message.message, timestamp: Date.now() }]
  }))
  break

ui/src/lib/types.ts

Added research types:

export type ResearchPhase = 'idle' | 'scanning' | 'analyzing' | 'documenting' | 'complete'

export interface ResearchDoc {
  filename: string
  content: string
}

export interface ResearchDocsResponse {
  success: boolean
  docs: ResearchDoc[]
  generated_at: number
}

export interface ResearchProject {
  name: string
  dir: string
  status: 'analyzing' | 'complete' | 'error'
  phase: ResearchPhase
  filesScanned: number
  findingsCount: number
  completedAt?: string
}

New Backend Endpoint

server/routers/projects.py

Added GET /{name}/research-docs:

@router.get("/{name}/research-docs")
async def get_research_docs(name: str):
    """Get generated research documentation for a project."""
    # Returns: { success, docs: [{filename, content}], generated_at }

New Dependencies

{
  "react-router-dom": "^7.x",
  "react-markdown": "^9.0.0",
  "remark-gfm": "^4.0.0",
  "react-syntax-highlighter": "^15.5.0"
}

UI Features

  • Folder Browser: Reuses existing FolderBrowser component
  • Progress Display: Animated progress bar with phase indicators
  • Research Mascot: 🔬 scientist robot with phase-based animations
  • Terminal Output: Collapsible log viewer with timestamps
  • Markdown Viewer: Syntax highlighting for 20+ languages, copy-to-clipboard
  • Tab Navigation: 5 tabs for STACK, ARCHITECTURE, STRUCTURE, CONVENTIONS, INTEGRATIONS
  • Theme Compatible: Works with all 5 themes (Twitter, Claude, Neo Brutalism, Retro Arcade, Aurora)
  • Responsive Design: Mobile-friendly layout
  • Branch Selection: Safety modal before coding starts (see Section 5)

5. Git Branch Safety

Overview

Added branch selection step before AutoCoder starts coding on existing projects. This prevents accidental direct commits to main/master branches.

Flow:

Research Results → "Convert to Spec" → Branch Selection Modal → Coding

Safety Features

  1. Protected branch detection: main, master, develop, production marked with 🔒
  2. Warning on protected branches: Extra confirmation if user wants to work on main/master
  3. New branch suggestion: Suggests autocoder/{project-name} pattern
  4. Uncommitted changes warning: Alerts user but doesn't block
  5. Non-git repo handling: Allows continuing without git

New Backend Endpoints

File: server/routers/git.py

Endpoint Method Purpose
/{project}/git/branches GET List all branches with protection info
/{project}/git/checkout POST Switch to existing branch
/{project}/git/create-branch POST Create new branch and switch

New UI Component

File: ui/src/components/research/BranchSelectionModal.tsx

Features:

  • Radio group with 3 options: Create new / Use existing / Continue current
  • Branch name validation
  • Loading states during git operations
  • Error handling for edge cases

Modified Files

File Changes
server/routers/git.py NEW - Git management endpoints
server/routers/__init__.py Added git_router export
server/main.py Registered git router
ui/src/lib/api.ts Added listBranches, checkoutBranch, createBranch
ui/src/lib/types.ts Added GitBranch, BranchListResponse, etc.
ui/src/components/research/BranchSelectionModal.tsx NEW - Branch selection modal
ui/src/components/research/ResearchResultsView.tsx Integrated branch modal
ui/src/App.tsx Updated navigation after branch selection

6. Smart Testing Mode

Overview

Added a Smart Testing Mode setting that controls when Playwright browser is used for testing. This reduces overhead by skipping browser automation for API/backend features that don't need it.

Modes:

Mode Description
Full Always use Playwright browser for all features (default)
Smart Use Playwright only for UI features, skip for API/backend features

Note: YOLO mode (existing setting) disables all testing including Playwright.

How Smart Mode Works

The should_use_playwright() function in client.py checks the feature category:

# API/backend features → No Playwright
api_keywords = ["api", "backend", "database", "db", "server", "endpoint", "service"]

# UI features → Use Playwright
ui_keywords = ["ui", "frontend", "component", "page", "view", "screen", "button", "form"]

# Unknown category → Default to Playwright (safe)

Modified Files

Backend

File Changes
server/schemas.py Added VALID_TESTING_MODES, testing_mode field to schemas
server/routers/settings.py Get/set testing_mode setting
server/routers/agent.py Pass testing_mode to process manager
server/services/process_manager.py Pass --testing-mode to agent subprocess
parallel_orchestrator.py Propagate testing_mode to spawned agents
autonomous_agent_demo.py Added --testing-mode CLI argument
agent.py Lookup feature category for smart mode decisions
client.py Added should_use_playwright() function

Frontend

File Changes
ui/src/lib/types.ts Added testing_mode to Settings types
ui/src/hooks/useProjects.ts Added testing_mode default value
ui/src/components/SettingsModal.tsx Added Full/Smart toggle UI

Settings UI

The Settings modal now includes a "Browser Testing" toggle:

  • Compact button group (same style as Model selector)
  • Shows description: "All features" or "UI features only"
  • Disabled when YOLO mode is on (YOLO already skips all testing)

Usage

UI: Settings → Browser Testing → Full/Smart

CLI:

python autonomous_agent_demo.py --project-dir myapp --testing-mode smart

Performance Impact

  • Playwright MCP server spawns a browser process (~100-300MB RAM per agent)
  • Smart mode skips this for API features, reducing memory usage
  • Full mode is safer but uses more resources

7. Re-analyze Codebase for Existing Projects

Overview

Added a Re-analyze Codebase button for existing projects in AutoCoder. This allows running the research agent on a project that's already registered, to update documentation when the codebase has evolved outside of AutoCoder (e.g., manual changes with Claude Code).

Problem solved: Previously, research/analyze was only available for onboarding NEW projects. If you modified an existing project outside of AutoCoder, there was no easy way to update the documentation.

Solution: Added a microscope button in the project header that triggers a re-analysis of the current project.

User Flow

[Open Existing Project] → [🔬 Re-analyze Button in Header]
       ↓
Confirmation Modal (explains what will happen)
       ↓
Research Progress View (real-time updates)
       ↓
Results View (updated documentation)
       ↓
Optionally: Update app_spec.txt

New Files

File Purpose
ui/src/components/research/ReanalyzeCodebaseModal.tsx Confirmation modal with project info and start button

Modified Files

Frontend

File Changes
ui/src/components/research/index.ts Added export for ReanalyzeCodebaseModal
ui/src/lib/api.ts Added getResearchStatus(), startResearchAgent(), stopResearchAgent()
ui/src/App.tsx Added microscope button in header, modal state, navigation handler

API Functions Added

// ui/src/lib/api.ts

interface ResearchStatusResponse {
  status: 'idle' | 'running' | 'complete' | 'error'
  phase?: string
  filesScanned?: number
  findingsCount?: number
}

interface ResearchActionResponse {
  success: boolean
  message: string
}

// Get research agent status for a project
export async function getResearchStatus(projectName: string): Promise<ResearchStatusResponse>

// Start research agent for existing project
export async function startResearchAgent(projectName: string): Promise<ResearchActionResponse>

// Stop research agent
export async function stopResearchAgent(projectName: string): Promise<ResearchActionResponse>

UI Location

The Re-analyze button appears in the project header:

  • Icon: Microscope (🔬)
  • Location: Next to the Reset button (gear icon area)
  • Visibility: Only when a project is selected AND agent is NOT running
  • Tooltip: "Re-analyze Codebase"

Backend Note

The backend already supported this via existing endpoints in server/routers/agent.py:

  • GET /api/projects/{project_name}/agent/research/status
  • POST /api/projects/{project_name}/agent/start-research
  • POST /api/projects/{project_name}/agent/research/stop

No backend changes were needed.


8. Stuck Agent Detection

Overview

Added activity-based stuck agent detection to the parallel orchestrator. Agents that hang without producing output are automatically detected and killed, preventing features from being stuck indefinitely.

Problem solved: Agents can sometimes hang (e.g., waiting indefinitely for API response) without crashing. Previously, these stuck agents would occupy a parallel slot forever, blocking progress.

Solution: Monitor agent output activity. If no output for 20 minutes, the agent is considered stuck and is automatically killed. The feature is then retried.

How It Works

1. Agent starts → timestamp initialized
2. Agent outputs a line → timestamp updated
3. Every 5 seconds → check all agent timestamps
4. If no output for 20 minutes → kill agent, log warning
5. Agent completion handler → clears in_progress flag
6. Feature automatically retries on next loop iteration

Configuration

Constant Value Description
AGENT_INACTIVITY_TIMEOUT 1200 Seconds of inactivity before killing (20 minutes)

The timeout is set to 20 minutes because:

  • Working agents produce continuous output (tool calls, code, thinking)
  • Complex features can take 1-2 hours but always produce output
  • 20 minutes of silence indicates the agent is stuck, not working

Modified Files

parallel_orchestrator.py

New constant:

AGENT_INACTIVITY_TIMEOUT = 1200  # 20 minutes

New tracking dictionary in __init__:

# Track last activity time per agent for stuck detection
self._last_activity: dict[int, float] = {}

Activity tracking in _read_output:

# Update activity timestamp for stuck detection
if feature_id is not None:
    with self._lock:
        self._last_activity[activity_key] = time.time()

New method _check_stuck_agents:

  • Iterates through running coding and testing agents
  • Compares current time vs last activity timestamp
  • Kills agents exceeding AGENT_INACTIVITY_TIMEOUT
  • Logs warnings to console and debug log
  • Returns list of killed feature IDs

Main loop integration:

# Check for stuck agents (no output for AGENT_INACTIVITY_TIMEOUT)
stuck_features = self._check_stuck_agents()
if stuck_features:
    debug_log.log("STUCK", f"Killed {len(stuck_features)} stuck agent(s)")

Cleanup in _on_agent_complete:

# Clean up activity tracking
self._last_activity.pop(feature_id, None)

Log Output

Console warning:

WARNING: Feature #32 agent stuck - no output for 20 minutes. Killing...

Debug log (orchestrator_debug.log):

[STUCK] Killing stuck coding agent for feature #32
    inactive_minutes: 20
    pid: 26979

Benefits

Benefit Description
Self-healing Stuck agents are automatically recovered without manual intervention
No false positives 20-minute timeout is long enough for legitimate slow operations
Low overhead Just comparing timestamps, runs every 5 seconds
Full logging All stuck agent events logged for debugging

Future Improvements

  • Make timeout configurable via settings UI
  • Add WebSocket notification when stuck agent is detected
  • Track stuck agent frequency per feature (identify problematic features)

9. Update Checklist

When updating AutoCoder from upstream, verify these items:

UI Theme Changes

  • ui/src/styles/custom-theme.css is preserved
  • ui/src/components/KanbanColumn.tsx changes are preserved
  • Test both light and dark modes

Research UI Components (new)

  • ui/src/components/research/AnalyzeCodebaseModal.tsx - Folder selection modal
  • ui/src/components/research/ResearchProgressView.tsx - Progress display
  • ui/src/components/research/ResearchResultsView.tsx - Results viewer
  • ui/src/components/research/MarkdownViewer.tsx - Markdown renderer
  • ui/src/components/research/index.ts - Barrel exports
  • ui/src/App.tsx - Research routes preserved
  • ui/src/main.tsx - BrowserRouter wrapper preserved
  • ui/src/components/ProjectSelector.tsx - Analyze button preserved
  • ui/src/hooks/useWebSocket.ts - research_update handling preserved
  • ui/src/lib/types.ts - Research types preserved
  • ui/src/components/research/BranchSelectionModal.tsx - Branch selector
  • Run npm run build in ui/ directory

Git Branch Safety (new)

  • server/routers/git.py - Git management endpoints
  • server/routers/__init__.py - git_router export
  • server/main.py - git router registration
  • ui/src/lib/api.ts - Git API functions preserved
  • ui/src/lib/types.ts - Git types preserved

Backend Changes

  • client.py - Playwright browser/headless defaults preserved
  • client.py - Research MCP server configuration preserved
  • agent.py - Research agent type handling preserved
  • prompts.py - Research prompt loading preserved
  • .env.example - Documentation updates preserved

Research Agent Files (new)

  • mcp_server/research_mcp.py - Research MCP server
  • api/research_database.py - Research SQLAlchemy models
  • api/stack_detector.py - Stack detection utility
  • api/pattern_analyzer.py - Pattern analysis utility
  • api/convention_extractor.py - Convention extraction utility
  • .claude/templates/research_prompt.template.md - Research prompt
  • .claude/commands/gsd-map-codebase.md - Slash command
  • .claude/skills/gsd-map-codebase/SKILL.md - Skill definition
  • server/routers/agent.py - Research endpoints
  • server/services/process_manager.py - Research process manager
  • server/websocket.py - Research progress tracking
  • server/schemas.py - Research schemas

Smart Testing Mode (new)

  • server/schemas.py - VALID_TESTING_MODES and testing_mode fields
  • server/routers/settings.py - testing_mode get/set
  • server/routers/agent.py - testing_mode passed to process manager
  • server/services/process_manager.py - --testing-mode CLI arg
  • parallel_orchestrator.py - testing_mode propagation
  • autonomous_agent_demo.py - --testing-mode argument
  • agent.py - feature category lookup for smart mode
  • client.py - should_use_playwright() function
  • ui/src/lib/types.ts - testing_mode in Settings
  • ui/src/hooks/useProjects.ts - testing_mode default
  • ui/src/components/SettingsModal.tsx - Browser Testing toggle

Re-analyze Codebase (new)

  • ui/src/components/research/ReanalyzeCodebaseModal.tsx - Confirmation modal
  • ui/src/components/research/index.ts - ReanalyzeCodebaseModal export
  • ui/src/lib/api.ts - Research API functions (getResearchStatus, startResearchAgent, stopResearchAgent)
  • ui/src/App.tsx - Microscope button in header, showReanalyzeModal state

Stuck Agent Detection (new)

  • parallel_orchestrator.py - AGENT_INACTIVITY_TIMEOUT constant
  • parallel_orchestrator.py - _last_activity dictionary in init
  • parallel_orchestrator.py - Activity tracking in _read_output
  • parallel_orchestrator.py - _check_stuck_agents method
  • parallel_orchestrator.py - Stuck check in main loop
  • parallel_orchestrator.py - Cleanup in _on_agent_complete

General

  • Verify Playwright uses Firefox by default
  • Check that browser runs headless by default
  • Test research agent: python autonomous_agent_demo.py --project-dir test --agent-type research
  • Test smart testing mode: Settings → Browser Testing → Smart
  • Test stuck agent detection: Let agent run and verify stuck agents are killed after 20 min inactivity

Reverting to Defaults

UI Only

rm ui/src/styles/custom-theme.css
git checkout ui/src/components/KanbanColumn.tsx
cd ui && npm run build

Backend Only

git checkout client.py .env.example

Files Summary

File Type Change Description
ui/src/styles/custom-theme.css UI Twitter-style theme
ui/src/components/KanbanColumn.tsx UI Themeable kanban columns
ui/src/main.tsx UI BrowserRouter wrapper + custom theme import
ui/src/App.tsx UI Research routes
ui/src/components/ProjectSelector.tsx UI "Analyze Existing Codebase" button
ui/src/components/research/AnalyzeCodebaseModal.tsx UI Folder selection modal
ui/src/components/research/ResearchProgressView.tsx UI Real-time progress display
ui/src/components/research/ResearchResultsView.tsx UI Documentation viewer with tabs
ui/src/components/research/MarkdownViewer.tsx UI Markdown + syntax highlighting
ui/src/components/research/index.ts UI Barrel exports
ui/src/components/research/BranchSelectionModal.tsx UI Git branch selection modal
ui/src/components/research/ReanalyzeCodebaseModal.tsx UI Re-analyze confirmation modal
ui/src/hooks/useWebSocket.ts UI research_update message handling
ui/src/lib/types.ts UI Research + Git TypeScript types
server/routers/git.py Server Git branch management endpoints
client.py Backend Firefox + headless defaults, research MCP server
agent.py Backend Research agent type handling
prompts.py Backend Research prompt loading
autonomous_agent_demo.py Backend Research CLI argument
mcp_server/research_mcp.py MCP Research MCP server (6 tools)
api/research_database.py API Research SQLAlchemy models
api/stack_detector.py API Technology stack detection
api/pattern_analyzer.py API Architecture pattern analysis
api/convention_extractor.py API Code convention extraction
server/routers/agent.py Server Research REST endpoints
server/routers/projects.py Server GET /research-docs endpoint
server/services/process_manager.py Server Research process manager
server/websocket.py Server Research WebSocket tracking
server/schemas.py Server Research Pydantic schemas
.claude/templates/research_prompt.template.md Prompt Research agent prompt
.claude/commands/gsd-map-codebase.md Command /gsd:map-codebase
.claude/skills/gsd-map-codebase/SKILL.md Skill Research skill definition
.env.example Config Updated documentation
parallel_orchestrator.py Backend Stuck agent detection with 20-min inactivity timeout

Last Updated

Date: February 2026 Features:

  • Research Agent (AutoCoder Plus) - Analyze existing codebases
  • Research Agent UI - Full browser-based flow for codebase analysis
  • Re-analyze Codebase - Run research on existing projects to update documentation
  • Git Branch Safety - Protected branch warnings, new branch creation before coding
  • Smart Testing Mode - Skip Playwright for API features to reduce overhead
  • Stuck Agent Detection - Auto-kill agents with no output for 20 minutes
  • Twitter-style UI theme with custom theme override system
  • Firefox + headless Playwright defaults

Branch: master