Commit Graph

77837 Commits

Author SHA1 Message Date
Shakker 6eded1bbce fix: prevent closed pane attachment restaging 2026-08-10 16:10:18 +02:00
Shakker fb9b1aba9e fix: retain replacement attachment payload ownership 2026-08-10 16:10:18 +02:00
Shakker 607f50bece fix: preserve fallback attachment packages across remounts 2026-08-10 16:10:18 +02:00
Shakker 33bee61f2c test: cover ownerless staged attachment cleanup 2026-08-10 16:10:18 +02:00
Shakker c5a5ba2263 fix: preserve staged attachments across chat remounts 2026-08-10 16:10:18 +02:00
Peter Steinberger f4bac99a81 feat(secrets): add SQLite-backed secret store (#121559) 2026-08-10 07:08:40 -07:00
zengLingbiao b121219a44 fix(gateway): preserve sandbox HEAD response metadata (#118553)
Punchcard-Session: coral-summit-orchard-93
2026-08-10 21:54:57 +08:00
Peter Steinberger 3b3c540896 refactor: remove dead branches and test-only helpers (#121345)
* refactor: remove dead branches and test-only helpers

* fix: preserve codex cleanup error causes

* fix: preserve gateway error code compatibility

* chore: update plugin sdk api baseline

* docs: fix live cache runner path
2026-08-10 06:47:43 -07:00
Peter Steinberger 14f8ed121e test(onboard): remove redundant inference test bridge (#121574) 2026-08-10 06:43:25 -07:00
Peter Steinberger 8d810d188b refactor: split ClawHub infrastructure by responsibility (#121565)
* refactor(infra): split clawhub into concept modules

* refactor(plugins): move compat predicates to their owners

* chore(lint): ratchet baselines after clawhub split
2026-08-10 06:42:37 -07:00
Shakker 5c308e0eba fix: release wizard admission before terminal response 2026-08-10 14:22:44 +01:00
Peter Steinberger f286928210 refactor(agents): type the reply failover seam and carry structured attempts (#121551)
* refactor(agents): carry structured fallback attempts

* refactor(agents): preserve typed failover delivery metadata

* refactor(auto-reply): consume canonical failover classification

* fix(auto-reply): preserve typed failure copy

* fix(auto-reply): keep failover facets internal

* fix(agents): remove stale failover exports

* chore(plugin-sdk): refresh API baseline

* fix(delivery): repair queue and pending-final settlement

* fix(lint): keep delivery queue within line budget

* fix(ci): refresh baselines after main rebase

* test(outbound): assert ambiguous send payload directly

* refactor(reply): follow upstream custody revert
2026-08-10 06:16:46 -07:00
Ayaan Zaidi 342a1e70a0 fix(agents): surface Claude CLI no-response failures (#121589)
Classify Claude's exact synthetic empty terminal at the shared CLI parser so directed turns fail visibly instead of becoming NO_REPLY. Ambient group silence and bounded replay-safe recovery remain unchanged.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Co-authored-by: Lu Wang <7668944+wangwllu@users.noreply.github.com>
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
2026-08-10 18:35:33 +05:30
Peter Steinberger 0d4e9f3ede fix(codex): report harness context window; compact context popover (#121491)
* fix(codex): report harness context window as session contextTokens

Codex app-server reports model_context_window per turn. Carry it through the projector into the run result meta so session rows show the real window instead of the catalog's standard-tier input cap (272k vs 1M for gpt-5.6 models).

* improve(ui): compact chat context popover

Inline stat rows replace boxed tiles; zero-value cost rows and the whole cost section when empty are omitted; provider/model provenance lines are removed because the footer already shows the model; and the popover is narrowed to 300px.

* refactor(codex): split attempt-result assembly out of event projector

* fix(codex): seed attempt context window from startup binding

App-server v2 turn/started omits the core model_context_window, so thread/tokenUsage/updated is the only live carrier. Seed usage-less attempts from the retained startup binding rollout/session window so session metadata cannot regress to the catalog fallback.

* fix(codex): prefer native startup context window

Persisted session contextTokens has no source provenance and may contain the catalog fallback. Keep the minimum window for the conservative rotation fuse, but seed the projector from the native rollout when it is available.

* chore(plugin-sdk): regenerate api baseline (new format)

* revert(gateway): "prevent restart replay after final delivery" (broke 5 CI jobs)
2026-08-10 05:52:19 -07:00
Glucksberg cd7b7f639d fix(agent): allow progress before final message-tool replies
Treat message(final=false) as progress and final=true or omission as the terminal source reply. Repeated terminal delivery now returns a non-error outcome without another provider send.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Co-authored-by: 宇宙熊Yzx <53250620+849261680@users.noreply.github.com>
Co-authored-by: Markus <markuscontasul@gmail.com>
2026-08-10 17:52:59 +05:30
Peter Steinberger 4f046b5dc6 docs(web): document the sidebar unsent-draft pencil indicator 2026-08-10 04:56:43 -07:00
Peter Steinberger 6b565c047f feat(ui): show unsent-draft pencil on sidebar session rows (#121476)
* feat(ui): show unsent-draft pencil on sidebar session rows

Typed-but-unsent composer text now surfaces as a pencil badge on the
owning session's sidebar row (and Home row) once you switch away.
Draft persistence now notifies stored-outbox subscribers so the
indicator appears and clears live. The active session suppresses the
badge since its composer is already visible.

* chore: refresh merge ref for CI against current main

* chore: refresh merge ref against healed main

* fix(ui): notify draft indicator only on presence transitions

Unconditional notify on every draft persist let outbox-projection
subscribers re-persist a stale pane over a newer draft (chat-state
route-fallback invariant). The sidebar pencil only consumes presence,
so notify on empty/non-empty transitions only.
2026-08-10 04:53:15 -07:00
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
Jesse Merhi e97c3450a2 fix(ui): preserve negotiated paired cancel 2026-08-10 20:15:29 +10:00
Jesse Merhi 66a44643d4 test(ui): follow browser cursor policy 2026-08-10 20:15:29 +10:00
Jesse Merhi 29827ea0ce fix(ui): preserve disabled cancel hover 2026-08-10 20:15:29 +10:00
Jesse Merhi cf1ac91609 test(ui): assert structured receipt count 2026-08-10 20:15:29 +10:00
Jesse Merhi ce852958bd test(ui): cover mounted and receipt wizard submissions 2026-08-10 20:15:29 +10:00
Jesse Merhi 402305f003 fix(ui): align wizard control states 2026-08-10 20:15:29 +10:00
Jesse Merhi 66196b7bf7 Control UI: pair wizard cancel and primary actions 2026-08-10 20:15:29 +10:00
Jesse Merhi 767bbb49d7 Control UI: preserve disabled wizard hover states 2026-08-10 20:15:29 +10:00
Jesse Merhi 84ad551e27 Control UI: size wizard actions for touch 2026-08-10 20:15:29 +10:00
Jesse Merhi 0368d89ebd Control UI: clarify wizard interactions 2026-08-10 20:15:29 +10: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 c3775a8f21 test(ui): stabilize checkbox alignment proof
Poll both fixed-width selection rails together and compare their trailing edges so the browser assertion measures settled popover geometry instead of sampling different points in the open animation.
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
Peter Steinberger c68606b812 fix(ui): align automation session checkmark
Keep Web Awesome checkbox semantics while rendering the selection state in the sidebar filter shared trailing rail. Add mocked-browser coverage for the hidden native mark and one-pixel alignment invariant.

Co-authored-by: Vyctor H. Brzezowski <krzyszchweski@gmail.com>
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 260628f4fa perf(ui): keep cancel capability within startup budget 2026-08-10 20:01:24 +10:00
jesse-merhi 2300de7162 Gateway: negotiate Custodian wizard cancellation 2026-08-10 20:01:24 +10:00