File size: 3,235 Bytes
d4e46e2
d230924
d4e46e2
df99972
022df3f
 
 
 
d1cd589
7172d14
 
 
 
 
5f9a49e
7172d14
 
 
 
 
 
d230924
7172d14
 
d230924
f1594ef
7172d14
d230924
 
 
7172d14
d230924
 
 
 
 
022df3f
7172d14
d4e46e2
b752c9c
 
 
d4e46e2
7172d14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452a06b
 
 
 
 
 
 
 
 
7172d14
452a06b
 
7172d14
 
 
 
452a06b
d4e46e2
df99972
d4e46e2
7172d14
452a06b
5f9a49e
 
 
7172d14
 
 
 
5f9a49e
 
d4e46e2
7172d14
79a030f
d4e46e2
452a06b
d4e46e2
 
f1594ef
 
d4e46e2
df99972
d4e46e2
 
 
79a030f
 
 
 
d4e46e2
 
 
 
 
7172d14
 
 
 
 
3139f8e
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
from pydantic import BaseModel, Field
from typing import List, Dict, Optional, Union, Literal, Any

# --- ORCHESTRATION ---
class UserGoal(BaseModel):
    user_id: str
    project_id: str
    goal_text: str
    roblox_user_id: Optional[str] = "0"
    image_base64: Optional[str] = Field(None, description="Base64 encoded context image.")

class RecallRequest(BaseModel):
    project_id: str
    user_feedback: Optional[str] = "What is the next step?"

class ResetRequest(BaseModel):
    junior_instance_id: str
    supervisor_instance_id: str
    reason: str

# --- FEEDBACK LOOP ---
class SceneObjectState(BaseModel):
    """Represents a snapshot of an object currently in Roblox."""
    id: str # The Name in Roblox
    class_name: str
    position: Dict[str, float]
    size: Dict[str, float]
    parent_name: str

class ProjectFeedback(BaseModel):
    """Data sent FROM the Plugin TO the Orchestrator."""
    project_id: str
    message: str
    scene_snapshot: List[SceneObjectState] = []
    task_id_completed: Optional[str] = None
    status: Literal["SUCCESS", "FAILED"] = "SUCCESS"

# --- MATTER FORMAT ---
class Vector3(BaseModel):
    x: float = 0.0
    y: float = 0.0
    z: float = 0.0

class BuildPayload(BaseModel):
    id: str
    class_name: str = "Part"
    position: Vector3
    rotation: Vector3 = Vector3()
    size: Vector3
    color_hex: str = "#A3A2A5"
    anchored: bool = True
    transparency: float = 0.0
    material: str = "Plastic"
    mesh_id: Optional[str] = None
    texture_id: Optional[str] = None

class CSGPayload(BaseModel):
    operation: Literal["Union", "Subtract"]
    target_id: str
    tool_ids: List[str]

class Attribute(BaseModel):
    name: str
    type: Literal["String", "Number", "Boolean", "Color3"]
    value: Any

class ScriptPayload(BaseModel):
    name: str
    class_name: Literal["Script", "LocalScript", "ModuleScript"]
    parent: str 
    attributes: List[Attribute] = [] 
    source_code: str 

class RiggingCommand(BaseModel):
    part0_id: str
    part1_id: str
    joint_type: Literal["Weld", "Motor6D", "HingeConstraint", "BallSocketConstraint"]
    position: Vector3

# --- PROJECT FLOW ---
class TaskNode(BaseModel):
    task_id: str = Field(default_factory=lambda: "pending_id")
    title: str
    role_required: Literal[
        "PROJECT_MANAGER", 
        "SUPERVISOR_WORLD", 
        "SUPERVISOR_SCRIPT", 
        "3D_ARTIST", 
        "CONCEPT_ARTIST", 
        "SCRIPTING_ENGINEER", 
        "ERRANDS"
    ]
    instruction: str
    status: Literal["PENDING", "IN_PROGRESS", "COMPLETED", "FAILED"] = "PENDING"
    assigned_instance_id: Optional[str] = None
    subtasks: List['TaskNode'] = [] 
    
class ProjectFlow(BaseModel):
    project_id: str
    is_finished: bool = False
    next_task: Optional[TaskNode] = None

# --- COMMUNICATION ---
class AgentMessage(BaseModel):
    id: str
    from_agent: str
    to_agents: List[str]
    role: str
    content: str
    image_base64: Optional[str] = None

class GenerationRequest(BaseModel):
    agent_type: str
    agent_instance_id: str
    conversation_partner_id: str 
    prompt: str
    image_base64: Optional[str] = None

class ImageGenerationRequest(BaseModel):
    agent_instance_id: str
    prompt: str