fix(office-ui): native progress parity, ui_state lock hardening, approval-card idempotency
Native agent progress panel (company mode): - ws_handler: filter runtime bookkeeping noise (turn/status/member_inbox_updated), keep tool_completed as tool_call, thinking summary previews content, preserve raw thinking_delta fragments (no strip; skip whitespace-only) - frontend progressLog: summarize thinking by content preview; merge thinking by detail only so the 'Thinking' label never splices into text - AgentProgressBlock: add bottom "Show more (N earlier steps)" toggle ui_state.db "database is locked" hardening: - ws_handler: isolate engine progress/kanban/runtime-event callbacks so UI persistence failures never crash work items - chat_store: busy_timeout, _retry_locked backoff, idempotent insert_message (INSERT OR REPLACE), create_channel read-before-write to stop poll writes - server: flock single-instance guard for `opc ui` per OPC home Approval card duplicate-click bug: - EscalationPanel: disable buttons on click with Submitting state and 30s reconnect fallback - ws_handler: stale-escalation branch checks real card status (new chat_store.get_checkpoint_message); already-resolved cards get an accurate "already handled (decision: X)" reply without being re-marked stale; dedup identical helper messages within 120s to stop reply spam Company mode prompt: - add soft guidance that the runtime monitors state and re-activates roles, so leaders need not poll work items after delegation/review Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -50,6 +50,9 @@ class OfficeServiceFactory:
|
||||
on_escalation=self.on_escalation,
|
||||
)
|
||||
self.db = await aiosqlite.connect(str(self.engine.opc_home / "ui_state.db"))
|
||||
# Wait for a concurrent writer (e.g. a running office-UI server)
|
||||
# instead of failing after sqlite's 5s default with 'database is locked'.
|
||||
await self.db.execute("PRAGMA busy_timeout=30000")
|
||||
agent_store = AgentStore(self.db)
|
||||
await agent_store.initialize()
|
||||
chat_store = ChatStore(self.db)
|
||||
|
||||
Reference in New Issue
Block a user