Initial commit
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
"""Canonical execution identity for Office UI sessions.
|
||||
|
||||
The UI groups saved organizations under the Company picker, but persisted
|
||||
session identity still needs to distinguish the built-in corporate company
|
||||
from a custom organization. This module is the single normalization boundary
|
||||
for that identity:
|
||||
|
||||
* task sessions clear company/org identity.
|
||||
* company sessions always mean the built-in corporate company.
|
||||
* custom organization sessions are stored as exec_mode=org,
|
||||
company_profile=custom, plus an org_id.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
|
||||
from opc.core.config import validate_organization_id
|
||||
|
||||
PREFERRED_AGENTS: frozenset[str] = frozenset({
|
||||
"native",
|
||||
"codex",
|
||||
"claude_code",
|
||||
"cursor",
|
||||
"opencode",
|
||||
})
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ExecutionIdentity:
|
||||
exec_mode: str
|
||||
company_profile: str = "corporate"
|
||||
org_id: str = ""
|
||||
preferred_agent: str = "native"
|
||||
|
||||
@property
|
||||
def is_task(self) -> bool:
|
||||
return self.exec_mode == "task"
|
||||
|
||||
@property
|
||||
def is_company(self) -> bool:
|
||||
return self.exec_mode == "company"
|
||||
|
||||
@property
|
||||
def is_custom_org(self) -> bool:
|
||||
return self.exec_mode == "org"
|
||||
|
||||
@property
|
||||
def is_company_runtime(self) -> bool:
|
||||
return self.exec_mode in {"company", "org"}
|
||||
|
||||
|
||||
def normalize_exec_mode(value: Any) -> str:
|
||||
normalized = str(value or "").strip().lower()
|
||||
if normalized in {"project", "single", "task"}:
|
||||
return "task"
|
||||
if normalized == "company":
|
||||
return "company"
|
||||
if normalized in {"org", "custom"}:
|
||||
return "org"
|
||||
return "task"
|
||||
|
||||
|
||||
def normalize_company_profile(value: Any, *, default: str = "corporate") -> str:
|
||||
normalized = str(value or "").strip().lower()
|
||||
if normalized == "classic":
|
||||
return "corporate"
|
||||
if normalized in {"corporate", "custom"}:
|
||||
return normalized
|
||||
|
||||
fallback = str(default or "").strip().lower()
|
||||
if fallback == "classic":
|
||||
return "corporate"
|
||||
return fallback if fallback in {"corporate", "custom"} else "corporate"
|
||||
|
||||
|
||||
def normalize_preferred_agent(value: Any, *, default: str = "native") -> str:
|
||||
normalized = str(value or "").strip().lower().replace("-", "_")
|
||||
if normalized in PREFERRED_AGENTS:
|
||||
return normalized
|
||||
fallback = str(default or "").strip().lower().replace("-", "_")
|
||||
return fallback if fallback in PREFERRED_AGENTS else "native"
|
||||
|
||||
|
||||
def normalize_org_id(value: Any) -> str:
|
||||
raw = str(value or "").strip()
|
||||
if not raw:
|
||||
return ""
|
||||
try:
|
||||
return validate_organization_id(raw)
|
||||
except ValueError:
|
||||
return ""
|
||||
|
||||
|
||||
def canonicalize_execution_identity(
|
||||
*,
|
||||
exec_mode: Any = None,
|
||||
company_profile: Any = None,
|
||||
org_id: Any = None,
|
||||
preferred_agent: Any = None,
|
||||
default_exec_mode: str = "task",
|
||||
default_company_profile: str = "corporate",
|
||||
default_preferred_agent: str = "native",
|
||||
explicit_exec_mode: bool | None = None,
|
||||
) -> ExecutionIdentity:
|
||||
raw_exec = str(exec_mode or "").strip()
|
||||
has_explicit_mode = bool(raw_exec) if explicit_exec_mode is None else bool(explicit_exec_mode)
|
||||
requested_mode = normalize_exec_mode(raw_exec if has_explicit_mode else default_exec_mode)
|
||||
requested_profile = normalize_company_profile(company_profile, default=default_company_profile)
|
||||
requested_org_id = normalize_org_id(org_id)
|
||||
requested_agent = normalize_preferred_agent(preferred_agent, default=default_preferred_agent)
|
||||
|
||||
if not has_explicit_mode and (requested_profile == "custom" or requested_org_id):
|
||||
requested_mode = "org"
|
||||
|
||||
if requested_mode == "org":
|
||||
return ExecutionIdentity(
|
||||
exec_mode="org",
|
||||
company_profile="custom",
|
||||
org_id=requested_org_id,
|
||||
preferred_agent=requested_agent,
|
||||
)
|
||||
if requested_mode == "company":
|
||||
return ExecutionIdentity(
|
||||
exec_mode="company",
|
||||
company_profile="corporate",
|
||||
org_id="",
|
||||
preferred_agent=requested_agent,
|
||||
)
|
||||
return ExecutionIdentity(
|
||||
exec_mode="task",
|
||||
company_profile="corporate",
|
||||
org_id="",
|
||||
preferred_agent=requested_agent,
|
||||
)
|
||||
|
||||
|
||||
def task_metadata(task: Any | None) -> dict[str, Any]:
|
||||
return dict(getattr(task, "metadata", {}) or {}) if task is not None else {}
|
||||
|
||||
|
||||
def execution_identity_from_task(
|
||||
task: Any | None,
|
||||
*,
|
||||
default_exec_mode: str = "task",
|
||||
default_company_profile: str = "corporate",
|
||||
default_preferred_agent: str = "native",
|
||||
default_org_id: Any = "",
|
||||
) -> ExecutionIdentity:
|
||||
metadata = task_metadata(task)
|
||||
raw_exec_mode = str(metadata.get("exec_mode", "") or "").strip()
|
||||
execution_mode = str(metadata.get("execution_mode", "") or "").strip().lower()
|
||||
company_profile = metadata.get("company_profile")
|
||||
metadata_profile = str(company_profile or "").strip().lower()
|
||||
metadata_org_id = (
|
||||
metadata.get("org_id")
|
||||
or metadata.get("organization_id")
|
||||
or getattr(task, "org_id", None)
|
||||
or ""
|
||||
)
|
||||
|
||||
if raw_exec_mode:
|
||||
exec_mode = raw_exec_mode
|
||||
explicit = True
|
||||
elif metadata_profile == "custom":
|
||||
exec_mode = "org"
|
||||
explicit = True
|
||||
elif execution_mode == "company_mode" or metadata_profile:
|
||||
exec_mode = "company"
|
||||
explicit = True
|
||||
elif metadata_org_id:
|
||||
exec_mode = "org"
|
||||
explicit = True
|
||||
else:
|
||||
exec_mode = default_exec_mode
|
||||
explicit = False
|
||||
resolved_org_id = metadata_org_id if explicit else default_org_id
|
||||
|
||||
return canonicalize_execution_identity(
|
||||
exec_mode=exec_mode,
|
||||
company_profile=company_profile if company_profile not in (None, "", [], {}) else default_company_profile,
|
||||
org_id=resolved_org_id,
|
||||
preferred_agent=metadata.get("preferred_agent"),
|
||||
default_exec_mode=default_exec_mode,
|
||||
default_company_profile=default_company_profile,
|
||||
default_preferred_agent=default_preferred_agent,
|
||||
explicit_exec_mode=explicit,
|
||||
)
|
||||
Reference in New Issue
Block a user