Commit Graph

78555 Commits

Author SHA1 Message Date
Peter Steinberger e6b356f35a fix(tasks): stream Codex subagent activity (#121899)
* fix(tasks): stream Codex subagent activity

* fix(tasks): honor registry access boundary
2026-08-11 00:32:08 -07:00
Peter Steinberger 2b8dbc3a7b refactor(agents): split message-tool into concept modules (#121901)
* refactor(agents): split message-tool into concept modules

* fix(agents): restore message-tool split imports

* ci: preserve message-tool CodeQL boundary
2026-08-11 00:31:14 -07:00
Ayaan Zaidi 77fc82c9d3 test(feishu): opt into raw commandText in raw-detail card test
The raw-command-detail streaming card test shipped in #121826 asserting
raw exec text under the default commandText mode, but the same commit
made "status" (tool label only) the documented default with raw as an
explicit opt-in. The test has failed since introduction; change-classified
CI never selected the feishu lane on main pushes. Opt the test into
streaming.progress.commandText: "raw" so it proves the documented path.
2026-08-11 09:30:23 +02:00
Peter Steinberger 46bdbe585f fix(openai): restore Sol thinking levels (#121865)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 00:28:21 -07:00
Peter Steinberger 7d647f6810 fix(macos): stop profile onboarding from promising refused attachment (#121614)
* fix(macos): align profile gateway onboarding ownership

Stop onboarding from advertising foreign profile listeners as attachable. Reuse the GatewayProcessManager PID ownership rule and preserve existing non-profile listener wording.

* chore(macos): refresh onboarding i18n inventory
2026-08-11 00:26:46 -07:00
Peter Steinberger d54d0b4a80 refactor(agents): simplify embedded subscription and block state (#121896)
* refactor(agents): remove subscription params identity seam

* refactor(agents): remove dead attempt fallback flag

* refactor(agents): inline attempt fast mode type

* refactor(agents): derive before-agent block state from owner

* refactor(agents): localize finalize revision cap

* fix(agents): preserve public harness attempt contract
2026-08-11 00:22:00 -07:00
Peter Steinberger ea06d72e85 feat(secrets): manage team secrets in Control UI (#121724)
* feat(secrets): add gateway store settings

* perf(control-ui): trim secrets startup copy

* perf(control-ui): reduce secrets startup payload

* fix(secrets): harden store mutation refresh

* perf(control-ui): meet secrets startup budget

* test(control-ui): update secrets navigation copy

* fix(ui): pluralize secret-detection count and drop duplicated dialog hint

* chore(protocol): regenerate gateway clients and SDK baseline after rebase

* fix(gateway): merge secrets store methods after project RPCs in advertised order

* chore: leave changelog to release generation

* test(gateway): retain desktop launch train coverage
2026-08-11 07:20:38 +00:00
Peter Steinberger 8e54d696eb fix(ui): prevent duplicated worktree base branches (#121649)
* fix(ui): keep loaded worktree branch stable

* test(ui): stabilize model setup picker transitions
2026-08-11 00:14:30 -07:00
Peter Steinberger fa03d9b913 refactor: consolidate coercion helpers (#121366)
* refactor: consolidate coercion helpers

* fix: remove duplicate coercion imports

* fix: preserve serialized coercion guard

* chore: ratchet coercion helper carve-outs

* fix(test): keep gauntlet subprocess startup lean

* fix: preserve imported session timestamp semantics

* fix: preserve catalog timestamp string semantics

* chore: align plugin SDK surface ratchet

* fix: preserve trajectory and SDK string contracts

* fix(test): preserve QA record assertion semantics

* fix: complete standalone record guard rename

* refactor(cron): use canonical string coercion

* fix(acpx): preserve Pi timestamp parsing

* test(channels): adapt custody test harnesses

* test(telegram): classify media harness as test support

* test(acpx): split timestamp contract coverage

* test(channels): support generated custody contracts

* chore: ban the full coercion helper name set

Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.

* fix(scripts): repair release-validation guard drift and lint cause

Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).

* fix: preserve Claude timestamp string semantics

* fix: preserve persisted timestamp string semantics

* fix: preserve date-first timestamp contracts

* fix(openai): harden delegation failure formatting

* chore: close coercion helper guard gaps

* test(openai): model non-error delegation rejection

* chore: refresh plugin SDK API contract

* fix(tasks): use canonical string field reader

* fix(ai): use canonical provider error field coercion

* fix(browser): migrate native bootstrap coercion

* docs(plugin-sdk): clarify text record export compatibility

* fix(gateway): normalize approval execution identity

* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00
Peter Steinberger f788af0238 docs(memory): explain automatic QMD migration (#121911) 2026-08-10 23:57:34 -07:00
Josh Lehman 2ae316e2f3 fix(ui): session titles flicker during archive transitions (#121868)
* fix(ui): preserve session titles through archive transitions

* oc-ba3: fix archive title CI regressions
2026-08-10 23:48:02 -07:00
Peter Steinberger c8571daa2f fix(scripts): tolerate restricted PR metadata tokens (#121848)
Amp-Thread-ID: https://ampcode.com/threads/T-019feaaa-c7ed-769e-9f29-a3612bec72e7

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 23:30:59 -07:00
Peter Steinberger 9df9cc2228 test(llama-cpp): remove duplicate progress bridge (#121886) 2026-08-10 23:25:51 -07:00
Peter Steinberger d6a4cdad68 test(core): remove orphan internal test aliases (#121879) 2026-08-10 23:23:48 -07:00
Vyctor H. Brzezowski 588427357b fix(ui): add spaces between compact duration units (#121857)
* fix(ui): separate compact duration units

* fix(ui): make compact durations consistently spaced
2026-08-11 03:17:07 -03:00
Peter Steinberger 9acc3beff6 test(scripts): prebundle Crabbox wrapper tests (#121891)
Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 23:16:26 -07:00
Peter Steinberger 5f562e65f6 refactor: burn down export name collision baseline (#121870)
* refactor(sessions): distinguish persistence owners

* refactor(config): consolidate legacy record helper

* refactor(sessions): name sqlite number coercion

* chore(scripts): ratchet export collision baseline
2026-08-10 23:10:44 -07:00
Peter Steinberger e7350b4ac6 refactor(agents): consolidate CLI usage normalization (#121873) 2026-08-10 23:07:53 -07:00
Peter Steinberger f95fe8fb5d test(agents): slim ACP spawn suite dependencies (#121885)
Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 23:04:23 -07:00
Peter Steinberger e3f477454a refactor(outbound): consolidate message action test fixtures (#121882)
* test(outbound): consolidate message action fixtures

* test(outbound): keep message fixtures cycle-free
2026-08-10 23:02:16 -07:00
Vincent Koc 65d13cb80b fix(ci): retry fresh artifact metadata reads (#121876) 2026-08-11 14:01:31 +08:00
Peter Steinberger 432356a684 refactor(gateway): migrate internal agent turn callers to the typed facade (#121715)
* refactor(gateway): migrate internal agent turn callers

* test(gateway): mock typed subagent turn facade

* fix(gateway): preserve typed turn authorization

* chore(plugin-sdk): refresh typed facade closure hashes

* fix(gateway): validate typed agent turn requests

* fix(gateway): preserve typed turn lifecycle parity
2026-08-10 22:59:28 -07:00
Peter Steinberger 1220a7609a refactor: consolidate promise-like guards (#121861)
* feat(normalization-core): add promise-like guard

* refactor: consolidate promise-like guards

* fix(normalization-core): keep isPromiseLike non-throwing on hostile then getters

ClawSweeper finding on #121861: the diagnostics-path local guard caught throwing
then getters; the canonical guard must classify, never throw.

* test(normalization-core): annotate intentional hostile-thenable fixture
2026-08-10 22:50:48 -07:00
Peter Steinberger 069f6e1c34 test(plugins): reuse Vitest for doctor contracts (#121878)
Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 22:49:40 -07:00
Peter Steinberger eb28964522 test(plugins): remove provider family meta-test (#121875) 2026-08-10 22:46:34 -07:00
Vyctor H. Brzezowski 9178c476f6 improve(ui): stop marking pinned sidebar rows with a message bubble (#121719)
A pinned session led with a generic message-bubble glyph that no other
session row gets. renderSessionLeadingState fills each row's single
leading slot from a priority ladder, and the pinned branch outranked the
creator avatar chip, so a pinned row could never show who created it and
carried a glyph whose only claim was "this is a session".

Drop the pinned branch and its styling. Pinned rows already render
through the same renderSessionTree anatomy as the session list, so they
now fall through the same ladder as any other row: attention icon, owner
avatar, or nothing. The leading slot stays width-reserved, so titles do
not shift.
2026-08-11 02:44:39 -03:00
Peter Steinberger 17f1571556 improve(test): speed up session list performance proofs (#121853)
* test(gateway): trim ACP batch boundary proof

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): remove broad resolver warmup

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): account for default thinking resolution

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): isolate cache proof from runtime startup

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* Revert "test(gateway): isolate cache proof from runtime startup"

This reverts commit ee80381876.

Co-authored-by: Peter Steinberger <steipete@gmail.com>

* Revert "test(gateway): account for default thinking resolution"

This reverts commit 17ec9f8b10.

Co-authored-by: Peter Steinberger <steipete@gmail.com>

* Revert "test(gateway): remove broad resolver warmup"

This reverts commit 00aabcbf2e.

Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): isolate session cache proofs

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): stub unrelated harness policy

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): stub unrelated subagent snapshot

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): pin synthetic thinking defaults

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(gateway): complete cache proof fixture

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 05:29:52 +00:00
Peter Steinberger 36fbd869ed refactor(agents): eliminate export name collisions (#121768)
* refactor(auth): consolidate profile helper owners

* refactor(agents): consolidate subagent registry reads

* refactor(agents): disambiguate runtime placement helpers

* refactor(agents): disambiguate helper exports

* chore(scripts): burn export collision debt

* test(agents): follow moved subagent read owner
2026-08-10 22:24:33 -07:00
Peter Steinberger 03f9f29a86 refactor(agents): centralize exec process cancellation (#121854) 2026-08-10 22:15:31 -07:00
Vyctor H. Brzezowski 3dc03f9265 fix(ui): confirm destructive sidebar session actions in-app (#121286)
* fix(ui): confirm destructive sidebar session actions in-app

The sessions sidebar still gated batch delete, single delete, cloud-worker
stop, and preserved-worktree removal on native window.confirm. In an
embedded WebView without a dialog bridge that call resolves false, so each
action returned early with no request, no error, and no visible outcome.

PR #118250 introduced showConfirmDialog and converted the Sessions,
Worktrees, and Nodes pages but not the sidebar operations layer, leaving
one product action with two confirmation mechanisms. Route all four sites
through the same helper and let the already-present post-decision scope
guards do their job, extracting the cloud-worker reclaim guard above the
await so the modal never opens for a stop this surface never performs.

Closes #121275

* feat(ui): let operators opt out of the session delete confirm

Session deletes are the repeatable, per-row destructive action in the
sidebar, so their confirm now offers "Don't ask me again". Stopping a cloud
worker and removing a preserved worktree deliberately get no opt-out: the
first is a rare shared-resource action, the second destroys the only copy
of uncommitted work. The checkbox exists only for callers that pass a skip
preference, so the serious confirms stay unskippable by construction.

The preference is device-local in UiSettings rather than a synced ui.prefs
key, so opting out on one browser cannot lower the bar on the operator's
other devices. Appearance -> Sidebar carries the matching toggle with the
standard reset affordance, which is how asking gets turned back on.

* fix(ui): scope the delete opt-out copy and refresh its settings view

Autoreview surfaced two preference-consistency defects.

The setting copy promised a general "session or a selection" policy, but
only the sidebar honours it; the Sessions page delete paths still prompt.
Extending the preference there would cross into another owner's in-flight
surface, so narrow the copy to what actually ships and keep the extension
as the recorded follow-up.

Persisting the opt-out also wrote local storage without notifying the
appearance subscription, so a mounted Settings -> Appearance kept showing
the toggle enabled while deletes already skipped the prompt. Publish the
refresh through the scope's theme capability after persisting.

* fix(ui): space the confirm opt-out away from the message copy

The checkbox rendered flush under the message with no separation, so it
read as a third line of the paragraph rather than a distinct control, and
the group crowded the action row.

Give it the 12px separation the details block already uses in this card,
keeping the 16px action gap below, plus the 10px control gap and 16px box
the config-form checkboxes use so the box and label align. Verified in
light and dark at desktop and mobile widths.

* fix(ui): use the cursor-action token on the confirm opt-out

The spacing fix hardcoded cursor: pointer, which the Control UI cursor
policy forbids outside link rules; controls consume var(--cursor-action)
so the hand stays configurable from one place.

Caught by ui/src/styles/cursor-policy.node.test.ts. Token resolves to the
same hand, so the published dialog captures are unaffected.

* fix(ui): keep the delete opt-out to the surface its setting names

deleteSession is shared: the chat-pane header menu calls it too. The
skip preference was applied inside the operation, so opting out from the
sidebar also silenced future header confirmations while the setting text
promised it applied to sidebar deletes only.

Make the opt-out opt-in per caller with a default that keeps asking, and
let the sidebar be the one caller that offers it. The header and any
future caller now match the copy without having to remember anything.

* refactor(ui): split the session group catalog out of the operations runtime

Adding the in-app group confirm on main pushed
session-organizer-operations.runtime.ts past the 700-line ceiling once
this branch's session confirms landed beside it.

Move the catalog and section-order operations into their own module. They
write the group catalog directly and never touch session rows, so the
dependency runs one way and no import cycle appears. The shared access
gate moves to the batch-mutations sibling both now import, and the
runtime keeps re-exporting the catalog names the controller loads as one
namespace.
2026-08-11 02:15:05 -03:00
Peter Steinberger 79dcf48434 test(macos): remove stale Canvas helper probes (#121866) 2026-08-10 22:12:49 -07:00
Peter Steinberger 3b828df2d9 test(logging): trim recovery duplicate coverage (#121864) 2026-08-10 22:10:26 -07:00
Peter Steinberger 10d3466c98 test(ui): remove duplicate dark contrast case (#121862) 2026-08-10 22:08:06 -07:00
Peter Steinberger 90ddeb4b40 refactor(agents): absorb overflow, retry, and matcher duplicates into the failover substrate (#121817)
* refactor(ai): centralize context overflow matching

* refactor(agents): add retry evidence and guarded status facets

* refactor(agents): absorb assistant retry and key matchers

* chore(plugin-sdk): refresh failover closure hashes

* fix(agents): consume retry evidence at altitude zero

* test(agents): narrow retry corpus provider fixtures

* test(agents): keep retry corpus sorting immutable
2026-08-10 22:07:21 -07:00
Peter Steinberger aba8f10bc3 fix(agents): stop reporting undelivered subagent results as delivered (#121837)
* fix(agents): record intentional non-delivery truthfully

* fix(agents): stop reporting sinkless cron completions as delivered

The inactive-cron guard runs before requester-agent dispatch. Its regression now asserts the recorded intentional non-outcome before verifying that queue, gateway, and message sends remain untouched.

* test(agents): migrate announce outcome fixtures

* chore: drop changelog edit per repo policy
2026-08-10 22:04:29 -07:00
joshavant 8646c19a25 docs(agents): preserve execution identity audit invariants 2026-08-11 00:03:25 -05:00
Vyctor H. Brzezowski 9327c10d2b feat(ui): edit a queued chat message in place (#121692)
* feat(ui): edit a queued chat message in place

The pencil on a queued row, or a double-click, lifts the message and its
attachments into the composer. The row stays where it is, marked Editing,
so the position the corrected message will take is visible rather than
promised. The composer shows an edit banner with an X to cancel.

Cancelling touches storage not at all, because the row never left the
queue. Sending retires the original and hands its position to the
replacement, which lands in the same slot. While an edit is open the
drain refuses that row, so a reconnect cannot deliver the text the
operator is visibly rewriting; the queue behind it waits, which is the
same contract the held position promises.

* fix(ui): retire an edited queued row only with its replacement

The send retired the source row first and admitted the replacement second,
so a rejected store write left the operator with neither: the original gone,
the replacement never persisted, and the attachments it dropped already
released. Admission now carries the source id and swaps both rows in one
store write, so a rejected write changes nothing and the edit stays open on
the row that is still there, which is what cancelling already promises.
Filtering the source before the cap check also keeps a replacement
admissible on a full queue.

The edit token recorded only the session key, but an outbox is scoped by
session and agent, and a raw global session keeps its key while the selected
agent changes underneath it. The token now carries the agent that owned the
row and every reader validates the whole scope, so a send after a switch
cannot retire a row in the outbox it left behind.

* fix(ui): hold an edited queued row across every pane

Panes share one outbox and one drain lane while composer state stays per
pane, so the hold that keeps a row from being delivered while it is rewritten
was invisible to the pane that drained it: a session event in a second split
pane resumed every stored outbox, saw no edit, and sent the original text.
The hold is now read across every pane subscribed to the outbox, which keeps
one source of truth — each pane's own scope-validated edit — and needs no
lifecycle of its own, so closing a pane or switching agent releases it by
simply no longer being an active edit.

The payloads an edit owns now travel with its token. The write that admits
the replacement retires the source row and tells every pane synchronously, so
by the time the send released the images the replacement had dropped, the row
holding them was already gone and nothing was released. That leaked the
payload and its object URL for the rest of the browser session.

* fix(ui): release attachments from cancelled queue edits
2026-08-11 01:59:56 -03:00
Peter Steinberger e4a6ded2d3 fix(release): scope iOS version checks to native releases (#121863) 2026-08-10 21:57:02 -07:00
Ayaan Zaidi 45ec5f4662 feat(ui): hide system-created probe sessions from the sessions sidebar (#121855)
Machine-created probe/run sessions (health checks, internal effect sessions) previously surfaced in the Control UI sessions sidebar as raw first-message rows and buried real conversations. Classify them from recorded creation provenance only (system actor, or unnamed run/internal creation without a human actor) and hide them by default behind a persisted "Show system sessions" toggle, mirroring the automation-sessions toggle. Cron rows stay owned by the automation toggle; the selected session, the Sessions page, and the toggle keep hidden rows reachable. Legacy rows without provenance stay visible.

Closes #121851

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 04:53:15 +00:00
Vyctor H. Brzezowski 09c7cd98d9 fix(ui): align agent switcher rows on one leading column (#121705)
* fix(ui): align sidebar menu rows on one leading column

The sidebar dropdown family never received the Web Awesome shadow-row
corrections that .session-menu__item already documents, so the agent
switcher stacked our 8px flex gap on top of Web Awesome's forced
`margin-inline-end: 0.75em` slotted-icon margin, kept a layout-only
native checkmark it never shows, and mixed a 24px avatar column with a
16px icon column. Agent rows started their labels 19px right of the
command rows and their avatars 11px right of the command glyphs.

Give the family one leading column: drop the stacked gap, hide the
agent menu's unused native checkmark (selection lives in the trailing
details rail), widen command glyph boxes to the avatar's 24px, and pull
the section label, provenance note, and empty state onto the rows' 8px
inline edge. Command-row label positions are unchanged; the avatar rows
and the More menu's route rows move onto the shared gutter.

* test(ui): assert the sidebar menu's shared leading column

The alignment fix had no committed regression: the existing agent-menu
E2E opens and navigates the menu but never reads its geometry, so the
19px label drift could return silently.

Assert in the browser that an avatar row and a command row start their
leading slot and their label on the same x. Fails on pre-fix code, where
the avatar column sits 11px right of the command glyphs.
2026-08-11 01:50:55 -03:00
Peter Steinberger 4b46a14a54 feat(apple): show live subagent activity in chat (#121815)
* feat(apple): show live subagent activity in chat

* chore(apple): refresh native localization inventory
2026-08-10 21:50:13 -07:00
Vyctor H. Brzezowski d7ea18e600 feat(ui): give pinned sessions their own sidebar group (#121712)
Pinned sessions shared the Pages navigation group's container and head,
so a pinned chat rendered as one more nav row directly under Automations
or Plugins with nothing separating elevated content from navigation.

Split the sidebar zone at render time: navigation entries stay in the
Pages list, session entries move into a second group with the sidebar's
inter-group spacing and a muted "Pinned" section label matching the
PAGES/SESSIONS treatment. Both groups keep the zone drop handlers, so
dragging a session into either one still pins it and records its slot,
and the group disappears entirely when nothing is pinned.
2026-08-11 01:49:03 -03:00
Peter Steinberger c5b7b8e33c fix(system-agent): setup chat fails silently on dev-roster gateways (#121784)
* fix(system-agent): repair setup-chat execution identity, harness fallback, and error surfacing

Always inject the reserved "openclaw" execution entry for off-roster system-agent runs.
Keep implicit harness runtime selection implicit so Codex refusal falls back to the OpenClaw harness, while explicit policy remains fail-closed.
Log openclaw.chat turn failures and surface their underlying causes in the UNAVAILABLE response.

* chore(plugin-sdk): refresh agent harness API baseline

* test(system-agent): align fixtures with optional harness routes

* fix(system-agent): keep execution roster out of TUI catalog lookup

* refactor(system-agent): keep verified state types internal

* fix(system-agent): separate setup policy and execution config
2026-08-10 21:44:00 -07:00
Peter Steinberger c896b9b2cd test(ui): remove duplicate update confirmation cases (#121836) 2026-08-10 21:40:03 -07:00
Peter Steinberger 98b222ded8 feat(scripts): report aliasing re-exports (#121849) 2026-08-10 21:36:22 -07:00
Peter Steinberger df3e111c91 fix(ci): run policy tests for watched source changes (#121841)
* fix(ci): route source policy tests by watched paths

* chore(ci): keep policy watch table module-private
2026-08-10 21:30:21 -07:00
Peter Steinberger ee7fae8a90 fix(ui): native command settings no longer require Raw mode (#121832)
* fix(ui): render native command settings controls

Render boolean-or-auto command settings as safe On/Off/Auto controls instead of forcing Raw mode, while preserving typed config values and fail-closed handling for unsafe unions.

* fix(ui): preserve oneOf union exclusivity
2026-08-10 21:28:06 -07:00
Peter Steinberger 19ed7feee1 test(ci): rebalance compact Node shards (#121834)
* test(ci): rebalance compact node shards

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(ci): guard compact planner coverage

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(ci): drop obsolete shard isolation check

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(ci): stop freezing compact shard placement

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 04:18:34 +00:00
Josh Avant 73a9eed95b refactor(audit): add canonical admitted-run context (#120534)
* feat(audit): carry canonical admitted execution context

* fix(agents): preserve admitted context across retries

* fix(worker): fence legacy launch dialect

* test(gateway): track approval temp dirs

* fix(plugin-sdk): preserve harness attempt compatibility

* fix: close delegated run authority at owner boundaries

* fix: internalize delegated authority validators

* refactor: split delegated authority proof surfaces

* refactor: centralize command admission identity

* test: claim runtime tool authority

* fix(gateway): keep lifecycle cleanup within static budgets

* fix(agents): revalidate harness policy authority

* fix(agents): fence awaited approval capability results

* test(copilot): supply required harness capability fixtures

* fix(agent): preserve scoped embedded run admission

* fix(agent): preserve keyless and worker authority

* test(agent): bind incomplete-turn authority

* docs: preserve execution authority invariants

* chore(plugin-sdk): regenerate API baseline

* fix(gateway): notify pending claim closure

* fix(gateway): revalidate delegated tool authority

* fix(plugin-sdk): keep source guard internal

* fix: close delegated authority races

* fix: revalidate delegated side effects

* fix: close harness authority projection gaps

* fix: align authority integration types

* fix: isolate settled harness finalization

* fix: fence recovery identity finalization

* fix: preserve committed session worktrees

* fix: preserve worker placement agent identity

* fix: fence active harness tool work

* fix(plugins): restore embedded run admission owner

* chore(plugin-sdk): compose integrated surface budgets

* fix(copilot): keep finalization attempt type internal

* fix(plugins): complete admission owner type imports

* test(harness): use settled finalization attempt shape

* fix(security): retain exact side-run and approval authority

* fix(security): preserve protected authority through terminal sweep

* fix(agents): follow moved recovery store owner

* fix(ci): align integrated authority owners with gates

* fix(plugins): distinguish embedded agent adapter export

* chore(plugin-sdk): regenerate API baseline after rolling integration

* refactor(gateway): keep session authority within owner budgets

* fix(gateway): keep session helpers private

* docs(plugin-sdk): name the V2 parameter subpath

* chore(integration): reconcile worker and SDK surfaces

* docs(plugin-sdk): require the V2 host API floor

* chore(plugin-sdk): regenerate after proxy-auth integration
2026-08-10 23:15:20 -05:00
Vincent Koc 6dbea69515 fix(ci): separate frozen target context from candidate identity (#121835) 2026-08-11 12:14:19 +08:00