fix(ui): preserve durable org identity for runtime approvals
This commit is contained in:
@@ -4247,7 +4247,21 @@ class CompanyWorkItemExecutor:
|
||||
existing_task_ids = {str(task.id or "").strip() for task in existing_tasks if str(task.id or "").strip()}
|
||||
existing_work_item_ids = set(task_by_linked_work_item_id(existing_tasks))
|
||||
root_task = sorted(existing_tasks, key=lambda item: (item.created_at, item.id))[0]
|
||||
runtime_topology = dict((root_task.metadata or {}).get("runtime_topology", {}) or {})
|
||||
root_metadata = dict(root_task.metadata or {})
|
||||
custom_runtime = str(root_metadata.get("company_profile", "") or "").strip().lower() == "custom"
|
||||
runtime_org_id = str(
|
||||
getattr(root_task, "org_id", "")
|
||||
or root_metadata.get("org_id")
|
||||
or root_metadata.get("organization_id")
|
||||
or ""
|
||||
).strip() or None
|
||||
if not custom_runtime:
|
||||
runtime_org_id = None
|
||||
if runtime_org_id:
|
||||
for existing_task in existing_tasks:
|
||||
if self._sync_runtime_org_identity(existing_task, runtime_org_id):
|
||||
await self.store.save_task(existing_task)
|
||||
runtime_topology = dict(root_metadata.get("runtime_topology", {}) or {})
|
||||
root_parent_session_id = str(
|
||||
root_task.parent_session_id
|
||||
or root_task.session_id
|
||||
@@ -4283,6 +4297,8 @@ class CompanyWorkItemExecutor:
|
||||
persisted = await get_runtime_task(work_item_id)
|
||||
if persisted is not None:
|
||||
set_linked_work_item_id(persisted, work_item_id)
|
||||
if self._sync_runtime_org_identity(persisted, runtime_org_id):
|
||||
await self.store.save_task(persisted)
|
||||
self._raise_for_runtime_projection_issues(persisted, work_item, work_item_by_id)
|
||||
if persisted.id not in existing_task_ids:
|
||||
existing_tasks.append(persisted)
|
||||
@@ -4413,6 +4429,9 @@ class CompanyWorkItemExecutor:
|
||||
task_metadata.update(copy_work_item_execution_metadata(work_item))
|
||||
task_metadata.update(owner_execution_copy)
|
||||
task_metadata[WORK_ITEM_TURN_TYPE_KEY] = turn_type
|
||||
if custom_runtime:
|
||||
task_metadata["org_id"] = runtime_org_id or ""
|
||||
task_metadata["organization_id"] = runtime_org_id or ""
|
||||
temp_task = Task(
|
||||
id=str(uuid.uuid4()),
|
||||
title=str(getattr(work_item, "title", "") or projection_id or "Runtime Work Item").strip(),
|
||||
@@ -4423,6 +4442,7 @@ class CompanyWorkItemExecutor:
|
||||
session_id=session_id,
|
||||
parent_session_id=root_parent_session_id,
|
||||
assigned_external_agent=assigned_external_agent,
|
||||
org_id=runtime_org_id,
|
||||
metadata=task_metadata,
|
||||
)
|
||||
dependency_projection_ids: list[str] = []
|
||||
@@ -4454,6 +4474,7 @@ class CompanyWorkItemExecutor:
|
||||
parent_session_id=temp_task.parent_session_id,
|
||||
assigned_external_agent=temp_task.assigned_external_agent,
|
||||
dependencies=dependency_projection_ids,
|
||||
org_id=runtime_org_id,
|
||||
metadata=task_metadata,
|
||||
)
|
||||
set_linked_work_item_id(task, work_item_id)
|
||||
@@ -4471,6 +4492,8 @@ class CompanyWorkItemExecutor:
|
||||
"failed to link new runtime Task "
|
||||
f"{task.id} for WorkItem {work_item_id}"
|
||||
)
|
||||
if self._sync_runtime_org_identity(task, runtime_org_id):
|
||||
await self.store.save_task(task)
|
||||
set_linked_work_item_id(task, work_item_id)
|
||||
self._raise_for_runtime_projection_issues(task, work_item, work_item_by_id)
|
||||
if self.memory is not None and task.session_id:
|
||||
@@ -4510,6 +4533,23 @@ class CompanyWorkItemExecutor:
|
||||
await self.save_task(task)
|
||||
return existing_tasks
|
||||
|
||||
@staticmethod
|
||||
def _sync_runtime_org_identity(task: Task, org_id: str | None) -> bool:
|
||||
normalized_org_id = str(org_id or "").strip()
|
||||
if not normalized_org_id:
|
||||
return False
|
||||
metadata = dict(task.metadata or {})
|
||||
changed = str(getattr(task, "org_id", "") or "").strip() != normalized_org_id
|
||||
changed = changed or metadata.get("org_id") != normalized_org_id
|
||||
changed = changed or metadata.get("organization_id") != normalized_org_id
|
||||
if not changed:
|
||||
return False
|
||||
task.org_id = normalized_org_id
|
||||
metadata["org_id"] = normalized_org_id
|
||||
metadata["organization_id"] = normalized_org_id
|
||||
task.metadata = metadata
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def _runtime_work_kind_to_work_item_turn_type(work_kind: str) -> str:
|
||||
return canonical_work_item_turn_type_for_kind(work_kind)
|
||||
|
||||
Reference in New Issue
Block a user