feat(agent99): add durable completion callback
This commit is contained in:
73
apps/api/src/models/agent99_completion.py
Normal file
73
apps/api/src/models/agent99_completion.py
Normal file
@@ -0,0 +1,73 @@
|
||||
"""Bounded Agent99 completion callback contracts."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
class Agent99TelegramReceipt(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid", str_strip_whitespace=True)
|
||||
|
||||
sent: bool = False
|
||||
suppressed: bool = False
|
||||
reason: str | None = Field(default=None, max_length=80)
|
||||
message_format: str | None = Field(default=None, max_length=80)
|
||||
visual_sent: bool = False
|
||||
visual_file: str | None = Field(
|
||||
default=None,
|
||||
max_length=180,
|
||||
pattern=r"^[^/\\]+$",
|
||||
)
|
||||
|
||||
|
||||
class Agent99ProblemReceipt(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
key: str | None = Field(default=None, max_length=240)
|
||||
occurrences: int = Field(default=0, ge=0)
|
||||
verified_resolved: int = Field(default=0, ge=0)
|
||||
failed: int = Field(default=0, ge=0)
|
||||
degraded: int = Field(default=0, ge=0)
|
||||
blocked: int = Field(default=0, ge=0)
|
||||
verifying: int = Field(default=0, ge=0)
|
||||
candidate_ready: int = Field(default=0, ge=0)
|
||||
|
||||
|
||||
class Agent99CompletionCallbackRequest(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid", str_strip_whitespace=True)
|
||||
|
||||
schema_version: Literal["agent99_completion_callback_v1"]
|
||||
callback_id: str = Field(min_length=3, max_length=180, pattern=r"^[A-Za-z0-9_.:-]+$")
|
||||
project_id: str = Field(default="awoooi", min_length=1, max_length=64)
|
||||
run_id: str = Field(min_length=3, max_length=180)
|
||||
trace_id: str = Field(min_length=3, max_length=180)
|
||||
work_item_id: str = Field(min_length=3, max_length=180)
|
||||
alert_id: str | None = Field(default=None, max_length=180)
|
||||
correlation_key: str | None = Field(default=None, max_length=240)
|
||||
source: str = Field(default="agent99", max_length=120)
|
||||
mode: str = Field(min_length=2, max_length=80)
|
||||
outcome_state: Literal[
|
||||
"resolved",
|
||||
"candidate_ready",
|
||||
"verifying",
|
||||
"degraded",
|
||||
"blocked",
|
||||
"failed",
|
||||
]
|
||||
controlled_apply: bool = False
|
||||
transport_ok: bool
|
||||
verifier_name: str = Field(min_length=2, max_length=160)
|
||||
verifier_passed: bool
|
||||
source_event_resolved: bool
|
||||
source_event_resolution_policy: str = Field(max_length=120)
|
||||
duration_seconds: float = Field(ge=0, le=3600)
|
||||
evidence_ref: str = Field(min_length=1, max_length=180, pattern=r"^[^/\\]+$")
|
||||
alert_kind: str | None = Field(default=None, max_length=120)
|
||||
alert_service: str | None = Field(default=None, max_length=160)
|
||||
alert_host: str | None = Field(default=None, max_length=160)
|
||||
telegram: Agent99TelegramReceipt = Field(default_factory=Agent99TelegramReceipt)
|
||||
problem: Agent99ProblemReceipt = Field(default_factory=Agent99ProblemReceipt)
|
||||
occurred_at: datetime
|
||||
Reference in New Issue
Block a user