Initial commit
This commit is contained in:
@@ -0,0 +1,345 @@
|
||||
"""Built-in company runtime profiles and helpers."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from opc.core.config import (
|
||||
ArtifactPolicyConfig,
|
||||
CommunicationPolicyConfig,
|
||||
GateHarnessPolicyConfig,
|
||||
HandoffPolicyConfig,
|
||||
MemoryPolicyConfig,
|
||||
ReviewPolicyConfig,
|
||||
RoleConfig,
|
||||
RoleRuntimePolicyConfig,
|
||||
RuntimePolicyConfig,
|
||||
)
|
||||
from opc.core.models import CompanyProfile
|
||||
from opc.layer2_organization.data_acquisition_policy import ACQUISITION_SPECIALIST_ROLE_ID
|
||||
|
||||
_BROWSER_RESEARCH_TOOLS = [
|
||||
"browser_navigate",
|
||||
"browser_navigate_back",
|
||||
"browser_snapshot",
|
||||
"browser_wait_for",
|
||||
"browser_scroll",
|
||||
"browser_take_screenshot",
|
||||
]
|
||||
|
||||
_BROWSER_EXECUTION_TOOLS = [
|
||||
"browser_navigate",
|
||||
"browser_navigate_back",
|
||||
"browser_click",
|
||||
"browser_snapshot",
|
||||
"browser_type",
|
||||
"browser_wait_for",
|
||||
"browser_scroll",
|
||||
"browser_select_option",
|
||||
"browser_take_screenshot",
|
||||
"browser_close",
|
||||
]
|
||||
|
||||
_CORPORATE_COORDINATION_TOOLS = [
|
||||
"file_read",
|
||||
"file_search",
|
||||
"list_dir",
|
||||
"todo_write",
|
||||
"todo_read",
|
||||
]
|
||||
|
||||
_CORPORATE_BOOTSTRAP_TOOLS = [
|
||||
*_CORPORATE_COORDINATION_TOOLS,
|
||||
"shell_exec",
|
||||
"file_write",
|
||||
"file_edit",
|
||||
]
|
||||
|
||||
_CORPORATE_WEB_COORDINATION_TOOLS = [
|
||||
*_CORPORATE_COORDINATION_TOOLS,
|
||||
"web_search",
|
||||
"web_fetch",
|
||||
]
|
||||
|
||||
_CORPORATE_EXECUTION_TOOLS = [
|
||||
"shell_exec",
|
||||
"file_read",
|
||||
"file_write",
|
||||
"file_edit",
|
||||
"file_search",
|
||||
"list_dir",
|
||||
"web_search",
|
||||
"web_fetch",
|
||||
"todo_write",
|
||||
"todo_read",
|
||||
*_BROWSER_EXECUTION_TOOLS,
|
||||
]
|
||||
|
||||
_CORPORATE_QA_TOOLS = [
|
||||
"file_read",
|
||||
"file_write",
|
||||
"file_search",
|
||||
"list_dir",
|
||||
"shell_exec",
|
||||
"browser_navigate",
|
||||
"browser_navigate_back",
|
||||
"browser_snapshot",
|
||||
"browser_wait_for",
|
||||
"browser_scroll",
|
||||
"browser_select_option",
|
||||
"browser_take_screenshot",
|
||||
]
|
||||
|
||||
_CORPORATE_ENV_TOOLS = [
|
||||
"shell_exec",
|
||||
"file_read",
|
||||
"file_write",
|
||||
"file_edit",
|
||||
"file_search",
|
||||
"list_dir",
|
||||
"web_search",
|
||||
"web_fetch",
|
||||
"todo_write",
|
||||
"todo_read",
|
||||
]
|
||||
|
||||
_CORPORATE_DATA_ACQUISITION_TOOLS = [
|
||||
"shell_exec",
|
||||
"file_read",
|
||||
"file_write",
|
||||
"file_search",
|
||||
"list_dir",
|
||||
"web_search",
|
||||
"web_fetch",
|
||||
"todo_write",
|
||||
"todo_read",
|
||||
*_BROWSER_EXECUTION_TOOLS,
|
||||
]
|
||||
|
||||
|
||||
def get_company_profile_descriptions() -> dict[str, str]:
|
||||
return {
|
||||
CompanyProfile.CORPORATE.value: (
|
||||
"A hierarchical corporate runtime with CEO, C-suite executives (CTO/CMO/COO), and specialized workers. Execution is driven by work items and role queues."
|
||||
),
|
||||
CompanyProfile.CUSTOM.value: (
|
||||
"A user-defined company runtime. Roles and work items drive execution."
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def get_builtin_runtime_policies() -> dict[str, RuntimePolicyConfig]:
|
||||
return {
|
||||
CompanyProfile.CORPORATE.value: RuntimePolicyConfig(
|
||||
communication=CommunicationPolicyConfig(
|
||||
default_mode="dm",
|
||||
blocking_default=False,
|
||||
meeting_required_for=["architecture", "cross_team_conflict"],
|
||||
allow_broadcast=True,
|
||||
),
|
||||
memory=MemoryPolicyConfig(
|
||||
include_role_memory=True,
|
||||
include_project_memory=False,
|
||||
include_decision_log=True,
|
||||
include_artifact_index=True,
|
||||
recent_history_lines=12,
|
||||
),
|
||||
handoff=HandoffPolicyConfig(
|
||||
require_structured_handoff=True,
|
||||
require_ack=False,
|
||||
include_risks=True,
|
||||
include_open_questions=True,
|
||||
),
|
||||
artifact=ArtifactPolicyConfig(
|
||||
enforce_contract=False,
|
||||
require_artifact_index=True,
|
||||
required_kinds=[],
|
||||
),
|
||||
review=ReviewPolicyConfig(
|
||||
enable_work_item_gates=False,
|
||||
strict_gate_inference=False,
|
||||
require_reviewer_role=True,
|
||||
allow_human_override=True,
|
||||
),
|
||||
gate_harness=GateHarnessPolicyConfig(
|
||||
decision_mode="agent_first",
|
||||
default_degrade_policy="allow",
|
||||
allow_pass_with_constraints=True,
|
||||
),
|
||||
),
|
||||
CompanyProfile.CUSTOM.value: RuntimePolicyConfig(
|
||||
gate_harness=GateHarnessPolicyConfig(
|
||||
decision_mode="agent_first",
|
||||
default_degrade_policy="allow",
|
||||
allow_pass_with_constraints=True,
|
||||
),
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def _apply_configured_role_overrides(
|
||||
builtin_roles: list[RoleConfig],
|
||||
configured_roles: list[RoleConfig] | None = None,
|
||||
) -> list[RoleConfig]:
|
||||
"""Overlay explicit org_config role fields onto builtin role presets."""
|
||||
if not configured_roles:
|
||||
return builtin_roles
|
||||
|
||||
configured_by_id = {role.id: role for role in configured_roles}
|
||||
merged: list[RoleConfig] = []
|
||||
for builtin_role in builtin_roles:
|
||||
configured_role = configured_by_id.get(builtin_role.id)
|
||||
if configured_role is None:
|
||||
merged.append(builtin_role)
|
||||
continue
|
||||
|
||||
update_fields = {
|
||||
field_name: getattr(configured_role, field_name)
|
||||
for field_name in configured_role.model_fields_set
|
||||
if field_name != "id"
|
||||
}
|
||||
if not update_fields:
|
||||
merged.append(builtin_role)
|
||||
continue
|
||||
merged.append(builtin_role.model_copy(update=update_fields, deep=True))
|
||||
return merged
|
||||
|
||||
|
||||
def get_builtin_roles(
|
||||
profile: str,
|
||||
configured_roles: list[RoleConfig] | None = None,
|
||||
) -> list[RoleConfig]:
|
||||
# Corporate roles (also fallback for custom and unknown profiles)
|
||||
return _apply_configured_role_overrides([
|
||||
RoleConfig(
|
||||
id="ceo",
|
||||
name="CEO",
|
||||
icon="leader",
|
||||
responsibility="Strategic intake, high-level routing, final aggregation and delivery to the owner.",
|
||||
can_spawn=["cto", "cmo", "coo"],
|
||||
tools=list(_CORPORATE_BOOTSTRAP_TOOLS),
|
||||
prompt_refs=["Route tasks to the appropriate C-suite executive. Aggregate final results."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="cto",
|
||||
name="CTO",
|
||||
icon="code",
|
||||
responsibility="Technical planning, architecture decisions, code review, and engineering oversight.",
|
||||
reports_to="ceo",
|
||||
can_spawn=["senior_engineer", "devops_engineer"],
|
||||
tools=[*_CORPORATE_WEB_COORDINATION_TOOLS, "shell_exec"],
|
||||
prompt_refs=["Focus on technical feasibility, architecture quality, and engineering best practices."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="cmo",
|
||||
name="CMO",
|
||||
icon="marketing",
|
||||
responsibility="Marketing strategy, content planning, UX review, and brand oversight.",
|
||||
reports_to="ceo",
|
||||
can_spawn=["content_specialist", "designer"],
|
||||
tools=[*_CORPORATE_WEB_COORDINATION_TOOLS, *_BROWSER_RESEARCH_TOOLS],
|
||||
prompt_refs=["Optimize for audience fit, brand consistency, and content quality."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="coo",
|
||||
name="COO",
|
||||
icon="strategy",
|
||||
responsibility="Operations coordination, process management, cross-team alignment, and quality assurance.",
|
||||
reports_to="ceo",
|
||||
can_spawn=[ACQUISITION_SPECIALIST_ROLE_ID, "qa_analyst"],
|
||||
tools=[*_CORPORATE_WEB_COORDINATION_TOOLS, *_BROWSER_RESEARCH_TOOLS],
|
||||
prompt_refs=["Ensure operational efficiency, process compliance, and delivery quality."],
|
||||
),
|
||||
RoleConfig(
|
||||
id=ACQUISITION_SPECIALIST_ROLE_ID,
|
||||
name="Acquisition Specialist",
|
||||
icon="target",
|
||||
responsibility="Discover, verify, prepare, and report task-critical external inputs inside the shared workspace.",
|
||||
reports_to="coo",
|
||||
preferred_external_agent="claude_code",
|
||||
tools=list(_CORPORATE_DATA_ACQUISITION_TOOLS),
|
||||
prompt_refs=[
|
||||
"Run data acquisition in four phases: Discover, Verify, Prepare, Report.",
|
||||
"For media tasks, HTML snapshots and URL lists never count as acquired binary assets.",
|
||||
"Use standard CLI download tools through shell_exec instead of ad hoc inline network scripts.",
|
||||
],
|
||||
),
|
||||
RoleConfig(
|
||||
id="senior_engineer",
|
||||
name="Senior Engineer",
|
||||
icon="terminal",
|
||||
responsibility="Code implementation, system development, and technical execution.",
|
||||
reports_to="cto",
|
||||
preferred_external_agent="codex",
|
||||
runtime_policy=RoleRuntimePolicyConfig(execution_strategy="auto"),
|
||||
tools=list(_CORPORATE_EXECUTION_TOOLS),
|
||||
prompt_refs=["Write clean, tested code. Leave clear documentation for reviewers."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="devops_engineer",
|
||||
name="DevOps Engineer",
|
||||
icon="settings",
|
||||
responsibility="Infrastructure, deployment, CI/CD, monitoring, and operational hardening.",
|
||||
reports_to="cto",
|
||||
preferred_external_agent="cursor",
|
||||
tools=list(_CORPORATE_EXECUTION_TOOLS),
|
||||
prompt_refs=["Prioritize operational safety, observability, and deployment readiness."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="content_specialist",
|
||||
name="Content Specialist",
|
||||
icon="writing",
|
||||
responsibility="Documentation, copywriting, presentations, and user-facing writing.",
|
||||
reports_to="cmo",
|
||||
tools=list(_CORPORATE_EXECUTION_TOOLS),
|
||||
prompt_refs=["Write clearly for the target audience. Polish deliverables."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="designer",
|
||||
name="Designer",
|
||||
icon="design",
|
||||
responsibility="Visual design, UX artifacts, wireframes, and design system work.",
|
||||
reports_to="cmo",
|
||||
tools=list(_CORPORATE_EXECUTION_TOOLS),
|
||||
prompt_refs=["Focus on usability, visual consistency, and design quality."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="qa_analyst",
|
||||
name="QA Analyst",
|
||||
icon="bug",
|
||||
responsibility="Testing, security review, compliance checks, and acceptance validation.",
|
||||
reports_to="coo",
|
||||
tools=list(_CORPORATE_QA_TOOLS),
|
||||
prompt_refs=["Test rigorously. Reject unclear or unsafe outputs."],
|
||||
),
|
||||
RoleConfig(
|
||||
id="env_engineer",
|
||||
name="Environment Engineer",
|
||||
icon="database",
|
||||
responsibility=(
|
||||
"Probe the host environment, install required tools and dependencies, "
|
||||
"prepare the assigned target_output_dir and base workspace directories, "
|
||||
"configure runtime environments (conda/venv/docker/system packages), "
|
||||
"and produce a verified environment manifest for downstream execution work items. "
|
||||
"Supports any toolchain: video editing (FFmpeg, DaVinci), 3D engines (Unity, Unreal, Blender, Godot), "
|
||||
"audio processing (FMOD, Wwise, SoX), ML/AI frameworks (PyTorch, TensorFlow), "
|
||||
"game development SDKs, design tools, and any other software the task requires."
|
||||
),
|
||||
reports_to="cto",
|
||||
skill_refs=["env_provisioning"],
|
||||
runtime_policy=RoleRuntimePolicyConfig(
|
||||
execution_strategy="native",
|
||||
default_turn_type="setup",
|
||||
shell_timeout_override=1800,
|
||||
),
|
||||
tools=list(_CORPORATE_ENV_TOOLS),
|
||||
prompt_refs=[
|
||||
"Always probe what is already installed before attempting installation.",
|
||||
"Prepare the assigned target_output_dir before downstream work items run, including any missing parent directories and baseline workspace folders.",
|
||||
"Produce a structured environment_manifest JSON as your final artifact.",
|
||||
"Include verification commands that downstream work items can use to validate the environment.",
|
||||
"Prefer system package managers (apt, brew, dnf) for system tools, pip/conda/uv for Python packages.",
|
||||
"When GPU is needed, check CUDA/ROCm availability and driver versions.",
|
||||
"For complex environments, create isolated envs (conda/venv) rather than polluting the host.",
|
||||
],
|
||||
),
|
||||
], configured_roles)
|
||||
|
||||
Reference in New Issue
Block a user