504 lines
14 KiB
Markdown
504 lines
14 KiB
Markdown
# 🚀 AI Dev Factory - Session Continuation Guide
|
|
|
|
**Last Updated:** 2025-12-03
|
|
**Current Phase:** Phase 2 ✅ COMPLETED | Phase 3 🚀 IN PROGRESS (Simplified)
|
|
**Approach:** Todo-based autonomous development with OpenHands SDK
|
|
|
|
---
|
|
|
|
## 📋 Summary Instructions
|
|
When using compact mode, focus on test output and code changes.
|
|
|
|
**Efficiency Guides:**
|
|
- Claude Code optimization: `claude-code-subagents-doc.md`
|
|
- OpenHands optimization: `openhands-subagents-doc.md`
|
|
|
|
## 🎯 WORKSPACE RULES (CRITICAL - ALWAYS REMEMBER)
|
|
|
|
### ⚠️ HOME DIRECTORY USAGE
|
|
- **NEVER** use `/home/bam/` home directory for project files
|
|
- **ALWAYS** use `/home/bam/claude/mvp-factory/` for all project work
|
|
- **ONLY** access home directory for:
|
|
- System tools (docker, git, etc.)
|
|
- Credentials (SSH keys, API keys in `.ssh/`, `.n8n_api_key`)
|
|
- When specific tools require home directory access
|
|
- **ASK PERMISSION** before accessing `/home/bam/` for any other purpose
|
|
|
|
### 📁 PROJECT STRUCTURE
|
|
All project files must be organized in:
|
|
```
|
|
/home/bam/claude/mvp-factory/
|
|
├── test-scripts/ # All scripts (.py, .sh, .js)
|
|
├── docs/ # Documentation (.md)
|
|
├── openhands/ # OpenHands workspace
|
|
├── services/ # Docker services
|
|
└── implementations/ # Code implementations
|
|
```
|
|
|
|
### 🚫 FILES TO KEEP AWAY FROM HOME
|
|
**Never create these in `/home/bam/`:**
|
|
- Scripts (.py, .sh, .js)
|
|
- Test files
|
|
- Documentation (.md)
|
|
- Configuration files (.json, .yml, .yaml)
|
|
- Any project-related content
|
|
|
|
**These belong in `/home/bam/claude/mvp-factory/`:**
|
|
- All development work
|
|
- All testing
|
|
- All documentation
|
|
- All project files
|
|
|
|
---
|
|
|
|
## 📊 CURRENT STATUS
|
|
|
|
### ✅ What's Working
|
|
- **Gitea:** https://git.oky.sh (HTTPS, PostgreSQL)
|
|
- **n8n:** https://n8n.oky.sh (HTTPS, workflow automation)
|
|
- **Caddy:** Auto SSL with Let's Encrypt
|
|
- **SSH:** n8n ↔ localhost credentials working
|
|
- **OpenHands SDK:** ✅ Verified working - creates TODO.md successfully
|
|
- **Direct SDK Test:** ✅ Created TODO.md with 26 structured tasks
|
|
- **Production Workflows:** 2 active workflows (see Status section below)
|
|
- **Data Preservation:** Using `$node["Node Name"].json` pattern
|
|
|
|
### ✅ Phase 2 Completed
|
|
The CI/CD pipeline is operational: `Gitea push → n8n → OpenHands SDK → Build/Test → Response`
|
|
|
|
### 🎯 Phase 3 Goal (Simplified)
|
|
Build todo-based autonomous system: `Prompt → TODOs → Execute → Test → Commit → Repeat`
|
|
|
|
**Plan:** See `SIMPLIFIED_PHASE3_PLAN.md` for complete 6-node implementation
|
|
|
|
---
|
|
|
|
## 🔧 SYSTEM CONFIGURATION
|
|
|
|
### VM Specs
|
|
```
|
|
Hostname: ai-dev-node | IP: 10.10.10.11 | User: bam
|
|
CPU: 8 vCPU | RAM: 24GB | OS: Ubuntu 22.04
|
|
```
|
|
|
|
### Services
|
|
```bash
|
|
cd /home/bam && docker compose -f services/services-stack/docker-compose.yml ps
|
|
# Services: caddy, gitea, n8n, postgres
|
|
```
|
|
|
|
### API Keys & Credentials
|
|
```
|
|
OpenHands API Keys: /home/bam/openhands/.env
|
|
n8n API Token: /home/bam/.n8n_api_key (JWT)
|
|
SSH Private Key: /home/bam/.ssh/n8n_key
|
|
Gitea API Token: Generated in Gitea settings
|
|
```
|
|
|
|
### 📚 Documentation Files
|
|
```
|
|
SIMPLIFIED_PHASE3_PLAN.md - Todo-based autonomous development plan (1255 lines)
|
|
SESSION_SUMMARY.md - Latest investigation: TODO.md creation issue
|
|
CURRENT_STATUS.md - Current n8n workflow status (2 active workflows)
|
|
TEST_COMMANDS.md - Commands to test workflows and verify TODO.md
|
|
phase2.md - Phase 2 complete documentation
|
|
phase3.md - Old Phase 3 plan (superseded)
|
|
n8n-api.md - Complete n8n API reference
|
|
openhands-subagents-doc.md - OpenHands sub-agents guide
|
|
claude-code-subagents-doc.md - Claude Code sub-agents guide
|
|
custom-subagents-usage-guide.md - Custom project-specific sub-agents guide
|
|
agent-templates.md - Copy-paste ready agent templates
|
|
N8N_DATA_PRESERVATION_SOLUTION.md
|
|
GITEA_N8N_WEBHOOK_GUIDE.md
|
|
test-scripts/README.md - 10 testing scripts with guide
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 OPENHANDS SDK APPROACH (Direct Python)
|
|
|
|
**Use OpenHands SDK directly via Python** in n8n Code nodes (no SSH wrapper).
|
|
|
|
### Why Direct SDK?
|
|
- ✅ No SSH overhead (faster)
|
|
- ✅ Structured JSON output
|
|
- ✅ Direct Python integration
|
|
- ✅ Better error handling
|
|
- ✅ Simpler architecture
|
|
|
|
### SDK Wrapper
|
|
```bash
|
|
/home/bam/openhands-sdk-wrapper-fixed.py (Python script)
|
|
```
|
|
|
|
### Usage in n8n Code Node
|
|
```javascript
|
|
const { execSync } = require('child_process');
|
|
|
|
const command = `python3 /home/bam/openhands-sdk-wrapper-fixed.py "${task}" --workspace ${workspace} --json`;
|
|
|
|
try {
|
|
const output = execSync(command, { encoding: 'utf-8' });
|
|
const result = JSON.parse(output);
|
|
|
|
return {
|
|
success: result.success,
|
|
files_created: result.files_created || [],
|
|
error: result.error || null
|
|
};
|
|
} catch (error) {
|
|
return { success: false, error: error.message };
|
|
}
|
|
```
|
|
|
|
### ⚠️ Critical: Data Preservation Pattern
|
|
Code nodes preserve data by merging:
|
|
|
|
```javascript
|
|
const current = $json;
|
|
const repoData = $node["Extract Repo Info"].json;
|
|
|
|
return {
|
|
...repoData, // ← Preserves repository data!
|
|
current_data: current
|
|
};
|
|
```
|
|
|
|
**See:** `N8N_DATA_PRESERVATION_SOLUTION.md` for complete solution
|
|
|
|
---
|
|
|
|
## 📊 ACTIVE N8N WORKFLOWS
|
|
|
|
### Workflow 1: Old (Code-Only) ❌
|
|
- **ID:** `eZ5zoeglwRrL7lOf`
|
|
- **Name:** "Todo-Based MVP Builder"
|
|
- **Status:** ✅ Active
|
|
- **Webhook:** `https://n8n.oky.sh/webhook/todo-mvp-builder`
|
|
- **Problem:** ❌ Missing SSH node - Code nodes never execute OpenHands
|
|
|
|
### Workflow 2: New (SSH-Based) ✅
|
|
- **ID:** `p6Gt8h23NrsWIk4R`
|
|
- **Name:** "Todo-Based MVP Builder"
|
|
- **Status:** ✅ Active
|
|
- **Webhook:** `https://n8n.oky.sh/webhook/real-todo-mvp`
|
|
- **Structure:** 8 nodes with proper SSH SDK Call
|
|
- **Note:** Imported during investigation (requires approval to keep)
|
|
|
|
### Investigation Results
|
|
✅ **OpenHands SDK Verified:** Creates TODO.md successfully (26 tasks)
|
|
❌ **Old Workflow Issue:** Missing SSH node prevents OpenHands execution
|
|
✅ **New Workflow Status:** Has correct SSH structure
|
|
|
|
**See:** `CURRENT_STATUS.md` for details, `TEST_COMMANDS.md` for verification
|
|
|
|
---
|
|
|
|
## 🤖 CUSTOM SUB-AGENTS
|
|
|
|
Create **project-specific sub-agents** as Markdown files with YAML frontmatter:
|
|
|
|
### How to Create:
|
|
```bash
|
|
# Create agents directory
|
|
mkdir -p .claude/agents
|
|
|
|
# Use /agents command (recommended)
|
|
/agents create
|
|
|
|
# Or create files manually
|
|
cat > .claude/agents/n8n-workflow-specialist.md << 'EOF'
|
|
---
|
|
name: n8n-workflow-specialist
|
|
description: n8n workflow specialist
|
|
model: sonnet
|
|
---
|
|
|
|
You are a specialized n8n workflow agent...
|
|
EOF
|
|
```
|
|
|
|
### Available Custom Agents:
|
|
- **n8n-workflow-specialist** - Workflow design, debugging, data preservation
|
|
- **openhands-sdk-specialist** - CLI integration, task optimization
|
|
- **gitea-integration-specialist** - Webhooks, API, repository management
|
|
- **security-audit-specialist** - API keys, permissions, security checks
|
|
- **docker-services-specialist** - Service management, troubleshooting
|
|
- **phase3-implementation-specialist** - Autonomous build test MVP
|
|
|
|
### Usage in Conversation:
|
|
```
|
|
"Use the n8n-workflow-specialist agent to debug my workflow"
|
|
"Have the security-audit-specialist check API key permissions"
|
|
```
|
|
|
|
**See:** `agent-templates.md` for file templates
|
|
**Guide:** `custom-subagents-usage-guide.md` for complete documentation
|
|
|
|
---
|
|
|
|
## 🎯 WORKING N8N WORKFLOW
|
|
|
|
**Name:** "Gitea → OpenHands - FIXED WITH PASSTHROUGH"
|
|
**ID:** `j1MmXaRhDjvkRSLa`
|
|
**Status:** ✅ Active
|
|
**Webhook:** `https://n8n.oky.sh/webhook/openhands-fixed-test`
|
|
|
|
### Structure
|
|
```
|
|
[1] Gitea Webhook
|
|
↓
|
|
[2] Extract Repo Info (Code)
|
|
↓
|
|
[3] OpenHands Build (SSH)
|
|
→ sh /home/bam/openhands-sdk-wrapper-sh.sh "<task>"
|
|
↓
|
|
[4] Wait 10s
|
|
↓
|
|
[5] Check Build Status (Code) - uses $node pattern
|
|
↓
|
|
[6] Format Response (Code)
|
|
↓
|
|
[7] HTTP Response
|
|
```
|
|
|
|
### Quick Test
|
|
```bash
|
|
curl -X POST https://n8n.oky.sh/webhook/openhands-fixed-test \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"repository": {"name": "test-project", "full_name": "gitadmin/test-project"},
|
|
"ref": "refs/heads/main",
|
|
"after": "abc123def456"
|
|
}'
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 PHASE 3: TODO-BASED AUTONOMOUS DEVELOPMENT
|
|
|
|
### Overview
|
|
Simple 6-node workflow that builds full-stack apps through structured todos.
|
|
|
|
### Workflow: 6-Node Design
|
|
```
|
|
[1] Git Push (Gitea webhook)
|
|
↓
|
|
[2] Extract repo info & prompt
|
|
↓
|
|
[3] Get next todo (or finish)
|
|
↓
|
|
[4] Execute todo (OpenHands SDK)
|
|
↓
|
|
[5] Test changes
|
|
↓
|
|
[6] Commit & push to Gitea
|
|
↓
|
|
└─ Loop back to [3]
|
|
```
|
|
|
|
### How It Works
|
|
|
|
**Step 1:** User pushes: `MVP Prompt: Create a full-stack todo app`
|
|
**Step 2:** OpenHands creates TODO.md with 6-8 tasks
|
|
**Step 3:** Loop executes each task:
|
|
- Execute with OpenHands SDK
|
|
- Test the changes
|
|
- Commit to Gitea
|
|
- Advance to next task
|
|
|
|
**Step 4:** Repeat until all todos complete
|
|
|
|
### Key Components
|
|
|
|
**A. Todo State (n8n staticData)**
|
|
```javascript
|
|
$workflow.staticData = $workflow.staticData || {};
|
|
$workflow.staticData.todos = $workflow.staticData.todos || {};
|
|
|
|
const currentIndex = $workflow.staticData.todos.current_index || 0;
|
|
const todos = $workflow.staticData.todos.list || [];
|
|
|
|
if (currentIndex < todos.length) {
|
|
return { todo: todos[currentIndex], index: currentIndex };
|
|
} else {
|
|
return { action: 'complete', message: 'All todos finished' };
|
|
}
|
|
```
|
|
|
|
**B. Todo Creation**
|
|
```javascript
|
|
const prompt = "Create a full-stack todo app";
|
|
const task = `Analyze prompt and create TODO.md with structured tasks`;
|
|
|
|
const sdkOutput = callOpenHandsSDK(task);
|
|
$workflow.staticData.todos.list = sdkOutput.tasks;
|
|
$workflow.staticData.todos.current_index = 0;
|
|
```
|
|
|
|
**C. Commit Message Pattern**
|
|
```javascript
|
|
const messages = {
|
|
created: '📋 TODOs created from prompt',
|
|
completed: '✅ Complete: {task_name}',
|
|
finished: '🎉 MVP Complete: {app_name}'
|
|
};
|
|
```
|
|
|
|
### Success Criteria
|
|
- [ ] Initial prompt creates TODO.md with ≥5 todos
|
|
- [ ] Each todo executes and commits changes
|
|
- [ ] Loop continues until all todos complete
|
|
- [ ] Final application builds successfully
|
|
- [ ] End-to-end test passes
|
|
|
|
**Complete Details:** See `SIMPLIFIED_PHASE3_PLAN.md` (8 implementation steps, 4-5 hours)
|
|
|
|
---
|
|
|
|
## 🔑 N8N API REFERENCE
|
|
|
|
**See:** `n8n-api.md` for complete documentation
|
|
|
|
### Quick Operations
|
|
```bash
|
|
# List workflows
|
|
curl -H "Authorization: Bearer $(cat /home/bam/.n8n_api_key)" \
|
|
https://n8n.oky.sh/api/v1/workflows
|
|
|
|
# Activate workflow
|
|
curl -X POST -H "Authorization: Bearer $(cat /home/bam/.n8n_api_key)" \
|
|
https://n8n.oky.sh/api/v1/workflows/<ID>/activate
|
|
|
|
# Execute workflow
|
|
curl -X POST -H "Authorization: Bearer $(cat /home/bam/.n8n_api_key)" \
|
|
https://n8n.oky.sh/api/v1/workflows/<ID>/execute
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 REFERENCE COMMANDS
|
|
|
|
### Service Management
|
|
```bash
|
|
# Status
|
|
cd /home/bam && docker compose -f services/services-stack/docker-compose.yml ps
|
|
|
|
# Restart
|
|
cd /home/bam && docker compose -f services/services-stack/docker-compose.yml restart
|
|
|
|
# Logs
|
|
docker logs -f n8n
|
|
docker logs -f caddy
|
|
docker logs -f gitea
|
|
|
|
# n8n workflows
|
|
curl -H "Authorization: Bearer $(cat /home/bam/.n8n_api_key)" \
|
|
https://n8n.oky.sh/api/v1/workflows
|
|
```
|
|
|
|
### Testing
|
|
See: `/home/bam/claude/mvp-factory/test-scripts/README.md`
|
|
|
|
---
|
|
|
|
## 🔐 CREDENTIALS
|
|
|
|
### Login URLs
|
|
- **n8n:** https://n8n.oky.sh (User: admin)
|
|
- **Gitea:** https://git.oky.sh (Admin account)
|
|
|
|
### API Keys
|
|
```
|
|
OpenHands (MiniMax): /home/bam/openhands/.env → MINIMAX_API_KEY
|
|
OpenHands (DeepSeek): /home/bam/openhands/.env → DEEPSEEK_API_KEY
|
|
n8n API: /home/bam/.n8n_api_key (JWT)
|
|
SSH Key: /home/bam/.ssh/n8n_key
|
|
Gitea API: Generated in Gitea user settings
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 KEY LEARNINGS
|
|
|
|
### OpenHands SDK vs API Server
|
|
- **SDK via SSH:** ✅ Reliable, simple, production-ready
|
|
- **API Server:** ❌ Docker complexity, port conflicts
|
|
|
|
### n8n Data Flow
|
|
- SSH nodes **overwrite ALL data** → Use `$node["Previous Node"].json`
|
|
- `passThrough: true` does NOT preserve input
|
|
- Code nodes preserve data by merging with previous output
|
|
|
|
### Best Practices
|
|
- Use `$node` pattern for data preservation
|
|
- Test SDK scripts before n8n integration
|
|
- Keep API keys secure (permissions 600)
|
|
- Implement max retry limits (prevent infinite loops)
|
|
- Update Gitea commit status for visibility
|
|
|
|
---
|
|
|
|
## 🏆 PROJECT STATUS
|
|
|
|
### ✅ Complete
|
|
1. **Phase 1:** Infrastructure Setup
|
|
- Gitea, n8n, Caddy running with SSL
|
|
- Docker compose configured
|
|
- SSH authentication working
|
|
|
|
2. **Phase 2:** OpenHands Integration (SDK)
|
|
- SDK wrapper created & tested
|
|
- n8n workflow integrated
|
|
- Build/test cycle functional
|
|
- Data preservation fixed
|
|
- Repository cleaned up (7 files removed)
|
|
- Testing infrastructure created
|
|
- **Details:** `phase2.md`
|
|
|
|
3. **Phase 3 Investigation:** TODO.md Creation Issue
|
|
- ✅ Root cause identified: Missing SSH node in active workflow
|
|
- ✅ OpenHands SDK verified working (creates TODO.md with 26 tasks)
|
|
- ✅ Two workflows active: old (incomplete) and new (correct structure)
|
|
- ✅ Documentation created: `SESSION_SUMMARY.md`, `CURRENT_STATUS.md`, `TEST_COMMANDS.md`
|
|
- **Issue:** Old workflow missing SSH SDK Call node
|
|
|
|
### 🎯 In Progress (Simplified)
|
|
**Phase 3:** Todo-Based Autonomous Development
|
|
- 6-node simple workflow (vs 11-node complex)
|
|
- OpenHands SDK integration verified working
|
|
- Todo creation and execution loop (pending testing)
|
|
- Full-stack app proof of concept
|
|
- **Decision required:** Keep/remove imported workflow (ID: p6Gt8h23NrsWIk4R)
|
|
- **Plan:** `SIMPLIFIED_PHASE3_PLAN.md`
|
|
- **Testing:** `TEST_COMMANDS.md`
|
|
|
|
---
|
|
|
|
## 🎉 FINAL STATUS
|
|
|
|
- **Repository:** https://git.oky.sh/gitadmin/mvp-factory-openhands
|
|
- **n8n Instance:** https://n8n.oky.sh
|
|
- **Production Workflows:** 2 active (eZ5zoeglwRrL7lOf, p6Gt8h23NrsWIk4R)
|
|
- **OpenHands SDK:** ✅ Verified working (creates TODO.md)
|
|
- **Data Preservation:** ✅ Working
|
|
- **Documentation:** ✅ Organized & Updated (8 files)
|
|
- **Phase 2:** ✅ COMPLETE
|
|
- **Phase 3:** 🚀 IN PROGRESS (Investigation complete, testing pending)
|
|
|
|
**Current Goal:**
|
|
1. Decide on workflow to use (keep old + add SSH, or keep new)
|
|
2. Test TODO.md creation via webhook
|
|
3. Implement full todo execution loop
|
|
|
|
**Key Files:**
|
|
- `SIMPLIFIED_PHASE3_PLAN.md` - Implementation plan
|
|
- `SESSION_SUMMARY.md` - Investigation results
|
|
- `CURRENT_STATUS.md` - Workflow status
|
|
- `TEST_COMMANDS.md` - Testing procedures
|
|
|
|
---
|
|
|
|
*Last Updated: 2025-12-03*
|
|
*Phase 2 complete, Phase 3 investigation complete, testing pending*
|