FEAT - TASKER: показ Codex Agent API по Launcher entitlement

This commit is contained in:
DCCONSTRUCTIONS
2026-05-14 20:49:52 +03:00
parent 2ae353c8d5
commit 97566faba3
13 changed files with 276 additions and 34 deletions
@@ -25,6 +25,7 @@ def get_nodedc_workspace_creation_policy(user, workspace_slug=None):
"default_managed_by": "tasker",
"invite_approval": "tasker",
"default_invite_approval": "tasker",
"service_modules": {},
"workspaces": [],
"reason": "NODE.DC workspace policy is not configured.",
}
@@ -45,6 +46,7 @@ def get_nodedc_workspace_creation_policy(user, workspace_slug=None):
"default_managed_by": "tasker",
"invite_approval": "tasker",
"default_invite_approval": "tasker",
"service_modules": {},
"workspaces": [],
"reason": "NODE.DC identity is not linked." if enforce_unlinked else "Standalone user without NODE.DC identity.",
}
@@ -75,11 +77,18 @@ def get_nodedc_workspace_creation_policy(user, workspace_slug=None):
"default_managed_by": "tasker",
"invite_approval": "disabled",
"default_invite_approval": "tasker",
"service_modules": {},
"workspaces": [],
"reason": "NODE.DC workspace policy is unavailable.",
}
workspace_policy = payload.get("workspacePolicy") if isinstance(payload.get("workspacePolicy"), dict) else {}
service_modules = normalize_service_modules(
workspace_policy.get("serviceModules")
or workspace_policy.get("service_modules")
or payload.get("serviceModules")
or payload.get("service_modules")
)
access_allowed = bool(payload.get("allowed"))
if not workspace_policy:
return {
@@ -90,6 +99,7 @@ def get_nodedc_workspace_creation_policy(user, workspace_slug=None):
"default_managed_by": "tasker",
"invite_approval": "tasker",
"default_invite_approval": "tasker",
"service_modules": service_modules,
"workspaces": [],
"reason": payload.get("reason") or "NODE.DC access check does not expose workspace policy.",
}
@@ -117,6 +127,7 @@ def get_nodedc_workspace_creation_policy(user, workspace_slug=None):
"default_managed_by": normalize_managed_by(workspace_policy.get("defaultManagedBy") or workspace_policy.get("managedBy")),
"invite_approval": invite_approval,
"default_invite_approval": default_invite_approval,
"service_modules": service_modules,
"workspaces": workspaces,
"reason": workspace_policy.get("reason") or payload.get("reason") or "NODE.DC workspace policy decision.",
}
@@ -159,6 +170,18 @@ def normalize_workspace_management_list(value):
return workspaces
def normalize_service_modules(value):
if not isinstance(value, dict):
return {}
service_modules = {}
for module_key in ("codex_agents",):
if value.get(module_key) is True:
service_modules[module_key] = True
return service_modules
def resolve_workspace_managed_by(workspace_slug, workspaces, fallback):
if isinstance(workspace_slug, str) and workspace_slug.strip():
normalized_slug = workspace_slug.strip()