Commit Graph

80496 Commits

Author SHA1 Message Date
Dallin Romney c06f2e24d9 chore(apps): refresh native locale artifacts (#125608) 2026-08-18 07:05:02 -07:00
Dallin Romney 33a8645dcf fix(ci): resolve performance targets from checkout (#125575) 2026-08-18 07:03:16 -07:00
Peter Steinberger 7f0a87de1d feat(agents): eager delegation default in the main session + coalesced session-state wakes (#125691)
* feat(agents): default to eager delegation in the main session

The delegation prompt section now defaults to "prefer" in each agent's
canonical main session and "suggest" elsewhere; explicit config wins in
both directions. The section is rewritten to be token-leaner and now
covers the hidden-vs-visible spawn distinction (hidden subagents are
invisible and auto-archived; deliverable-bearing work spawns
visible=true and replies with the link) plus the run-end notification
contract. The Messaging spawn-mechanics line is suppressed when the
Delegation section renders, and the stable Tooling visible:true hint is
aligned with the new guidance.

* perf(sessions): coalesce session-state wake bursts

Watched-session change notices woke the watcher's main session with the
generic 250ms heartbeat coalesce, so a burst of changes across several
watched sessions produced one wake per change. Wakes now coalesce for
20s; notices are already queued and deduped, so none are lost.

* test(agents): regenerate prompt snapshots after rebase

* test(sessions,agents): update sibling assertions for coalesced wakes and visible guidance

session-state-events tests advance timers past the new 20s wake
coalesce window; the sessions_spawn schema test tracks the updated
visible description.
2026-08-18 07:03:11 -07:00
Peter Steinberger 6a97ba4f8b test(worker): await inference admission before cancellation (#125835) 2026-08-18 07:01:27 -07:00
Peter Steinberger 1ecd53fe27 fix(qa): handle zombie proc stats in upgrade survivor (#125829) 2026-08-18 06:58:16 -07:00
Peter Steinberger 4589d8514c fix(gateway): stop agent terminal processes after session archive (#125784)
* fix(gateway): stop terminal PTYs on session archive

Bind agent terminals to the durable session incarnation, drain exact ownership during archive, and terminate every job-control process group in the PTY session.\n\nCloses #125769

* test(gateway): cover terminal cleanup on archive

* test(gateway): align terminal outcome assertions

* test(gateway): preserve session exports in invoke test

* fix(gateway): await terminal exit before archive

* test(codex): consolidate supervised instruction coverage

Move the duplicated two-attempt regression into the canonical thread lifecycle test so the exact two-worker extension shard stays bounded on low-core CI.\n\nRelated: #125783
2026-08-18 06:27:42 -07:00
Peter Steinberger 68f808f2c4 fix(claws): keep project artifacts deterministic (#125801)
* fix(claws): keep project artifacts deterministic

* fix(claws): preserve deterministic archive compression

* fix(claws): avoid startup zlib import
2026-08-18 06:09:20 -07:00
Peter Steinberger b3ff29d21f fix(ui): retain filtered automation conflict job (#125782)
* fix(ui): retain filtered cron conflict job

* fix(ui): separate cron detail from filters

* refactor(ui): simplify authoritative cron job lookup

* perf(ui): keep cron route out of startup chunk

* fix(ui): separate cron editor from filtered cache
2026-08-18 05:52:42 -07:00
Ayaan Zaidi e8044fdffe fix(ui): group Skill Workshop applied revisions per skill with inline history (#125794)
The Applied view rendered every applied proposal as an independent recency-sorted row, so one skill's revision history looked like duplicate skills. Applied now shows one row per live skill with a revision-count badge and grouped tab count; the detail pane gains a lazily loaded History section with operations from the ledger's recorded kind. Pending/rejected/quarantined/stale keep one row per proposal.

Fixes #125632
2026-08-18 12:30:05 +00:00
Peter Steinberger 029f6c14cc refactor(ui): split oversized chat side-panel modules (#125770)
* refactor(ui): split chat sidebar modules

* fix(ui): break chat sidebar import cycle
2026-08-18 05:25:01 -07:00
Peter Steinberger f1453c7c77 fix(ci): heal red main - dialog reopen under isolation + startup baseline (#125800)
Two landed-PR races left main red (run 32131816085):

- #125692's rewritten markdown-tables dialog test drives every interaction
  through direct handler calls except the reopen, which used a raw
  expand.click() that only worked via a leaked cross-file document listener
  in the shared lane; #125766 moved the file to the isolated lane where no
  such listener exists. Reopen now uses the file's own handler idiom.
- Accumulated startup-JS creep from landed features put main 50 B over its
  gzip budget (344395 B vs 343289 B baseline + 1056 B tolerance). Baseline
  updated to main's CI-measured bytes via the script's --update-baseline
  contract.
2026-08-18 05:06:05 -07:00
Ayaan Zaidi d412c6b284 fix(codex): inherit agent workspace instructions in native subagents (#125783)
* fix(codex): inherit agent workspace instructions in native subagents via thread developer instructions

* fix(codex): satisfy lint on thread instruction changes

* fix(codex): persist frozen agent instructions across supervised materialization
2026-08-18 17:15:15 +05:30
Ayaan Zaidi a884d19bad feat(skills): merge execution-dir skills after agent workspace skills (#125786)
* feat(skills): merge execution-dir skills after agent workspace skills

* test(skills): cover new workspace-skill-loader exports in mock factories

* fix(skills): complete multi-root invariant across sync, CLI snapshot, and prompt fallback

* fix(skills): use canonical workspace session facts
2026-08-18 17:14:09 +05:30
openclaw-mantis[bot] 43c31ea056 chore(ui): refresh control ui locales (#125774)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-18 04:27:23 -07:00
Jason (Json) 7c65bbcee3 fix(sessions): track context window provenance (#124303)
* fix(sessions): track context window provenance

* fix(sessions): complete context provenance coverage

* fix(sessions): honor authored context window caps

* fix(agents): distinguish context source helpers

* fix(sessions): clear context provenance on model invalidation

* test(codex): preserve local operator authority provenance

* fix(context): clamp effective caps to native windows

* fix(cron): use the runtime model facade

* fix(status): honor session context provenance

* test(status): use public context token inputs

* test(status): split session row cases

* test(status): classify split cases as test support

* test(status): declare runtime context provenance

* fix(sessions): preserve context ownership through finalization

* fix(sessions): apply context provenance to listings

* fix(cron): preserve projected context ownership

* fix(sessions): scope locked context ownership

* fix(status): share session context projection
2026-08-18 05:03:01 -06:00
Vyctor H. Brzezowski 70df0311b8 fix(ui): seed chat rename from stored label (#125097) 2026-08-18 08:01:00 -03:00
Vyctor H. Brzezowski 29b1a65d1e improve(ui): compact GitHub links in chat (#125746)
* improve(ui): compact GitHub links in chat

* fix(ui): refine GitHub link pills
2026-08-18 07:59:37 -03:00
Vyctor H. Brzezowski 40597e25b5 fix(ui): match fullscreen table presentation (#125692)
* fix(ui): match fullscreen table presentation

* fix(ui): confirm copied tables with check icon

* test(ui): type table style probe safely

* test(ui): repair table style parity probe

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 03:56:49 -07:00
ClawSweeper 415ffc010b fix(ui): restore tool activity interaction polish (#125790)
* fix(ui): restore tool activity interaction polish

* fix(ui): restore final tool activity visuals

* fix(ui): keep running tool activity compact

* fix(ui): preserve tool disclosure state ownership

* fix(ui): preserve disclosure scroll after resize

---------

Co-authored-by: vyctorbrzezowski <krzyszchweski@gmail.com>
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 03:56:22 -07:00
Peter Steinberger cd05e3cd46 fix(sessions): keep lifecycle upserts atomic (#125777) 2026-08-18 03:50:15 -07:00
Peter Steinberger 2d5334fb42 fix(tts): normalize streamed speech and report fallbacks (#125686)
* fix(tts): normalize streamed speech and report fallbacks

Streamed Discord voice now strips Markdown and raw link destinations like buffered synthesis.

Record the first failed streaming provider and reason code before successful file fallback.

* test(ui): stabilize reconnect retry timing

Drive the retry deterministically by advancing the exact 100 ms fake timer while preserving the ordering and outbox proof. Repairs CI run 32110130614 job 95627654678.

* fix(discord): ignore expected TTS stream skips

Address the ClawSweeper finding by retaining warning metadata only for actual failed attempts. Expected unsupported-for-streaming skips stay silent while real streaming failures still warn after successful file fallback.

* test(ui): settle interaction state before assertions

Repairs CI run 32117859632 by invoking the markdown table handler directly with a targeted event and waiting for durable IndexedDB composer state before navigation or page close.

* test: remove incidental UI and process identities

CI run 32120793258 exposed two owner-specific test assumptions.

Preserve the child-session hover visibility and pointer assertions, then focus and activate its menu with Enter so an unrelated delayed hovercard cannot intercept the pointer.

Assert the exact owned descendant PID is dead when QA cleanup completes instead of checking a globally reusable PGID.

* test(ui): stabilize connected send retry timing

CI run 32125741781 exposed the wall-clock race in the connected retry test.
2026-08-18 03:46:22 -07:00
Peter Steinberger 0a4e81e97d fix(cli): mark in-flight agent runs unsuccessful (#125757) 2026-08-18 03:39:40 -07:00
Ayaan Zaidi ee2027a927 fix(skills): target the canonical workspace from worktree sessions and survive missing drafts (#125737)
Skill proposals created in ephemeral session worktrees targeted the throwaway copy — applied autolearn updates were silently lost — and a missing durable draft failed the whole skill_workshop list action. The session producer now records the selected canonical workspace (projectRoot/requestedCwd/agent workspace) when it swaps cwd into a managed worktree, capture and the workshop tool prefer that recorded fact, persisted pre-upgrade session records are backfilled idempotently at the startup migration owner, and missing-draft proposals render a degraded state with actionable inspect/apply errors instead of dead-ending.

Fixes #125653
2026-08-18 10:32:46 +00:00
Peter Steinberger 0c493f6ac8 fix(ui): disable review-only approval actions (#125732)
* fix(ui): disable review-only approval actions

* fix(ui): disable cloud worker save during refresh

* test: drain mock resolution before shared cleanup
2026-08-18 03:32:41 -07:00
Peter Steinberger d92ebbaf72 feat(gateway): reach a Gateway behind an identity-aware proxy from the CLI (#125700)
* feat(gateway): reach a Gateway behind an identity-aware proxy from the CLI

Operator CLI surfaces (tui, attach, call, probe, onboarding, and configure) can present configured gateway.remote.edgeAuth headers to an identity-aware proxy. Headers are origin-bound, WSS-only, never follow redirects, cannot set transport-owned headers, and are redacted. Identity-proxy upgrade rejections are classified and remediated instead of being reported as an unreachable gateway.

* test(gateway): cover config-aware probe calls

Keep status probe expectations aligned with the resolved configuration forwarded for origin-bound edge-auth resolution.

* fix(gateway): preserve edge auth across wizard saves and enforce wss before secret resolution

Preserve gateway.remote.edgeAuth only when the configured Gateway scope is unchanged, and reject non-WSS targets before resolving any edge-auth SecretInput.
2026-08-18 03:29:56 -07:00
Ayaan Zaidi f1b8082d61 fix(models): surface ambient CLI logins in gateway model availability (#125772)
The gateway models.list auth resolver passed an empty external-CLI scope, so models pinned to CLI runtimes (claude-cli, gemini-cli, minimax) showed 'Sign-in needed' in the Control UI picker while the same gateway executed turns on them fine. Availability now derives the overlay scope from config via resolveExternalCliAuthScopeFromConfig — the same scoping the execution path uses — so the picker matches what the gateway will run. A configured CLI-runtime model is an operator declaration of that CLI's login; with no ambient CLI login the row still reads signed-out.
2026-08-18 10:25:55 +00:00
Peter Steinberger 5f958cf8e6 fix(tts): avoid mislabeled local and ElevenLabs audio (#125628)
* fix(tts): report actual audio output formats

Detect local CLI audio containers before conversion and derive ElevenLabs delivery metadata from the effective output format. This prevents MP3 or PCM bytes from being persisted or delivered under incompatible file and voice metadata.

* fix(tts-local-cli): distinguish Ogg Opus audio

Treat Ogg as a source container unless its first packet is OpusHead, so Vorbis and M4A inputs are transcoded to the requested target instead of being mislabeled as native voice audio.

* fix(tts-local-cli): validate MP3 frame headers

Require valid MPEG version, layer, bitrate, and sample-rate fields before treating sync bytes as MP3, preventing reserved headers from bypassing conversion under MP3 metadata.

* fix(tts-local-cli): validate tagged MP3 output

Require structurally valid ID3v2 metadata followed by a strict MPEG frame, and stop trusting recognizable file extensions when their bytes do not match. Unknown or malformed output now fails closed instead of bypassing conversion.

* fix(tts-local-cli): accept free-format MPEG audio

Treat bitrate index zero as valid free-format MPEG audio and lock the ID3v2.4 footer offset contract with focused regression coverage.

* fix(tts-local-cli): normalize all Ogg output

Treat Ogg only as a source container and always transcode it to the requested target, so malformed or ambiguous Ogg bytes can never bypass conversion as native voice audio.
2026-08-18 03:24:44 -07:00
Peter Steinberger 01811fb107 fix: show effective exec approval policy in Devices (#125756) 2026-08-18 03:22:31 -07:00
Peter Steinberger 5a28a491b9 fix(media): surface silent attachment failures (#125562)
* fix(media): surface silent attachment failures

Missing structured images now produce a visible model-facing system note, failed playback transcodes warn once per source identity, and bodyless successful media responses are rejected instead of stored as empty files.

* fix(media): persist failed image outcomes

* fix(media): skip note lookup without failures
2026-08-18 03:17:29 -07:00
Peter Steinberger fd1171f8fb refactor(ui): heal chat-pane max-lines and markdown-tables mock isolation (#125766)
* refactor(ui): extract chat pane rail state

chat-pane-render.ts sits at 702/700 effective max-lines on main, latently
failing the lint lane for any change that pulls it into scope. Extract the
rail/sidebar-slot model building into chat-pane-rails.ts (behavior-neutral)
to heal it without a suppression.

* test(ui): isolate markdown-tables from shared module graph

The shared UI runner reuses its module graph across jsdom registries; when
another worker file evaluates markdown-tables.ts unmocked first, this file's
clipboard vi.mock can bind to a stale instance and the copy spy records zero
calls (checks-ui failures on PR #125668). The test belongs on the canonical
singleton-sensitive list, which exists for exactly this class.
2026-08-18 03:16:44 -07:00
Peter Steinberger d95d591d98 fix(slack): require message timestamps for delivery success (#125762) 2026-08-18 03:16:17 -07:00
Peter Steinberger 8cbeb51503 fix(ui): preserve automation mutation lifecycle (#125698)
* fix(ui): preserve cron mutation lifecycle state

* test(ui): align cron e2e revision fixtures

* fix(ui): preserve queued cron run feedback

* fix(ui): advance cron editor revision after toggle
2026-08-18 03:14:25 -07:00
Peter Steinberger c724adf170 fix(update): wait for late gateway handoff exit (#125759) 2026-08-18 03:13:12 -07:00
Peter Steinberger 3b3af11672 fix(agents): pin completion workers to prepared generation (#125761) 2026-08-18 03:12:27 -07:00
Peter Steinberger 5a15e1a39c fix(auto-reply): abort only the captured steer operation (#125763)
Accepted-unconfirmed steer cleanup re-resolved the reply operation by
session key after unbounded awaits, so a same-key successor admitted in
the window could be aborted instead of the run that actually accepted
the injection. Capture the exact reply operation and embedded-run abort
authority before queueing and abort only those, per the
delegated-run-authority invariant (correlation ids never carry abort
authority across awaits).

Regression: successor admitted mid-await is never aborted; the captured
operation is.
2026-08-18 03:11:38 -07:00
Peter Steinberger f886ab181e fix(ui): align session owner filtering terminology (#125645)
* fix(ui): align session owner filtering terminology

Owner filters now use owner terminology consistently across the Gateway, Control UI, and generated native protocol clients. The old terms were prerelease-only, so no migration or compatibility aliases are needed.

* fix(gateway): preserve creator provenance filtering

Keep creatorId scoped to immutable createdActor provenance while ownerId queries the current projected assignable owner. This preserves independent creator and responsibility filtering after reassignment.

* test(ui): wait for remembered draft before reload

CI exposed an IndexedDB draft-persistence race: the test reloaded before the write completed and then re-filled the message while restoration arrived. Wait on the canonical durable-draft helper before reload so the reload cannot race the write.

* fix(ui): keep session menus clear of hovercards

Horizontal sidebar previews were positioned from the inner link rect instead of the complete session row, allowing the hovercard to overlap trailing actions.

Anchor preview placement to the full row while preserving the link trigger and ownership flow so the session menu remains clickable.

* perf(ui): keep hovercard fix within startup budget

Use the sidebar direct-row invariant to anchor the hovercard outside trailing actions without a selector lookup. This preserves the fix without increasing the startup budget.

* fix(qa): preserve Matrix CLI timeout precedence

Keep the primary timeout operator-visible when descendant settlement also reports secondary cleanup trouble. Preserve the complete AggregateError as the public wrapper cause so settlement evidence remains inspectable.

* test(ui): isolate Markdown table clipboard boundary

With isolate:false, the shared module registry can retain clipboard imports before this test installs its module mock, leaving the spy disconnected from the production call.

Stub navigator.clipboard.writeText instead so the test exercises the real copyToClipboard boundary regardless of module load order, then restore the original descriptor.
2026-08-18 03:07:21 -07:00
Peter Steinberger f72782d87b refactor(test): restore auth persistence integrity (#125699)
* test: restore auth persistence integrity

Restore the SQLite-backed auth wizard assertions traced to 43ea501f38 and consolidate duplicated message-action and temp-directory fixtures.

* test: support npm 12 pack results
2026-08-18 02:58:30 -07:00
Peter Steinberger f32da285da fix(ui): retire drafts after authoritative session deletion (#125665)
* fix(ui): retire drafts on authoritative session deletion

* fix(ui): fence drafts after deletion confirmation

* test(ui): type post-confirm draft replacement

* test(ui): wait for durable attachment drafts

* test(ui): reject indexeddb readiness errors

* perf(ui): lazy-load deleted-session cleanup

* perf(ui): trim draft cleanup startup path

* refactor(ui): keep outbox types private
2026-08-18 02:56:05 -07:00
Peter Steinberger dd2ad9695c fix(ui): hide invalid remote worktree choice (#125720)
* fix(ui): remove remote worktree choice

* fix(ui): remove stale node path copy

* test(ui): cover hidden unavailable detail controls

* test(ui): preserve cloud project checkout proof
2026-08-18 02:50:35 -07:00
Peter Steinberger 227230024d fix(configure): persist changes before side effects (#125751)
Local mode is persisted before health and daemon actions, and failed actions no longer receive a bare success outro.
2026-08-18 02:42:09 -07:00
Josh Lehman 9204ab8dc4 fix(skills): restrict workshop mutations to workshop-owned skills and record reconcile outcomes (#125666)
Skill Workshop could autonomously rewrite or delete handwritten skills and discarded its own drop rationale. Workshop mutations are now gated on ledger-derived ownership (applied create proposals; unknown provenance fails closed to user-owned read-only), ownership claims end at drop and return on restore with failure-safe ordering, legacy backups stay restorable, every reconcile outcome persists with drop reasons in an additive table, and a bounded skill_workshop history action exposes them. Adopt/disown opt-in: #125711.

Co-authored with @jalehman (original ownership design).

Fixes #125652
2026-08-18 15:10:41 +05:30
Peter Steinberger b8ff4fe3d7 fix: show sessions waiting for concurrency slots (#125654)
* fix: show sessions waiting for concurrency slots

* test: align queued session integration fixtures

* test: distinguish queued and reactivated followups

* fix: preserve queued state in workboard and android

* fix: project queued status through chat history

* test(ui): keep queued sidebar case under line cap
2026-08-18 02:31:39 -07:00
Peter Steinberger 2601bcbc52 refactor(ui): make task detail a detail-slot document (#125748)
* refactor(ui): make task detail a slot document

* test(ui): cover task detail slot teardown
2026-08-18 02:28:26 -07:00
Peter Steinberger 5e3e52431e fix(voice-call): preserve carrier-confirmed termination state (#125717)
* fix(voice-call): serialize realtime termination

* fix(ui): trim debug overlay startup path
2026-08-18 02:17:11 -07:00
Ayaan Zaidi 5e9920fd80 fix(skills): add never-capture exclusions to autonomous self-learning prompts (#125716)
Autonomous self-learning captured junk (transcript fragments, resolved transients, one-off narratives). The experience-review and history-scan prompts now carry an explicit never-capture exclusion list from one shared constant; user-invoked /learn intentionally keeps its own bar, protected by a negative prompt assertion. Operator-notice follow-up: #125723.

Fixes #125710
2026-08-18 14:45:41 +05:30
Peter Steinberger 186cacc131 fix(worktrees): preserve stale Git metadata during GC (#125721)
Keep orphan reconciliation progressing when a preserved checkout has dangling linked-worktree metadata, while leaving snapshot safety checks unchanged.\n\nRefs #125719
2026-08-18 02:14:33 -07:00
Vyctor H. Brzezowski 631b0c77a1 improve(ui): standardize fenced code collapse and wrapping (#125229)
* improve(ui): standardize fenced code collapse and wrapping

Every Markdown code fence now shares one behavior instead of the JSON-only
40-line disclosure: blocks longer than seven lines show a seven-line preview
with the exact hidden-line count, horizontal overflow stays inside the fence,
and a reversible wrap control appears only once a line measurably overflows.
User fences keep the bubble's own typography and carry no code chrome.

The collapsible markup is emitted only for hosts that own the code-block
lifecycle (codeBlockInteraction: interactive), and that lifecycle collapsed to
one click owner plus one initializer so a host cannot wire half of it. The chat
thread, detail panel, and caretaker surface all run it; the skills preview gets
the click owner its copy button had never been given. The scan is deferred and
coalesced because a Lit element ref commits before that render's children, and
detached ResizeObserver targets are released before each pass.

Also adds the interaction mode to the markdown cache key so a static host cannot
serve interactive markup from a sibling render, and drops the stylesheet rules
and selector guards the removed json-collapse markup owned.

* fix(ui): satisfy fenced code checks
2026-08-18 06:11:07 -03:00
Peter Steinberger a80ffd0431 fix(sessions): propagate compaction transcript read errors (#125741) 2026-08-18 02:09:11 -07:00
Peter Steinberger f0dd7eecaa fix: preserve plugin update recovery after commit (#125739) 2026-08-18 02:08:56 -07:00
Peter Steinberger 29d6fa6eb2 fix(browser): surface initial navigation failures (#125743) 2026-08-18 02:08:10 -07:00