Skip to content

# TASK_PHASE_AGENT_SYSTEM_PROMPTS_MVP_v2

## Проєкт

microdao-daarion (MVP DAARION.city)

## Фаза

Agent System Prompts — Coverage + Runtime Integration

## Статус

✅ COMPLETED

## Мета

1. Заповнити системні промти для всіх ключових агентів міста (City / District / Node)
2. Підключити зберігання промтів у БД до реального DAGI Router runtime

## Результат

### 1. Повне покриття агентів (16 агентів)

#### City / Core

- ✅ DAARWIZZ — core, safety, governance, tools
- ✅ MicroDAO Orchestrator — core, safety
- ✅ DevTools Agent — core, safety, tools

#### District / MicroDAO

- ✅ GREENFOOD — core, safety, tools
- ✅ Helion — core, safety, tools
- ✅ SOUL — core, safety
- ✅ DRUID — core, safety, tools
- ✅ NUTRA — core, safety
- ✅ EONARCH — core, safety
- ✅ CLAN — core
- ✅ Yaromir — core
- ✅ Monitor — core, safety

#### Node Agents

- ✅ monitor-node1 (Node Guardian NODE1) — core, safety, governance
- ✅ monitor-node2 (Node Guardian NODE2) — core, safety
- ✅ node-steward-node1 — core
- ✅ node-steward-node2 — core

### 2. Runtime Integration

#### Нові API Endpoints

    GET /internal/agents/{agent_id}/prompts/runtime

Повертає промти для агента (тільки content, без метаданих).

    GET /internal/agents/{agent_id}/system-prompt

Повертає зібраний system prompt для LLM виклику.

    POST /internal/agents/prompts/status
    Body: { "agent_ids": ["agent-1", "agent-2"] }

Перевіряє наявність промтів для списку агентів.

#### DAGI Router Integration

Створено `services/router/prompt_builder.py`: - `PromptBuilder` клас для побудови system prompts - Пріоритети: БД → router-config → fallback - Автоматичне завантаження контексту (node, district) - `get_agent_system_prompt()` convenience function

Оновлено `/v1/agents/{agent_id}/infer`: - Автоматично завантажує system prompt з БД - Fallback на router-config.yml - Логування джерела промту

### 3. UI Індикатори

#### DAGIRouterCard

- 🧠 іконка біля імені агента якщо `has_prompts = true`
- Напівпрозора іконка якщо агент active але без промтів
- Tooltip з інформацією про статус

### 4. Файли

#### Міграції

- `migrations/038_agent_prompts_full_coverage.sql` — повний seed

#### Backend

- `services/city-service/repo_city.py`:
- `get_runtime_prompts(agent_id)`
- `build_system_prompt(agent, prompts, context)`
- `get_agent_with_runtime_prompt(agent_id)`

- `check_agents_prompts_status(agent_ids)`

- `services/city-service/routes_city.py`:

- Нові endpoints для runtime prompts
- `DAGIRouterAgentItem.has_prompts` поле

#### Router

- `services/router/prompt_builder.py` — новий модуль
- `services/router/main.py` — інтеграція з prompt_builder

#### Frontend

- `apps/web/src/hooks/useDAGIAudit.ts` — `has_prompts` в типах
- `apps/web/src/components/node-dashboard/DAGIRouterCard.tsx` — UI індикатор

#### Тести

- `tests/test_agent_prompts_runtime.py`

## Acceptance Criteria

Критерій | Статус
--- | ---
Всі агенти з Target Coverage мають core prompt | ✅
DAGI Router завантажує промти з БД | ✅
Fallback на config якщо БД порожня | ✅
UI показує індикатор has_prompts | ✅
API для batch перевірки статусу | ✅
Unit тести | ✅

## Як застосувати

    # 1. Застосувати міграцію
    docker exec -i dagi-postgres psql -U postgres -d daarion < migrations/038_agent_prompts_full_coverage.sql

    # 2. Перезапустити city-service
    docker-compose restart daarion-city-service

    # 3. Перезапустити router (опційно)
    docker-compose restart daarion-router

    # 4. Зібрати frontend
    cd apps/web && npm run build

    # 5. Запустити тести
    pytest tests/test_agent_prompts_runtime.py -v

## Наступні кроки (v3)

1. Версіонування промтів — історія змін з rollback
2. A/B testing — різні версії промтів для тестування
3. Template system — шаблони з variables
4. Metrics — трекінг ефективності промтів
5. UI Editor — advanced editor з preview