NOW RAG is actually usable... might switch to gemma3:4b from glm-4.6 cloud for expenses reasons but we'll see

This commit is contained in:
Renn F
2026-01-03 05:07:45 +01:00
parent 16dda8134b
commit 1d173a5203
76 changed files with 4196 additions and 10668 deletions
+72
View File
@@ -0,0 +1,72 @@
# Agent Model
## Core Fields
| Field | Type | Description |
|-------|------|-------------|
| `id` | UUID | Primary key |
| `name` | String | Display name |
| `slug` | String | URL-safe ID (e.g., `be-dev-1`) |
| `role` | Enum | Agent role |
| `team` | Enum | Team affiliation |
| `status` | Enum | active, idle, offline |
## Roles
| Role | Description |
|------|-------------|
| `ceo` | Human executive |
| `product_owner` | Product strategy |
| `head_marketing` | External comms |
| `auditor` | Silent observer |
| `main_pm` | Coordinates all cells |
| `cell_pm` | Manages one cell |
| `developer` | Writes code |
| `qa` | Reviews and tests |
| `documenter` | Writes documentation |
| `system` | Internal orchestrator |
## Teams
| Team | Agents |
|------|--------|
| `backend` | be-pm, be-dev-*, be-qa, be-doc |
| `frontend` | fe-pm, fe-dev-*, fe-qa, fe-doc |
| `ux_ui` | ux-pm, ux-dev-*, ux-qa, ux-doc |
| `main_pm` | main-pm |
| `board` | product-owner, head-marketing, auditor |
| `marketing` | head-marketing |
## Status
| Status | Meaning |
|--------|---------|
| `active` | Currently working |
| `idle` | Available for work |
| `offline` | Not available |
## Capabilities
Example capabilities:
- `code_execution`
- `git_operations`
- `documentation`
- `testing`
## Model Configuration
Stored in `model_config` JSON:
- LLM provider
- Model name
- Temperature
- Other settings
## Agent-Specific Fields
| Field | Description |
|-------|-------------|
| `current_task_id` | Currently assigned task |
| `journal_id` | Personal journal |
| `system_prompt` | Base prompt |
| `permissions` | Channel access |
| `metrics` | Performance data |
+70
View File
@@ -0,0 +1,70 @@
# Channel Structure
## Channel Types
| Type | Purpose | Example |
|------|---------|---------|
| `cell` | Internal team | #backend-cell |
| `cross_cell` | Role coordination | #dev-all, #qa-all |
| `management` | PM/Board | #main-pm-board |
| `special` | Announcements | #all-hands |
## Cell Channels
| Channel | Members |
|---------|---------|
| #backend-cell | be-pm, be-dev-*, be-qa, be-doc |
| #frontend-cell | fe-pm, fe-dev-*, fe-qa, fe-doc |
| #uxui-cell | ux-pm, ux-dev-*, ux-qa, ux-doc |
## Cross-Cell Channels
| Channel | Members |
|---------|---------|
| #dev-all | All developers |
| #qa-all | All QAs |
| #pm-all | All PMs |
| #doc-all | All documenters |
## Management Channels
| Channel | Members |
|---------|---------|
| #main-pm-board | Main PM, Board |
| #board-private | Board only |
## Special Channels
| Channel | Access |
|---------|--------|
| #announcements | Read: all, Write: PM/Board |
| #all-hands | Read/Write: all |
## Auditor Access
Auditor has **silent read access** to ALL channels:
- Does not appear in member lists
- Cannot send messages
- Observes all activity
## Channel Access Rules
| Role | Own Cell | Cross-Cell | Management |
|------|----------|------------|------------|
| Developer | Read/Write | Read/Write | - |
| QA | Read/Write | Read/Write | - |
| Documenter | Read/Write | Read/Write | - |
| Cell PM | Read/Write | Read/Write | - |
| Main PM | Read/Write | Read/Write | Read/Write |
| Board | - | - | Read/Write |
| Auditor | Silent Read | Silent Read | Silent Read |
## Messaging
```python
roboco_message_send({
channel: "backend-cell",
content: "Starting work on rate limiting",
task_id: task_id
})
```
+71
View File
@@ -0,0 +1,71 @@
# Organizational Structure
## Hierarchy
```
CEO (Renzo - Human)
|
+-- Board (3 agents)
+-- Product Owner
+-- Head of Marketing
+-- Auditor (silent observer)
|
+-- Main PM
|
+-- Backend Cell
+-- Frontend Cell
+-- UX/UI Cell
```
## Agent Count
| Role | Count |
|------|-------|
| CEO | 1 (human) |
| Product Owner | 1 |
| Head of Marketing | 1 |
| Auditor | 1 |
| Main PM | 1 |
| Cell PMs | 3 |
| Developers | 6 (2 per cell) |
| QAs | 3 (1 per cell) |
| Documenters | 3 (1 per cell) |
| **Total** | **20** (19 AI + 1 human) |
## Cells
| Cell | PM | Developers | QA | Documenter |
|------|-----|------------|-----|------------|
| Backend | be-pm | be-dev-1, be-dev-2 | be-qa | be-doc |
| Frontend | fe-pm | fe-dev-1, fe-dev-2 | fe-qa | fe-doc |
| UX/UI | ux-pm | ux-dev-1, ux-dev-2 | ux-qa | ux-doc |
## Teams
| Team | Members |
|------|---------|
| executive | ceo |
| board | product-owner, head-marketing, auditor |
| management | main-pm, be-pm, fe-pm, ux-pm |
| developers | all devs |
| qa | all QAs |
| documentation | all documenters |
## Escalation Chain
```
Developer/QA/Documenter → Cell PM → Main PM → Product Owner → CEO
```
## Communication
Each role can communicate with:
| Role | Can Communicate With |
|------|---------------------|
| CEO | Everyone |
| Board | CEO, other board, Main PM |
| Auditor | Everyone (silent read all) |
| Main PM | CEO, Board, Cell PMs |
| Cell PM | Main PM, cell members |
| Cell Members | Cell PM, other cell members |
+72
View File
@@ -0,0 +1,72 @@
# Task Model
## Core Fields
| Field | Type | Description |
|-------|------|-------------|
| `id` | UUID | Primary key |
| `title` | String | Task title |
| `description` | Text | Detailed description |
| `acceptance_criteria` | Array | How we know it's done |
| `status` | Enum | Lifecycle state |
| `priority` | Int | 0=P0 (highest) to 3=P3 |
| `team` | Enum | backend, frontend, ux_ui |
## Task Types
| Type | Description |
|------|-------------|
| `code` | Development work |
| `documentation` | Writing docs |
| `research` | Investigation |
| `planning` | Task breakdown |
| `design` | UX/UI design |
| `administrative` | Admin work |
## Git Fields
| Field | Description |
|-------|-------------|
| `requires_git` | Whether git workflow applies |
| `project_id` | Associated project |
| `branch_name` | Git branch for task |
| `work_session_id` | Active work session |
| `pr_number` | PR number |
| `pr_url` | Full PR URL |
| `docs_complete` | Documenter finished |
| `pr_created` | Developer created PR |
| `commits` | Linked commits |
## Assignment Fields
| Field | Description |
|-------|-------------|
| `created_by` | Agent who created |
| `assigned_to` | Currently assigned |
| `parent_task_id` | Parent for subtasks |
| `dependency_ids` | Blocking tasks |
## Context Fields
| Field | Description |
|-------|-------------|
| `plan` | Implementation plan |
| `quick_context` | 2-3 sentence summary |
| `proactive_context` | RAG context at claim |
| `dev_notes` | Developer notes |
| `qa_notes` | QA feedback |
## Timestamps
| Field | Description |
|-------|-------------|
| `claimed_at` | When claimed |
| `started_at` | When started |
| `completed_at` | When completed |
| `target_date` | Target date |
## Indexes
- `ix_tasks_team_status` - Team + Status queries
- `ix_tasks_assigned_status` - Assignee + Status
- `ix_tasks_project_status` - Project + Status
+71
View File
@@ -0,0 +1,71 @@
# Workspace Structure
## Multi-Agent Isolation
Each agent gets their own git clone:
```
{workspaces_root}/
└── {project-slug}/
└── {team}/
└── {agent-slug}/
└── [git repo files]
```
## Example
```
/data/workspaces/
└── roboco/
├── backend/
│ ├── be-dev-1/ # be-dev-1's workspace
│ ├── be-dev-2/ # be-dev-2's workspace
│ ├── be-qa/ # be-qa's workspace
│ ├── be-pm/ # be-pm's workspace
│ └── be-doc/ # be-doc's workspace
├── frontend/
│ ├── fe-dev-1/
│ └── ...
└── ux_ui/
└── ...
```
## Configuration
```bash
# Environment variables
ROBOCO_WORKSPACES_ROOT=/data/workspaces
ROBOCO_WORKSPACE_AUTO_CLONE=true
ROBOCO_WORKSPACE_CLONE_TIMEOUT=300
```
## Features
| Feature | Description |
|---------|-------------|
| Auto-clone | Workspaces created on first access |
| Isolation | No file locking conflicts |
| Branch independence | Agents on different branches |
| Project-scoped | Organized by project slug |
## Benefits
1. **Parallel Development**: Multiple agents on same project
2. **No Conflicts**: Each has own working tree
3. **Branch Flexibility**: Different branches simultaneously
4. **Clean State**: Fresh clone if needed
## Workspace Resolution
When agent needs workspace:
```python
# Service resolves path
workspace_path = await workspace_service.get_workspace(
project_slug="roboco",
agent_id="be-dev-1"
)
# Returns: /data/workspaces/roboco/backend/be-dev-1
```
If `auto_clone=True` and workspace doesn't exist, it's created automatically.