homelab-codex-ws/services/agent-system/action-model.md

1.5 KiB

Action Approval Data Model

Actions are JSON files stored in /opt/homelab/actions/{status}/{action_id}.json.

Statuses

  • pending: Waiting for operator approval.
  • approved: Approved by operator, ready for execution.
  • rejected: Rejected by operator, will not be executed.
  • running: Currently being executed by an agent.
  • completed: Successfully executed.
  • failed: Execution failed.

Schema

{
  "action_id": "string",
  "service": "string",
  "node": "string",
  "type": "deploy_service | restart_service | rollback | scale",
  "risk": "nominal | guarded | critical",
  "status": "pending | approved | rejected | ...",
  "created_at": <unix_seconds>,
  "updated_at": <unix_seconds>,
  "details": {
    "image": "string",
    "reason": "string",
    "diff": "string"
  },
  "transition_history": [
    {
      "from": "string | null",
      "to": "string",
      "timestamp": <unix_seconds>,
      "by": "string (system | operator-tg-12345 | webui)"
    }
  ]
}

Workflow

  1. A system component (e.g. runtime-materializer or a future analyzer) creates a file in actions/pending/.
  2. telegram-bot detects the file, sends a message to allowed users.
  3. Operator clicks "Approve" or "Reject".
  4. telegram-bot moves the file to actions/approved/ or actions/rejected/ atomically, appending a transition to transition_history.
  5. The responsible agent (e.g. stability-agent on the target node) picks up the approved action, moves it to running, executes it, and finally moves it to completed or failed.