profit 8c6e7831e9 Add Phase 10-12 implementation: multi-tenant, marketplace, observability
Major additions:
- marketplace/: Agent template registry with FTS5 search, ratings, versioning
- observability/: Prometheus metrics, distributed tracing, structured logging
- ledger/migrations/: Database migration scripts for multi-tenant support
- tests/governance/: 15 new test files for phases 6-12 (295 total tests)
- bin/validate-phases: Full 12-phase validation script

New features:
- Multi-tenant support with tenant isolation and quota enforcement
- Agent marketplace with semantic versioning and search
- Observability with metrics, tracing, and log correlation
- Tier-1 agent bootstrap scripts

Updated components:
- ledger/api.py: Extended API for tenants, marketplace, observability
- ledger/schema.sql: Added tenant, project, marketplace tables
- testing/framework.ts: Enhanced test framework
- checkpoint/checkpoint.py: Improved checkpoint management

Archived:
- External integrations (Slack/GitHub/PagerDuty) moved to .archive/
- Old checkpoint files cleaned up

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 18:39:47 -05:00

225 lines
6.0 KiB
Markdown

# LLM Planner Agent
> Tier 0 Observer agent with LLM-powered plan generation
## Overview
The LLM Planner is a governed Tier 0 Observer agent that uses OpenRouter LLMs to generate implementation plans. It follows strict governance constraints - it can read, analyze, and plan but cannot execute any actions.
## Capabilities
| Capability | Allowed |
|------------|---------|
| Read documentation | Yes |
| Read inventory | Yes |
| Read logs | Yes |
| Generate plans | Yes |
| LLM inference | Yes |
| Execute commands | **No** |
| Modify files | **No** |
| SSH/Terraform/Ansible | **No** |
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ LLM Planner Agent │
├─────────────────────────────────────────────────────────────────┤
│ agent.py Core agent with LLM integration │
│ governance.py DragonflyDB state tracking & revocation │
│ governed_agent.py Governance-wrapped agent runner │
│ monitors.py Action monitoring and logging │
└─────────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌───────────┐ ┌──────────┐
│OpenRouter│ │DragonflyDB│ │ Ledger │
│ LLM │ │ (State) │ │ (SQLite) │
└─────────┘ └───────────┘ └──────────┘
```
## Quick Start
```bash
# Enter the agent directory
cd /opt/agent-governance/agents/llm-planner
# Activate virtual environment
source .venv/bin/activate
# Run the agent
python main.py
```
## Configuration
### Agent Metadata
```python
AGENT_METADATA = {
"agent_id": "llm-planner-001",
"agent_role": "observer",
"tier": 0,
"confidence_threshold": 0.7,
"allowed_side_effects": [
"read_docs",
"read_inventory",
"read_logs",
"generate_plan",
"llm_inference"
],
"forbidden_actions": [
"ssh", "create_vm", "modify_vm", "delete_vm",
"run_ansible", "run_terraform", "write_secrets",
"execute_shell", "modify_files"
]
}
```
### Environment Variables
| Variable | Description | Required |
|----------|-------------|----------|
| `OPENROUTER_API_KEY` | OpenRouter API key | Yes (or from Vault) |
## Structured Output
All agent outputs follow the Foundation Document schema:
```python
class AgentOutput:
agent_id: str # Agent identifier
version: str # Agent version
timestamp: str # ISO timestamp
action: str # Action attempted
decision: Decision # EXECUTE, SKIP, ESCALATE, ERROR
confidence: float # 0.0 to 1.0
assumptions: list[str] # Assumptions made
dependencies: list[str] # Required dependencies
side_effects: list # Side effects declared
notes_for_humans: str # Human-readable notes
```
### Decision Types
| Decision | Description |
|----------|-------------|
| `EXECUTE` | Action approved and completed |
| `SKIP` | Action skipped (not applicable) |
| `ESCALATE` | Requires human review |
| `INSUFFICIENT_INFORMATION` | Cannot proceed without more data |
| `ERROR` | Action failed |
## Governance Integration
### State Tracking (DragonflyDB)
```python
from governance import AgentStateTracker
tracker = AgentStateTracker(agent_id="llm-planner-001")
tracker.update_phase(AgentPhase.PLAN)
tracker.update_heartbeat()
```
### Revocation Checking
```python
from governance import is_revoked, check_lock
if is_revoked(agent_id):
# Agent has been revoked - stop immediately
sys.exit(1)
```
### Ledger Logging
All actions are logged to SQLite:
- `/opt/agent-governance/ledger/governance.db`
## Modules
### agent.py (410 lines)
Core agent implementation with:
- Task request handling
- LLM inference via OpenRouter
- Structured output generation
- Confidence scoring
### governance.py (750 lines)
Real-time governance via DragonflyDB:
- Agent state tracking
- Phase transitions
- Error budget management
- Revocation handling
- Lock management
### governed_agent.py (380 lines)
Governance-wrapped agent runner:
- Preflight checks
- Action monitoring
- Compliance verification
- Handoff support
### monitors.py (300 lines)
Monitoring infrastructure:
- Action logging
- Metrics collection
- Alert generation
## Example Usage
```python
from agent import LLMPlannerAgent, TaskRequest
# Create agent
agent = LLMPlannerAgent()
# Create task
task = TaskRequest(
task_type="plan",
description="Create deployment plan for web service",
constraints=["No production access", "Use sandbox only"]
)
# Generate plan
output = agent.process_task(task)
print(f"Decision: {output.decision}")
print(f"Confidence: {output.confidence}")
print(f"Plan: {output.notes_for_humans}")
```
## Testing
```bash
# Activate venv
source .venv/bin/activate
# Run agent tests
python -m pytest tests/
# Test import
python -c "from agent import LLMPlannerAgent; print('OK')"
```
## Dependencies
- Python 3.11+
- OpenAI SDK (for OpenRouter compatibility)
- Pydantic (structured outputs)
- Redis (DragonflyDB client)
All dependencies are installed in `.venv/`.
## Architecture Reference
Part of the [Agent Governance System](../../docs/ARCHITECTURE.md).
See also:
- [Tier 0 Agent](../tier0-agent) - Base observer agent
- [LLM Planner TS](../llm-planner-ts) - TypeScript variant
---
*Last updated: 2026-01-24*