-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
126 lines (98 loc) · 3.05 KB
/
models.py
File metadata and controls
126 lines (98 loc) · 3.05 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
from __future__ import annotations
from dataclasses import asdict, dataclass, field
from datetime import datetime
from typing import Dict, List
import uuid
def generate_id() -> str:
return str(uuid.uuid4())[:8]
def utc_now() -> str:
return datetime.utcnow().isoformat(timespec="seconds") + "Z"
@dataclass
class AuditEvent:
event_type: str
actor: str
summary: str
timestamp: str = field(default_factory=utc_now)
id: str = field(default_factory=generate_id)
metadata: Dict[str, str] = field(default_factory=dict)
@dataclass
class Review:
reviewer: str
decision: str
comment: str
timestamp: str = field(default_factory=utc_now)
@dataclass
class Commit:
author: str
message: str
diff: Dict[str, str] = field(default_factory=dict)
language: str = ""
stack_delta: List[str] = field(default_factory=list)
timestamp: str = field(default_factory=utc_now)
id: str = field(default_factory=generate_id)
@dataclass
class Branch:
name: str
files: Dict[str, str] = field(default_factory=dict)
commit_ids: List[str] = field(default_factory=list)
@dataclass
class DiscussionMessage:
author: str
text: str
timestamp: str = field(default_factory=utc_now)
@dataclass
class Discussion:
title: str
author: str
channel: str = "general"
status: str = "open"
id: str = field(default_factory=generate_id)
messages: List[DiscussionMessage] = field(default_factory=list)
@dataclass
class PullRequest:
title: str
description: str
author: str
source_branch: str
target_branch: str = "main"
status: str = "open"
id: str = field(default_factory=generate_id)
commits: List[Commit] = field(default_factory=list)
reviews: List[Review] = field(default_factory=list)
@dataclass
class Repository:
name: str
description: str
owner: str
primary_language: str
technology_stack: List[str]
status: str = "active"
id: str = field(default_factory=generate_id)
files: Dict[str, str] = field(default_factory=dict)
branches: Dict[str, Branch] = field(default_factory=dict)
prs: List[PullRequest] = field(default_factory=list)
discussions: List[Discussion] = field(default_factory=list)
commit_history: List[Commit] = field(default_factory=list)
audit_log: List[AuditEvent] = field(default_factory=list)
social_posts: List[str] = field(default_factory=list)
def __post_init__(self) -> None:
if "main" not in self.branches:
self.branches["main"] = Branch(name="main")
@dataclass
class GovernancePolicy:
min_approvals_to_merge: int = 2
reject_blocks_merge: bool = False
allow_agent_repo_deletion: bool = True
require_reason_for_delete: bool = True
humans_observer_only: bool = True
@dataclass
class AgentProfile:
name: str
role: str
capabilities: List[str]
design_bias: str
id: str = field(default_factory=generate_id)
score: int = 0
inventions: List[str] = field(default_factory=list)
def to_dict(value: object) -> Dict[str, object]:
return asdict(value)