Commit Graph

42867 Commits

Author SHA1 Message Date
Peter Steinberger 60e1f40562 refactor: replace exec approvals lease with journal CAS (#121273)
* refactor: replace exec approvals lease with journal CAS

* style: format Swift exec approvals loop

* test: mutate journaled agent in native fence coverage

* fix: normalize native exec approval fence IDs

* fix: remove exec approval aliases on agent deletion
2026-08-10 04:47:33 -07:00
Peter Steinberger c3f4d5ee60 fix(codex): deliver task-suggestion tools to Codex-harness runs with calibrated guidance (#121568)
- 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.
2026-08-10 04:26:55 -07:00
Peter Steinberger 572fab0b5b fix(auto-reply): handle uppercase file URLs when staging media (#121521) 2026-08-10 04:26:32 -07:00
Peter Steinberger 46e941c303 test(gateway): verify identity scopes reach fs handlers (#121466) 2026-08-10 04:14:13 -07:00
Ayaan Zaidi 1f75018600 fix(gateway): prevent restart replay after final delivery
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>
2026-08-10 16:42:14 +05:30
Peter Steinberger 1569400ea7 test(plugin-sdk): remove stale agent-core source mirror (#121556) 2026-08-10 04:04:48 -07:00
Peter Steinberger e37614c83f refactor(plugin-sdk): replace hash manifest with JSONL contract (#121473)
* refactor(plugin-sdk): use JSONL API baseline contract

* chore(plugin-sdk): add generated JSONL API baseline
2026-08-10 03:49:17 -07:00
Peter Steinberger 0a6a1d9419 fix(gateway): unify media privacy in chat history (#121490)
* 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
2026-08-10 03:30:44 -07:00
Peter Steinberger a4eabd5744 fix(agents): settle exec preparation failures (#121148) 2026-08-10 03:28:32 -07:00
Peter Steinberger d847a62e5d fix(opencode): keep API-key onboarding routes usable (#121414)
* fix(opencode): keep API-key onboarding routes usable

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94f-6aac-73c9-995b-ced5336f3230

* refactor(opencode): simplify onboarding compatibility

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94f-6aac-73c9-995b-ced5336f3230

* fix(opencode): avoid unverified onboarding fallbacks

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94f-6aac-73c9-995b-ced5336f3230

* fix(opencode): reconcile dynamic tool deltas

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94f-6aac-73c9-995b-ced5336f3230

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 03:23:36 -07:00
Peter Steinberger 8e1c238c1c fix(cron): prevent invalid timestamps from stranding jobs (#121394)
* fix(cron): harden scheduling timestamp boundaries

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* test(prompts): refresh cron tool snapshots

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* test(cron): keep config revision fixture Date-valid

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* refactor(cron): consolidate scheduling lifecycle

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* refactor(cron): keep task history dependencies acyclic

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* fix(cron): canonicalize timestamp auto-disable

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* test(cron): verify startup overflow notifications

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

* chore(ci): repair main baseline gates

Amp-Thread-ID: https://ampcode.com/threads/T-019fe949-92e4-76bd-8cfa-aea44fcfaebe

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 03:20:23 -07:00
Peter Steinberger c6edd3e80f feat(gateway): grant scopes by verified identity (#121531)
* feat(gateway): grant scopes by verified identity

* chore(plugin-sdk): refresh API baseline

* test(agents): isolate transcript repair mocks
2026-08-10 03:19:45 -07:00
Peter Steinberger 719af0ccd6 fix(state): recheck ownership after WAL transition
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.
2026-08-10 03:08:24 -07:00
Peter Steinberger 9185e53da1 refactor(state): simplify ownership WAL retry
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.
2026-08-10 03:08:24 -07:00
Peter Steinberger 020ba72f8d fix(state): close ownership WAL transition race
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.
2026-08-10 03:08:24 -07:00
Peter Steinberger 7c8192bc03 fix(state): preserve rollback journal recovery
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.
2026-08-10 03:08:24 -07:00
Peter Steinberger 1e95c471a0 fix(state): read live WAL ownership safely
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.
2026-08-10 03:08:24 -07:00
Alex Knight c740885ad1 fix: exec approvals fail with a pairing prompt when the device pairing lacks operator.approvals (#121529)
* 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.
2026-08-10 20:04:55 +10:00
Peter Steinberger 8395145ef0 test: remove duplicate re-export coverage (#121547) 2026-08-10 03:03:36 -07:00
jesse-merhi 2300de7162 Gateway: negotiate Custodian wizard cancellation 2026-08-10 20:01:24 +10:00
Jesse Merhi ae16f6ba87 Gateway: align cancellation ownership mock 2026-08-10 20:01:24 +10:00
Jesse Merhi d9d0b30ce3 System agent: keep wizard cancel local 2026-08-10 20:01:24 +10:00
Jesse Merhi 890a4b0089 Control UI: add direct Custodian wizard cancel 2026-08-10 20:01:24 +10:00
Peter Steinberger ca4dc1bc9e fix(cloud-workers): preserve reclaim teardown failures (#121520)
* fix(cloud-workers): preserve reclaim teardown failures

* fix(test): remove unused session hint import
2026-08-10 03:00:27 -07:00
Peter Steinberger fe9bd7583e fix(models): migrate catalog credentials into SQLite (#87166)
* fix(models): migrate catalog credentials into SQLite

* refactor(models): share catalog JSON parser
2026-08-10 02:47:51 -07:00
Peter Steinberger 890a5e895b fix: onboarding stalls or loses progress during interrupted setup (#121415)
* fix: harden onboarding recovery flows

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94a-32da-757b-bff1-caefb6302cd1

* refactor: consolidate onboarding state lifecycles

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94a-32da-757b-bff1-caefb6302cd1

* test: model canonical onboarding config writes

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94a-32da-757b-bff1-caefb6302cd1

* fix: compose onboarding locks across gateway surfaces

Amp-Thread-ID: https://ampcode.com/threads/T-019fe94a-32da-757b-bff1-caefb6302cd1

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 02:45:14 -07:00
Peter Steinberger b85f421278 refactor: avoid gateway loopback for session tools (#121474)
* refactor(agents): avoid loopback gateway calls

Amp-Thread-ID: https://ampcode.com/threads/T-019fe991-c41e-736c-89e4-479bb4974faa

* fix(gateway): preserve request timeout errors

Amp-Thread-ID: https://ampcode.com/threads/T-019fe991-c41e-736c-89e4-479bb4974faa

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 02:44:01 -07:00
Peter Steinberger bab4546b41 refactor(gateway): remove dead rpc surfaces (#121387) 2026-08-10 02:41:57 -07:00
Peter Steinberger 815494955d feat: stream live edit diff progress (#121528)
* feat(agents): stream live edit diff progress

* fix(agents): keep live diff state internal

* fix(lint): remove unused import breaking main lint

* perf(agents): throttle live diff parsing
2026-08-10 02:38:25 -07:00
Peter Steinberger b54fafa272 fix(codex): preserve operator input request ownership (#121171) 2026-08-10 02:32:13 -07:00
Peter Steinberger 72c4f26a4e refactor(sessions): collapse session accessor aliases (#121516)
* 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
2026-08-10 02:20:18 -07:00
Ayaan Zaidi 2d627a0c25 feat(skills): repair used skills in turn (#121522)
* 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>
2026-08-10 14:42:41 +05:30
Peter Steinberger 83dfd44eca fix(terminal): always emit full intro art (#121501)
* 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
2026-08-10 01:30:37 -07:00
Ayaan Zaidi 2642d79000 fix(agents): suppress recovered patch warnings
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>
2026-08-10 13:59:49 +05:30
Peter Steinberger 51a78b2924 fix(update): keep countdown stable during active work (#121504) 2026-08-10 01:29:41 -07:00
Peter Lee 816d787413 fix(models): normalize partial cost in generated plugin catalogs to prevent schema validation warnings (#116317)
* fix(models): normalize partial cost in generated plugin catalogs to prevent schema validation warnings

* fix(models): handle no-cost overlays and fix test types for catalog cost normalization

* fix(models): preserve tieredPricing when completing catalog costs and remove duplicate Anthropic branches

* fix(models): normalize model costs after duplicate merge

* fix(models): normalize catalog costs at publication

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-10 16:26:38 +08:00
Peter Lee f8cfd54f41 fix(infra): heartbeat runs honor timeoutSeconds 0 as unlimited (#119297)
* fix(infra): preserve timeoutSeconds 0 as unlimited for heartbeat runs

* test(infra): consolidate heartbeat timeout coverage

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-10 16:21:14 +08:00
Ayaan Zaidi 7d4d02fff0 feat(skills): improve used skills autonomously
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>
2026-08-10 13:50:33 +05:30
Peter Lee 780e3b0ef1 fix(gateway): reject invalid session history cursor with 400 (#119443)
* fix(gateway): reject invalid session history cursor with 400

* fix(gateway): export resolveCursorSeq and resolveSessionHistoryTailReadOptions from revocation-test mock

* fix(gateway): reject blank session history cursors

* fix(gateway): preserve blank cursor compatibility

* test(gateway): fit cursor case title formatting

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-10 16:20:08 +08:00
Ayaan Zaidi 223015ba07 fix(models): probe Codex-pinned providers through OpenClaw
* fix(models): probe Codex-pinned providers through OpenClaw

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-10 13:49:37 +05:30
Peter Lee f50260764a fix(gateway): MCP App standalone UI hangs when sandbox fetch never resolves (#119276)
* fix(gateway): add timeout to MCP App standalone fetch calls

* fix(gateway): honor configured MCP request deadline in standalone app operations

* fix(gateway): preserve MCP request timeout across catalog invalidation and add gateway grace

- Snapshot requestTimeoutMs onto McpAppViewLease at view creation so the
  configured deadline survives catalog invalidation (e.g. tools/list_changed).
- Add bounded gateway grace to the browser-side operation fetch signal so the
  outer timer expires after the runtime MCP deadline, avoiding false failures
  for valid near-deadline operations.
- The initial view load remains bounded at 30s.

* fix(gateway): read MCP App view deadline from runtime session, not invalidatable catalog

* fix(gateway): pass initial-load timeout through serialized MCP App host config

* fix(gateway): clamp MCP App browser operation timeout to timer-safe maximum

* fix(gateway): preserve native MCP App request budgets by omitting browser timeout when runtime has no deadline contract

* fix(gateway): own MCP app deadlines at the view boundary

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-10 16:19:23 +08:00
Peter Lee 9aebf14695 test(providers): cover clone-tee binary rejection cleanup (#119457) 2026-08-10 16:18:38 +08:00
Ayaan Zaidi 4b0151682e refactor(commitments): remove inferred follow-up subsystem
Remove hidden follow-up extraction, heartbeat delivery, CLI, docs, and supporting tests/tooling. Existing commitment records remain inert pending separately approved cleanup.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-10 13:48:32 +05:30
Peter Steinberger bcf342903f refactor: finish export shadow hazard renames (#121471)
* refactor(gateway): distinguish pending node handlers

* refactor(approvals): distinguish button presentation builder

* refactor(daemon): distinguish service home resolver
2026-08-10 01:01:20 -07:00
Peter Steinberger 5b478bb64f fix(windows): shorten home paths case-insensitively (#121455) 2026-08-10 00:59:32 -07:00
Peter Steinberger 7954dde7cc fix(cloud-workers): support large Git workspaces (#121262)
* fix(cloud-workers): support large git workspaces

* test(cloud-workers): track workspace temp dirs

* refactor(cloud-workers): keep inventory helpers internal
2026-08-10 00:56:48 -07:00
Peter Steinberger da2684b890 fix: serialize onboarding and plugin installation (#121482)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 00:49:25 -07:00
Peter Steinberger f6298bf84d fix(workers): preserve disappeared-worker failures across restarts (#121122)
* 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).
2026-08-10 00:36:52 -07:00
Peter Steinberger a7d61fc114 fix(ui): remote sessions show pasted titles and final replies (#121467)
* fix(ui): refresh remote session titles and final replies

* test(ui): split sidebar presentation e2e coverage
2026-08-10 00:13:55 -07:00
Sarah Fortune a968d15f63 feat(slack): enable Enterprise Grid identity, DMs, routing, actions, approvals, and presence (#121373)
* refactor(slack): detect Enterprise Grid installs at runtime

* fix(slack): preserve enterprise bot identity

* style(slack): format enterprise identity test

* fix(slack): scope enterprise config by workspace

* fix(slack): preserve qualified binding casing

* feat(slack): enable enterprise presence polling

* fix(slack): normalize enterprise binding accounts

* fix(slack): require workspace-scoped Grid targets

* docs(slack): document Enterprise policy target forms

* fix(slack): preserve Grid pairing workspace scope

* refactor(slack): simplify scoped target formatting

* fix(slack): repair Enterprise Grid CI checks

* chore: refresh generated Slack metadata

* refactor(slack): simplify optional workspace scope

* test(slack): infer installation state handle types

* chore: resolve plugin SDK baseline conflict

* fix(ci): regenerate plugin SDK API baseline on Linux

* fix(slack): allow standalone workspace sends

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-10 07:10:06 +00:00