feat: harden company resume, external sessions, and Office UI i18n
Improve suspend/resume identity continuity and external broker session handling, add Office UI internationalization with rebuilt assets, and expand company org configs. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -5461,7 +5461,18 @@ class CompanyWorkItemExecutor:
|
||||
await self._emit_progress(f"[Company:{projection_id}] awaiting peer", task_id=task.id)
|
||||
await self.save_task(task)
|
||||
else:
|
||||
await transition_work_item_from_task(
|
||||
self.store,
|
||||
task,
|
||||
target_status_or_phase=result.status,
|
||||
reason=f"work_item_{result.status.value}",
|
||||
)
|
||||
await self._append_progress(
|
||||
task,
|
||||
f"Work item ended with status {result.status.value}.",
|
||||
)
|
||||
await self._emit_progress(f"[Company:{projection_id}] failed", task_id=task.id)
|
||||
await self.save_task(task)
|
||||
return result
|
||||
|
||||
# Comms park check: if the agent sent any blocking messages
|
||||
@@ -7332,12 +7343,19 @@ class CompanyWorkItemExecutor:
|
||||
metadata_updates["review_resolution"] = copy.deepcopy(resolution)
|
||||
metadata_updates["review_resolution_state"] = "pending"
|
||||
try:
|
||||
current = None
|
||||
if hasattr(self.store, "get_delegation_work_item"):
|
||||
current = await self.store.get_delegation_work_item(review_work_item_id)
|
||||
update_kwargs: dict[str, Any] = {
|
||||
"claimed_by_role_runtime_session_id": "",
|
||||
"claimed_by_seat_id": "",
|
||||
"metadata_updates": metadata_updates,
|
||||
}
|
||||
if current is None or current.phase not in DONE_PHASES or current.phase == phase:
|
||||
update_kwargs["phase"] = phase
|
||||
persisted = await self.store.update_delegation_work_item(
|
||||
review_work_item_id,
|
||||
phase=phase,
|
||||
claimed_by_role_runtime_session_id="",
|
||||
claimed_by_seat_id="",
|
||||
metadata_updates=metadata_updates,
|
||||
**update_kwargs,
|
||||
)
|
||||
except Exception:
|
||||
logger.opt(exception=True).warning(
|
||||
|
||||
@@ -1710,6 +1710,7 @@ class CompanyRuntime:
|
||||
**dict(session.resume_state),
|
||||
**runtime_state,
|
||||
}
|
||||
await self._refresh_adapter_session_state_from_store(session)
|
||||
adapter_state_updates = self._adapter_state_from_result(task, result)
|
||||
if adapter_state_updates:
|
||||
session.adapter_session_state = {
|
||||
@@ -1899,6 +1900,31 @@ class CompanyRuntime:
|
||||
return candidate
|
||||
return None
|
||||
|
||||
async def _refresh_adapter_session_state_from_store(
|
||||
self,
|
||||
session: CompanyMemberSession,
|
||||
) -> None:
|
||||
role_session_id = str(session.role_session_id or "").strip()
|
||||
getter = getattr(self.store, "get_delegation_role_session", None)
|
||||
if not role_session_id or not callable(getter):
|
||||
return
|
||||
try:
|
||||
persisted = await getter(role_session_id)
|
||||
except Exception:
|
||||
logger.opt(exception=True).debug(
|
||||
"company runtime adapter-state refresh failed"
|
||||
)
|
||||
return
|
||||
if persisted is None:
|
||||
return
|
||||
adapter_state = dict(
|
||||
getattr(persisted, "adapter_session_state", {}) or {}
|
||||
)
|
||||
session.adapter_session_state = adapter_state
|
||||
role_session = self.role_sessions.get(role_session_id)
|
||||
if role_session is not None:
|
||||
role_session.adapter_session_state = dict(adapter_state)
|
||||
|
||||
def _ensure_role_session(self, task: Task) -> DelegationRoleSession | None:
|
||||
role_id = self._role_id(task)
|
||||
if not role_id:
|
||||
|
||||
Reference in New Issue
Block a user