Merge PR #9: harden company resume, external sessions, and Office UI i18n

Merges xiaodong-l's hardening work: company suspend-checkpoint resume
reconciliation, external session token lifecycle fixes, Windows launch
shims, codex shell_environment_policy forwarding, Office UI i18n
(en/zh-CN), and two org presets. frontend_dist is rebuilt from the
merged sources in this commit so the #11 runtime-status fixes and the
i18n bundle coexist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

# Conflicts:
#	opc/plugins/office_ui/frontend_dist/assets/index-BgyI65M_.js
#	opc/plugins/office_ui/frontend_dist/index.html
This commit is contained in:
LZH-YS1998
2026-07-21 15:34:28 +08:00
32 changed files with 2562 additions and 445 deletions
+22 -4
View File
@@ -5661,7 +5661,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
@@ -7532,12 +7543,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: