- forward taskSuggestionDeliveryMode through the Codex app-server dynamic tool build (same sibling-harness omission class previously fixed for clientCaps); spawn_task/dismiss_task silently never existed for GPT-backed sessions
- regression test asserting the forward, mirroring the existing clientCaps case
- spawn_task/dismiss_task descriptions rewritten with usage calibration: when to flag, when not to, scope-vs-flagging, prose-is-lost, operator-phrasing bridge, prompt self-containment, git-checkout cwd, registry ephemerality; param descriptions state where each field renders
Release-note context: GPT-backed sessions can now create suggested-task cards (the tools were silently absent on the Codex harness), and the tools carry much clearer model-facing guidance.
Record channel delivery custody before recipient-visible sends so restart recovery cannot duplicate accepted finals.
Ambiguous legacy markers now fail closed with a visible interruption instead of blind replay.
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
* fix(gateway): unify media privacy in chat history
Centralize image, audio, video, and persisted media-fact privacy at the shared Gateway history projection. Remove duplicate sessions_history redaction, validate managed media claims canonically, and keep safe media-only user turns renderable.
* test(gateway): type history RPC integration
* test(agents): align history fixture with gateway projection
Before returning a successful immutable ownership result, recheck whether a WAL appeared and rerun through SQLite normal read-only access. Add a deterministic real-SQLite regression that commits the ownership row after the immutable connection opens.
Keep the immutable-first ownership probe and WAL-aware corruption retry in one bounded connection loop. The selected location makes the retry single-shot while preserving handle cleanup and the no-mutation cold-family path.
Retry an immutable ownership probe through SQLite normal read-only access when a WAL appears during the open and produces a false corruption result. Treat a WAL without SHM as live state, and cover that rebuildable-index boundary with a real database-family regression.
Treat only live WAL sidecars as requiring a normal read-only ownership connection. Keep rollback journals on immutable preflight inspection so the canonical writable lifecycle remains the sole owner of crash recovery.
Use WAL-aware read-only access when SQLite journal sidecars are live, while retaining immutable inspection for quiescent database families. This prevents false corruption during concurrent state initialization without mutating cold databases or changing the schema.
* fix: exec approvals fail with a pairing prompt when the device pairing lacks operator.approvals
Local approval-runtime gateway calls sent the shared device identity in
addition to the process-local approval-runtime token, so the connect was
re-evaluated against that device paired scope baseline and rejected with
"scope upgrade pending approval" whenever operator.approvals was missing
from the pairing record. Nothing could clear it from inside the session:
the prompt that would approve the upgrade is delivered by the call that
was rejected.
Make the two requester credentials exclusive by passing the resolved
approval-runtime token into the identity resolver, matching the rule
createOperatorApprovalsGatewayClient already follows. Remote,
env-selected, and gatewayUrl-override approval calls still require a
stable device identity, as does approved node.invoke system.run replay.
Closes#121525
* fix(lint): drop dead applySessionHints import in media-only reply test
4b0151682e removed the only use of applySessionHints from this test but
left the import, so oxlint fails no-unused-vars on main and blocks the
merge gate. The vi.mock("./body.js") factory keeps the entry because
get-reply-run-context.ts still calls it.
* refactor(sessions): collapse session accessor aliases
Declaration ownership moved to defining modules; no name or signature changed.
* test(auto-reply): remove stale session hint import
* feat(skills): repair used skills in turn
* fix(skills): bind repair to used skill receipt
* fix(skills): preserve explicit repair review
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
* fix(terminal): always emit full intro art
Open-time request.cols is the pre-fit boot grid (the client resizes right
after open), so the 40-column gate suppressed the art on real terminals.
Live-verified against a dev gateway on post-merge main.
* test(terminal): align intro banner fixture
Track apply-patch targets through the shared patch grammar so successful per-file recovery clears stale failure warnings while incomplete recovery remains visible.
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Teach the semantic reviewer to improve skills the agent actually used, keep review input provider-bound, and preserve bounded deterministic retries.
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
* fix(workers): persist placement terminal failures
* fix(workers): refresh placement protocol clients
* refactor(workers): isolate error formatting
* fix: integrate cloud terminal state with current main
* chore(plugin-sdk): refresh API baseline
* refactor(ui): inline one-use cloud terminal-reason banner helper
Keeps the Control UI startup JS bundle inside its 317 KiB gzip budget
(the helper + type-only import tipped it by 16 bytes).
* refactor(ui): trim terminal-reason lookup to type-erased optional access
Recovers the last gzip byte of the Control UI startup budget
(324609 B vs the 324608 B limit).