File size: 1,916 Bytes
1fb4b54
 
 
afa4de7
 
 
 
 
 
1fb4b54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
afa4de7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from pydantic import BaseModel, Field, field_validator
from typing import Optional, Literal, List, Any, Dict

from agentic_reliability_framework.core.governance.intents import (
    ResourceType,
    PermissionLevel,
    Environment,
    ChangeScope,
)


class BaseIntentRequest(BaseModel):
    environment: Environment
    estimated_cost: Optional[float] = Field(None, ge=0)
    policy_violations: List[str] = Field(default_factory=list)
    requester: str = Field(...)
    provenance: Dict[str, Any] = Field(default_factory=dict)


class ProvisionResourceRequest(BaseIntentRequest):
    intent_type: Literal["provision_resource"] = "provision_resource"
    resource_type: ResourceType
    region: str
    size: str
    configuration: Dict[str, Any] = Field(default_factory=dict)

    @field_validator("region")
    def validate_region(cls, v):
        return v


class GrantAccessRequest(BaseIntentRequest):
    intent_type: Literal["grant_access"] = "grant_access"
    principal: str
    permission_level: PermissionLevel
    resource_scope: str
    justification: Optional[str] = None

    @field_validator("resource_scope")
    def validate_resource_scope(cls, v):
        if not v.startswith("/"):
            raise ValueError("Resource scope must start with '/'")
        return v


class DeployConfigurationRequest(BaseIntentRequest):
    intent_type: Literal["deploy_config"] = "deploy_config"
    service_name: str
    change_scope: ChangeScope
    deployment_target: Environment
    risk_level_hint: Optional[float] = Field(None, ge=0, le=1)
    configuration: Dict[str, Any] = Field(default_factory=dict)

    @field_validator("service_name")
    def validate_service_name(cls, v):
        if len(v) < 3:
            raise ValueError("Service name must be at least 3 characters")
        return v


InfrastructureIntentRequest = ProvisionResourceRequest | GrantAccessRequest | DeployConfigurationRequest