100 Commits
Author SHA1 Message Date
Jason (Json)andGitHub 21bfc75648 fix(ui): show new task prompts immediately without duplicates (#111953)
* fix(ui): stabilize new task prompt rendering

* test(ui): cover prompt handoff integration

* test(ui): initialize prompt handoff fixtures
2026-07-20 14:47:32 -06:00
Jason (Json)andGitHub e2bb04328f fix(release): accept large tarball entry lists (#111672) 2026-07-20 13:21:27 -06:00
Jason (Json)andGitHub cadad3b7bd fix(acpx): verify native platform packages (#111682) 2026-07-20 12:57:54 -06:00
Jason (Json)andGitHub 779cf40d46 feat(dashboard): harden transcript MCP App pinning (#111748) 2026-07-20 02:42:00 -06:00
Jason (Json)andGitHub 8c1ea03da0 fix(ui): bound dashboard MCP App lifecycle (#111691) 2026-07-20 00:38:04 -06:00
Jason (Json)andGitHub 6304a47762 feat(dashboard): harden MCP widget authority (#111679) 2026-07-20 00:32:02 -06:00
Jason (Json)andGitHub 9c7800467c feat(mcp): open App views from channel replies (#111211)
* feat(mcp): add portable channel app actions

* test(gateway): keep origin reset private

* fix(mcp): require a resolved reply channel
2026-07-19 01:44:15 -06:00
b8b9825083 fix(plugins): report newer registry releases for exact-pinned npm installs (#111169)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:16:54 -06:00
7aa5ee594e fix(doctor): treat invalid legacy session stubs as warnings during session SQLite import (#111168)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:14:56 -06:00
Jason (Json)andGitHub baa8b9b24f test(telegram): add MCP App Funnel proof fixture (#111238) 2026-07-19 00:14:36 -06:00
25a8b33ff5 fix(state): make managed-image additive migration portable across SQLite versions (#111167)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:10:48 -06:00
Jason (Json)andGitHub 2f7da3057c feat(mcp-apps): support bounded model context updates (#111212)
* feat(mcp-apps): support model context updates

* fix(mcp-apps): satisfy protocol and runtime guards
2026-07-18 23:08:35 -06:00
Jason (Json)andGitHub 060b30f23a fix(ui): ignore malformed tool stream entries (#111145)
Prevent malformed transient tool-stream entries from aborting Control UI chat reconciliation while preserving valid tool message order and rendering.
2026-07-18 22:21:11 -06:00
Jason (Json)andGitHub 7d62a277ff fix(ui): teardown MCP Apps before unmount (#111124)
* fix(ui): teardown MCP Apps before unmount

* fix(ui): keep MCP teardown helpers internal
2026-07-18 20:25:46 -06:00
Jason (Json)andGitHub 047232bd16 fix(telegram): fall back for web apps outside DMs (#111116) 2026-07-18 19:52:19 -06:00
Jason (Json)andGitHub 7c070d6df6 feat: allow standalone MCP Apps to use bound tools and resources (#110515)
* Gateway: enable ticketed MCP App bridge

* Gateway: make MCP App operation switch exhaustive

* refactor(gateway): drop no-op MCP App route change

* fix(gateway): enforce standalone MCP App tool authority

* docs(gateway): clarify standalone MCP App ticket authority

* fix(gateway): require standalone MCP App initialization

* refactor(gateway): keep standalone route load explicit
2026-07-18 17:50:37 -06:00
Jason (Json)andGitHub 0483001ef6 fix(scripts): dedupe release checklist declaration (#111024) 2026-07-18 17:21:15 -06:00
Jason (Json)andGitHub f328250fa9 fix(ui): reject widget command prompts (#110808) 2026-07-18 10:56:41 -06:00
Jason (Json)andGitHub 63c929a74e fix(ui): prevent appended chat rows from overlapping (#110525)
* test(ui): cover appended transcript row layout

* fix(ui): resolve virtual chat scroll owner after mount
2026-07-18 01:42:08 -06:00
Jason (Json)andGitHub 923d92bdd0 feat(ui): complete Control UI MCP App bridge (#109807)
* feat(ui): complete MCP App message bridge

* fix(ui): gate reconstructed MCP App messaging

* fix(ui): register MCP message handler without suppression

* fix(ui): use public MCP Apps message schema export

* chore: realign PR branch with canonical main

* fix(ui): register MCP messages through public bridge API
2026-07-17 23:21:10 -06:00
Jason (Json)andGitHub db7a5c6333 fix(packaging): identify OCM adapter during prepack (#110426) 2026-07-17 23:14:35 -06:00
Jason (Json)andGitHub 2a2e97b960 feat(gateway): add ticketed read-only MCP App host (#109861)
* Gateway: add ticketed MCP Apps standalone host

* Test: tighten MCP App conformance fixture types

* Gateway: support MCP App ping requests

* Test: satisfy MCP App conformance lint

* Test: load MCP App host modules in page
2026-07-17 22:16:57 -06:00
73980e7e42 fix(codex): remove duplicate provider setup choice (#107979)
* fix(codex): stop advertising harness as model provider

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>

* fix(wizard): keep migration plugins out of optional setup

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 03:31:11 -07:00
Jason (Json)andGitHub ec5e0809b9 fix(tui): show compact model and reasoning (#108669)
* fix(tui): show compact model and reasoning

* test(tui): track Sol reasoning default
2026-07-16 01:09:50 -06:00
Jason (Json)andGitHub ca52d54da2 fix(onboarding): preserve OAuth across runtime defaults (#108617)
Merged via squash.

Prepared head SHA: 366fdedacf
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-15 22:55:32 -06:00
Jason (Json)andGitHub 18b2c9cabd fix(ui): steer restored queued messages (#107836)
Merged via squash.

Prepared head SHA: 3f8240bdaf
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-14 18:42:00 -06:00
Jason (Json)andGitHub 4be39280e6 fix(ui): align new-session composer controls (#107862)
Match the new-session composer geometry with chat, keep the model picker at the bottom right, and anchor its menu so it expands left. Add browser coverage for composer alignment and model-menu placement.
2026-07-14 18:27:57 -06:00
0644956830 fix(sqlite): compaction works with memory path search enabled (#107809)
* fix(sqlite): accept canonical memory path FTS triggers

* test(sqlite): reject drifted path FTS trigger

---------

Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-07-14 16:25:37 -07:00
0e0754b7c3 fix(sqlite): prevent startup failure on dormant older session databases (#107803)
* fix(sqlite): migrate dormant session databases before compact

* test(sqlite): cover historical startup migration

---------

Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-07-14 16:24:24 -07:00
Jason (Json)andGitHub be88c46160 fix(packaging): reject unsafe root source packs (#107794) 2026-07-14 16:09:27 -07:00
Jason (Json)andGitHub c93b7ca130 fix(control-ui): prevent inflated run times and overlapping tasks (#107229)
* fix(control-ui): use wall clock for run timer

* fix(control-ui): prevent background task overlap
2026-07-14 09:44:54 -06:00
Jason (Json)andGitHub 01a7f4fb3f feat(ui): add images and model selection to new sessions (#107358)
Merged via squash.

Prepared head SHA: cf99b5bab5
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-14 04:14:01 -06:00
Jason (Json)andGitHub 5f8b2a4670 fix: complete Codex login handoff during onboarding (#107174) 2026-07-13 23:40:55 -06:00
Jason (Json)andGitHub f72e936f26 fix: restore grouped AI auth options in guided onboarding (#107038)
Restore the grouped provider/auth picker for fresh guided onboarding, keep secondary providers under More, expose OAuth and device-code methods, and bound the setup probe session identifier so ChatGPT login is not rejected by the prompt cache key limit.
2026-07-13 22:12:19 -06:00
Jason (Json)andGitHub b32f59c8c1 feat(ui): create catalog sessions from the sidebar (#105810)
* feat(ui): create sessions from catalog headers

* fix(ui): deduplicate catalog-owned sessions

* fix(ui): preserve catalog session routing state

* fix(ui): keep per-agent session creation in switcher

* fix(anthropic): normalize runtime config snapshot

* test(plugin-sdk): account for model runtime export

* test(plugin-sdk): classify current deprecated surface

* test(ui): follow agent chip menu trigger

* fix(ui): bind catalog drafts to validated agent

* fix(ui): resolve catalog targets from gateway

* refactor(ui): split sidebar session helpers

* chore(ci): complete LOC baseline migration

* fix(ui): extract sidebar session catalog rendering

* fix(anthropic): use provider-relative catalog model id

* chore(ci): ratchet sidebar LOC baselines

* test(ui): cover catalog draft retargeting

* chore(plugin-sdk): refresh API baseline

* style: format catalog session changes

* fix(ui): retry catalog drafts after reconnect

* fix(ui): back off catalog target retries

* fix(ui): keep unresolved catalog drafts locked

* fix(ui): gate catalog creation in core

* fix(ui): keep catalog renderer private

* style(ui): format catalog session target

* chore(plugin-sdk): refresh API baseline

* style(ui): format catalog group state

* Merge latest origin/main CI fixes

* fix(ui): preserve catalog session agent selection

* fix(ui): preserve catalog session agent

* chore(plugin-sdk): refresh API baseline

* fix(ui): type catalog route data

* chore(plugin-sdk): refresh API baseline

* refactor(sessions): centralize transcript path archival

* fix(ui): target expanded agent catalog sessions

* fix(ui): scope catalog actions to expanded agent

* docs(ui): clarify catalog loader fallback

* fix(ui): scope catalog pagination to agent

* test(ui): type sidebar lifecycle refresh

* fix(anthropic): preserve node catalog bindings
2026-07-13 09:25:22 -06:00
Jason (Json)andGitHub 4e1224ddbe fix(agents): follow through on promised asynchronous work (#105958)
* fix(agents): close promised asynchronous work loops

* fix(agents): close promised asynchronous work loops

* refactor(agents): keep promised work policy focused

* refactor(agents): preserve prompt module documentation

* style(agents): keep prompt renderer within LOC ratchet

* fix(agents): close promised asynchronous work loops

* fix(agents): close promised asynchronous work loops
2026-07-13 00:56:04 -06:00
Jason (Json)andGitHub 7d9fbb1db8 docs(coding-agent): secure worktree preparation (#106121) 2026-07-13 00:51:49 -06:00
Jason (Json)andGitHub 9c94864746 docs(coding-agent): require fresh project worktrees (#105993)
* improve(agents): require fresh canonical worktrees

* fix(agents): scope fresh worktrees to project coding

* chore(agents): preserve prompt LOC baseline

* fix(skills): exempt scratch Codex scaffolds

* docs: refresh agent template map

* fix(agents): scope worktree policy to prepared workers

* fix(skills): require launcher-prepared worktrees

* fix(skills): sandbox untrusted contributor refs
2026-07-13 00:39:56 -06:00
Jason (Json)andGitHub 3375e30d9c chore(ci): remove TypeScript LOC ratchet (#106096)
Remove the hard 500-line TypeScript LOC ratchet from CI and local check planning, along with its package commands, implementation, baseline, and dedicated tests. Keep the remaining pull-request temp-creation report on its own pr-base fetch.\n\nVerification: 99 focused tooling tests; actionlint; zizmor; workflow guards; exact-head autoreview.
2026-07-13 00:15:00 -06:00
Jason (Json)andGitHub 30cbc1118a fix(ui): keep restored prompts visible during runs (#106001) 2026-07-12 23:55:53 -06:00
Jason (Json)andGitHub 38808a43d6 ci: remove stale transcript deadcode baseline (#106064) 2026-07-13 13:46:59 +08:00
Jason (Json)andGitHub 1663c8801d fix(ui): preserve MCP App previews across reloads (#105728)
* fix(mcp): harden app preview lifecycle

* fix(ui): defer MCP app initialization payload

* test(mcp): align current policy expectations

* fix(ui): preserve MCP app previews

* fix(mcp): reject disabled app restoration

* fix(mcp): preserve reconstructed app state

* fix(mcp): bind reconstructable app data

* fix(ui): deduplicate MCP app preview copies

* style(ui): format MCP app preview test

* fix(mcp): satisfy metadata access lint

* style(mcp): format metadata access
2026-07-12 17:30:34 -06:00
Jason (Json)andGitHub 5b52e2490a fix(gateway): refresh model availability from persisted auth (#102289) 2026-07-08 14:45:09 -06:00
Jason (Json)andGitHub 4e84981402 feat(crestodian): guide providerless model setup (#101887)
* feat(crestodian): guide providerless model setup

* fix(crestodian): avoid TUI message shadowing

* fix(crestodian): tighten provider setup handoff

* fix(crestodian): simplify model setup result

* fix(crestodian): audit committed config hash

* fix(crestodian): contain embedded wizard exits

* test(crestodian): auto-clean operation temp dirs
2026-07-07 19:24:54 -06:00
Jason (Json)andGitHub 2fbd4cdcba fix(installer): complete first-run onboarding (#101901)
* fix(installer): complete first-run onboarding

* docs(installer): document finalization paths

* fix(installer): honor verify without tty

* fix(installer): align config finalization
2026-07-07 18:23:56 -06:00
Jason (Json)andGitHub f7e962d6e3 feat(cli): add openclaw promos to discover and claim ClawHub promotional model offers (#100236)
* feat: add openclaw promos CLI for ClawHub promotional model offers

* fix: harden promos claim auth validation and sanitize remote promo text

* fix: enforce promo window client-side and validate slug contract

* fix: shell-safe model ref contract and explicit --api-key override

* fix: hold promotion aliases to the models alias contract

* docs: document argv-credential contract and env alternative for promos claim

* fix: enforce provider plugin enablement on the credential-reuse claim path

* fix: require plugin install before credential-reuse shortcut in promos claim

* fix: run runtime plugin repair on promo defaults and harden identifier parsing

* fix: distinct message for contract-invalid promo aliases

* fix(cli): validate promotion plugin contracts

* fix(cli): recheck promotion window before claim

* feat(cli): surface ClawHub promotions in models list via the hosted feed

Passive discovery for promotional model offers. A cadence-gated (24h),
fail-silent conditional GET of ClawHub's immutable promotions feed
snapshot (If-None-Match -> 304, short 2.5s timeout, unauthenticated so
CDN caches stay unfragmented) is cached in two new shared-state-DB
tables, fully separate from update_check_state. models list renders an
'Available via promotion' group for live offers whose models are not in
the user's configured set (including the zero-row fresh-install path),
tags claimed models promo / promo ended from provenance recorded at
claim time, and prints a one-time notice per newly seen offer; promos
list and claim mark offers as seen. Machine outputs stay clean, snapshot
sequence is monotonic against stale edges, and claims still revalidate
against the live API so the kill switch always wins.

* style: satisfy lint on promotions feed additions

no-useless-fallback-in-spread on the optional request headers and
no-map-spread in claim-provenance row mapping.

* fix(cli): harden promotions feed cache

* fix(cli): honor live promotion validity
2026-07-07 01:10:42 -06:00
Jason (Json)andGitHub d8ffb1f307 fix(ui): keep microphone input settings usable on narrow screens (#101377)
Merged via squash.

Prepared head SHA: 17329d4f30
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-07 01:06:40 -06:00
Jason (Json)andGitHub 521bf99f17 fix(ui): clear stale sidebar run state after chat final (#101293)
Merged via squash.

Prepared head SHA: 32a33eb4cd
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-07 01:04:00 -06:00
Jason (Json)andGitHub c87225fb4a fix: keep owner tools available in WebChat (#101271)
* fix: keep owner tools available in WebChat

* fix: align WebChat owner policy checks
2026-07-07 01:00:24 -06:00
Jason (Json)andGitHub e024eacf17 fix(ui): preserve login across same-origin gateways (#101352)
* fix(ui): scope device auth by gateway

* fix(ui): migrate legacy device auth storage

* test(ui): cover gateway device-token isolation
2026-07-07 00:51:19 -06:00
9b2bb9c0a6 fix(models): refresh provider auth after CLI login (#101256)
* fix(models): refresh gateway auth after login

* docs(changelog): note model auth live refresh

* chore(changelog): defer release note

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 05:20:35 +01:00
Jason (Json)andGitHub 17d3c2eb0a feat(ui): redesign chat composer controls (#100461)
* feat(ui): redesign chat composer controls

* fix(ui): preserve scoped chat model catalogs

* fix(ui): honor configured default agent in chat commands

* fix(ui): align composer translations and tests

* test(ui): expect cached chat commands

* fix(ui): inset composer attachment previews

* fix(ui): add attachment preview top padding

* fix(ui): preserve composer layout after main merge

* fix(ui): keep abort available during voice input

* fix(ui): merge duplicate model provider groups

* feat(ui): finalize chat composer redesign

* fix(ui): refine composer layout and scroll indicators

* fix(ui): align composer with chat column

* fix(ui): restore composer max width

* fix(ui): match composer Codex width

* fix(ui): stabilize chat composer controls

* docs: refresh generated map

* fix(ui): discard rejected model drafts

* fix(ui): clear chat composer CI gates

* test(ui): await rejected model rollback

* fix(ui): address chat composer review findings

* fix(ui): preserve default provider ordering

* fix(ui): stage model picker changes until save

* fix(ui): scope model picker drafts to chat context

* fix(ui): align composer drafts and message actions

* fix(ui): preserve reasoning rendering

* feat(ui): refine chat composer interactions

* fix(ui): repair chat composer CI checks

* fix(ui): repair chat composer integration checks

* fix(ui): translate chat composer labels

* fix(ui): restore mobile camera action

* test(ui): target visible attachment control

* test(ui): locate attachment disclosure directly

* fix(ui): preserve composer control ordering

* test(ui): track current composer controls

* fix(ui): honor terminal active-run state

* fix(ui): guard command metadata ownership

* fix(ui): stage agent model defaults

* fix(ui): preserve chat settings and scroll signals

* fix(ui): reconcile merged chat controls

* fix(ui): localize Talk composer options

* test(ui): infer chat control props

* fix(ui): refresh agent model metadata on session switch

* style(ui): format merged chat controls

* test(ui): avoid shadowed composer geometry names
2026-07-06 16:18:36 -06:00
Jason (Json)andGitHub 0221544190 fix(release): block stale Codex runtime pins (#100015)
Prevents opted-in plugin runtime dependencies from being published with stale
registry pins. The same freshness assertion now guards both npm and ClawHub
release paths, including the managed Codex runtime.

Prepared head SHA: d5d0ecba4b
Reviewed-by: @fuller-stack-dev

Closes #99951
2026-07-04 15:13:31 -06:00
cccc856b82 fix: reject incompatible Node 23 runtimes (#99832)
* fix: reject incompatible Node 23 runtimes

* fix: repair installer CI coverage

* docs: clarify supported Node ranges

* fix: fail closed on unreadable runtime versions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 00:03:49 -07:00
b738d37662 fix(onboard): skip unavailable skill installers via lifecycle readiness preflight (#99726)
* fix: skip unavailable skill installers during onboarding

* fix(onboard): preflight skill installer readiness in skills lifecycle

* fix(skills): gate preflight on-PATH brew and apt Go candidate version

* fix(skills): defer absent apt Go candidate to installer refresh

* fix(skills): skip unwritable Homebrew installers

* fix(skills): keep existing Go independent of Homebrew

* fix(skills): verify sudo apt authorization

* fix(skills): keep Go installs discoverable

* fix(skills): validate apt Go candidate before install

* fix(skills): preserve Go toolchain diagnostics

* fix(skills): keep sudo apt installs noninteractive

* fix(skills): keep installed Go tools discoverable

* fix(skills): preserve existing Go install destinations

* fix(skills): persist Go tool paths across restarts

* fix(skills): keep Go installs restart-stable

* fix(skills): verify apt sudo rules are passwordless

---------

Co-authored-by: Sedrak Hovhannisyan <264150421+Sedrak-Hovhannisyan@users.noreply.github.com>
2026-07-03 22:37:55 -06:00
Jason (Json)andGitHub 786abe78df Streamline OpenClaw onboarding (#98218)
* feat: streamline onboarding setup flow

* fix: harden onboarding preflight installs

* test: isolate gateway preflight safety env

* fix: keep local gateway probes on loopback

* fix: honor onboarding node manager installs

* docs: align setup onboarding reference

* fix: harden bare gateway probe fallback

* fix: honor env gateway auth in bare TUI probe

* test: isolate wizard TUI hatch mocks
2026-06-30 11:22:26 -07:00
Jason (Json)andGitHub 455f813d6e fix(telegram): deliver durable reasoning when enabled
Preserve shared reasoning suppression by default while letting Telegram opt into durable reasoning payloads only when it has a deliverable reasoning lane. Covers persistent /reasoning on, separate reasoning stream lanes, and progress-stream suppression.\n\nVerification:\n- node scripts/run-vitest.mjs src/auto-reply/reply/dispatch-from-config.test.ts extensions/telegram/src/bot-message-dispatch.test.ts\n- git diff --check upstream/main...HEAD\n- .agents/skills/autoreview/scripts/autoreview --mode branch --base upstream/main --stream-engine-output\n- CI run 28411526182 green, including QA Smoke CI and check-test-types\n- Real behavior proof run 28411676681 passed\n\nPR: #97875
2026-06-29 17:31:06 -07:00
Jason (Json)andGitHub 6f63140902 fix: avoid false macOS update failures during gateway shutdown (#95886)
Merged via squash.

Prepared head SHA: 400e87c937
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-06-23 01:53:38 -06:00
Jason (Json)andGitHub 606f8ec669 Polish Workboard operations view (#90057)
Merged via squash.

Prepared head SHA: f12b693fda
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-06-17 08:10:30 -06:00
Jason (Json)andGitHub 1e0062b44a feat: add Codex hosted web search (#93446)
Adds Codex as a selectable hosted web-search provider, routes native Codex search safely across model overrides, and isolates bounded hosted-search workers from configured tools.\n\nVerification: focused post-merge regression suite passed 202/202 tests on exact head 23824af49a.
2026-06-16 00:38:16 -06:00
37c1dacac9 docs: point PR landing at maintainer workflow (#93494)
* docs: point PR landing at maintainer workflow

* docs: name PR landing scripts

* docs: specify PR landing commands

* docs: point PR landing at canonical wrapper

* docs: document canonical PR wrapper flow

* docs: scope PR wrapper flow to main

---------

Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-06-16 13:24:51 +08:00
Jason (Json)andGitHub 773ffd87a1 fix(tui): keep parent stdin paused after exit (#93159)
Keep the setup TUI parent stdin paused after its inherited-stdio child exits so Docker and PTY setup parents terminate cleanly. Align pre/post setup terminal cleanup with the cleanup-then-exit contract and add lifecycle regression coverage.

Thanks @fuller-stack-dev.
2026-06-15 17:37:43 +08:00
Jason (Json)andGitHub 77a682c5de fix(agents): retry empty post-tool final turns (#93073)
Recover assistant turns that complete tool work without producing a visible final answer, while preserving intentional silent replies.

Use concrete tool-instance replay safety across embedded, Codex, and Copilot runtimes so unknown, mutating, async-started, and durable recall operations fail closed. Preserve genuine empty Codex final items without promoting commentary or tool-progress echoes.

Supersedes #90872. Thanks @fuller-stack-dev.

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-06-15 00:08:57 -07:00
7259cb5c77 fix(update): continue after package doctor warnings (#91586)
* fix(update): continue after package doctor warnings

* fix(update): type advisory step rendering

* fix(update): preserve advisory doctor step state

* fix(update): share advisory doctor state

* fix(update): keep timed-out doctor failures blocking

* fix(update): require explicit doctor advisory result

* fix(update): reject malformed doctor advisory results

* fix(update): bound doctor advisory diagnostics

* fix(update): keep doctor advisory restart-neutral

* fix(update): protect doctor advisory IPC

* fix(update): scope doctor advisories to converging updater

* fix(update): scope doctor advisories to deferred repairs

* fix(update): secure doctor advisory IPC

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-13 21:03:57 -07:00
Jason (Json)andGitHub 965fa05df3 feat: add tool search directory mode
Add an experimental directory mode that keeps large authorized tool schemas deferred while exposing bounded discovery, exact deferred hydration, and normal OpenClaw policy/hook execution. Client tools remain directly visible; ambiguous hidden names fail closed.
2026-06-13 20:08:39 -07:00
8ae1adfdcc ci: gate stable releases on Windows companion assets (#92555)
* ci: gate stable releases on Windows companion assets

* fix(release): reject malformed Windows checksum manifests

* fix(release): make Windows recovery fail closed

* fix(release): tighten Windows asset identity checks

* fix(release): validate prepared candidate tarballs

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-13 19:33:33 -07:00
65b460f234 fix(nodes): surface pending reapproval diagnostics (#92547)
* fix(nodes): surface pending reapproval diagnostics

* fix(nodes): harden reapproval diagnostics

* fix(nodes): scope pending diagnostics

* fix(nodes): request pairing diagnostics in cli

* fix(nodes): reuse stored auth for diagnostics

* fix(nodes): preserve selected diagnostics credentials

* fix(nodes): prefer approved diagnostics auth

* fix(nodes): narrow diagnostics fallbacks

* fix(nodes): recover from stale diagnostics auth

* fix(gateway): preserve connect error narrowing

* fix(nodes): isolate privileged diagnostics auth

* fix(nodes): constrain privileged diagnostics auth

* fix(nodes): close diagnostics review gaps

* fix(nodes): guard reapproval cleanup races

* fix(nodes): defer stale pairing cleanup

* fix(nodes): preserve reapproval on hello failure

* test(nodes): await post-handshake reapproval cleanup

* test(nodes): avoid unbound websocket send capture

* fix(nodes): allow local auth-none diagnostics

* fix(nodes): preserve overlapping reapproval

* fix(nodes): preserve pending node metadata

* fix(nodes): keep connection age with status

* fix(nodes): preserve reapproval during reconnect races

* fix(nodes): serialize reapproval cleanup

* fix(nodes): bound reapproval reconnect races

* test(nodes): satisfy cleanup claim lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-13 17:40:18 -07:00
6c88811b4b Expose paged channel action results (#88993)
* fix(discord): expose paged thread list results

* fix(discord): keep thread pagination local

* fix(discord): use archive timestamps for thread cursors

* test(discord): cover thread pagination results

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-12 21:29:43 -07:00
e24c3df27d fix(auth): verify SQLite auth migration before cleanup
Verify imported auth profiles and auth runtime state can be read back from the canonical SQLite store before doctor removes legacy JSON auth files.

The migration now keeps legacy JSON in place with a warning when SQLite verification misses expected imported data, avoiding source cleanup before durable readback succeeds.

Verification:
- `scripts/pr review-tests 91740 src/commands/doctor-auth-flat-profiles.test.ts`
- `./node_modules/.bin/oxfmt --check src/commands/doctor-auth-flat-profiles.ts src/commands/doctor-auth-flat-profiles.test.ts`
- `./node_modules/.bin/oxlint src/commands/doctor-auth-flat-profiles.ts src/commands/doctor-auth-flat-profiles.test.ts`
- `scripts/pr-prepare gates 91740` passed `pnpm build` and `pnpm check`; broad local `pnpm test` failed in unrelated baseline shards and was explicitly waived by maintainer.
- Real behavior proof: https://github.com/openclaw/openclaw/actions/runs/27285927515/job/80593035530

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: Radek Sienkiewicz <velvet-shark@users.noreply.github.com>
2026-06-10 17:18:18 +02:00
FullerStackDevandAyaan Zaidi 86215c9634 test(discord): avoid unbound hydration mock 2026-06-10 14:54:32 +05:30
FullerStackDevandAyaan Zaidi 514ac29d03 test(discord): cover reply hydration fetch failures 2026-06-10 14:54:32 +05:30
FullerStackDevandAyaan Zaidi b08eef0508 fix(discord): hydrate reply context metadata 2026-06-10 14:54:32 +05:30
FullerStackDevandAyaan Zaidi cab62324f4 fix(update): recover package gateway restart after refresh failure 2026-06-10 14:48:30 +05:30
FullerStackDevandAyaan Zaidi f0206d935a fix(update): avoid repair command lint shadow 2026-06-10 14:43:46 +05:30
FullerStackDevandAyaan Zaidi 800f4dcb62 fix(update): expose plugin convergence repair 2026-06-10 14:43:46 +05:30
FullerStackDevandAyaan Zaidi c39dea917a fix(gateway): route headless doctor hints 2026-06-10 10:51:19 +05:30
FullerStackDevandAyaan Zaidi 40aad24e8a fix(gateway): surface headless LaunchAgent state 2026-06-10 10:51:19 +05:30
fuller-stack-devandShakker 43acf3a4a2 fix(gateway): gate env approval runtime auth 2026-06-08 14:49:01 +01:00
fuller-stack-devandShakker 2affecc720 fix(gateway): share approval runtime socket token 2026-06-08 14:49:01 +01:00
Jason (Json)andGitHub 57e0bdaabe feat: add live provider model catalog helper
Summary:
- Add a shared live provider catalog runtime for SDK-backed providers.
- Route OpenAI, xAI, OpenCode Go, Chutes, DeepInfra, Venice, NVIDIA, and Vercel AI Gateway live model discovery through the shared helper.
- Remove duplicated provider-local live catalog caching and harden auth marker stripping, empty live-result retries, and OpenAI custom-base-url handling.

Verification:
- node scripts/run-vitest.mjs extensions/openai/openai-provider.test.ts src/plugin-sdk/provider-catalog-live-runtime.test.ts src/commands/models/list.source-plan.test.ts extensions/opencode-go/index.test.ts extensions/nvidia/provider-catalog.test.ts
- pnpm plugin-sdk:api:check
- pnpm lint --threads=8
- pnpm run lint:extensions:bundled
- pnpm run test:extensions:package-boundary:compile
- pnpm check:import-cycles
- pnpm exec oxfmt --check extensions/openai/openai-provider.ts extensions/openai/openai-provider.test.ts
- git diff --check origin/main...HEAD
- autoreview clean: no accepted/actionable findings reported
- AWS Crabbox focused remote proof: run_364680d1bff8 / cbx_2456fffafe01
- Earlier same-PR AWS Crabbox live proof: run_1f05ccab368e / cbx_7375c79fcf9b

Known proof gap:
- Final current-code true live-provider smoke was blocked by Crabbox secret hydration, documented in the PR proof comment.
2026-06-07 14:16:00 -07:00
Jason (Json)andGitHub cf378e4cc8 fix(codex): preserve post-tool reasoning liveness
Preserve the Codex post-tool continuation guard for raw reasoning completions and streamed reasoning progress so valid post-tool synthesis stays on the intended completion watchdog instead of falling through to terminal idle behavior.

Verified with focused Codex watchdog tests, test typecheck, scripts lint, autoreview, and CI run 27086637988.

Thanks @fuller-stack-dev.

Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-06-07 00:57:14 -07:00
Jason (Json)andGitHub 36d9241cf7 docs: prefer web_fetch in weather skill (#90250)
* docs: prefer web_fetch in weather skill

* docs: use compact wttr json in weather skill
2026-06-05 14:35:55 -04:00
FullerStackDevandAyaan Zaidi a5ef086e3c test(auto-reply): cover channel-agnostic failure routing 2026-06-03 13:55:36 +05:30
FullerStackDevandAyaan Zaidi a10faca06f fix(auto-reply): surface fatal channel errors 2026-06-03 13:55:36 +05:30
FullerStackDevandAyaan Zaidi 5629c44547 fix(discord): preserve channel-label suppression 2026-06-03 08:03:57 +05:30
FullerStackDevandAyaan Zaidi a8bf14da84 fix(discord): suppress internal agent failure traces 2026-06-03 08:03:57 +05:30
Jason (Json)andGitHub 3ea911558c fix: promote serialized tool calls via repair package
Extracts serialized plaintext tool-call parsing, scrubbing, stream normalization, and standalone promotion into the private internal @openclaw/tool-call-repair package.

Provider wrappers and the embedded runner now share one repair path for standalone serialized tool calls, including adjacent text-block splits, while preserving exact argument bytes when already valid. The public plugin SDK payload module remains as the compatibility facade.

Verification:
- pnpm test src/plugin-sdk/provider-stream-shared.test.ts src/plugin-sdk/tool-payload.test.ts src/agents/embedded-agent-runner/run/attempt.tool-call-normalization.test.ts -- --reporter=verbose
- env -u OPENCLAW_TESTBOX pnpm check:changed
- PR CI: all reported checks green/skipped/neutral on ff0b3c0a5c

Refs #86924

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-05-30 22:34:57 +01:00
89975eea24 feat: pass structured provider error signals to hooks
Summary:
- Pass provider status/code/type descriptors through failover hook classification.
- Keep structured provider hook dispatch scoped, while preserving legacy broad message-hook fallback for unresolved custom provider ids.
- Isolate long commands/infra Vitest lanes in fork workers and update config expectations.

Verification:
- node scripts/run-vitest.mjs src/agents/embedded-agent-helpers/errors-provider-structured-signals.test.ts src/agents/failover-error.test.ts
- OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs src/plugins/provider-runtime.test.ts
- node scripts/run-vitest.mjs src/agents/embedded-agent-helpers/errors-provider-structured-signals.test.ts src/agents/embedded-agent-helpers/provider-error-patterns.test.ts src/agents/failover-error.test.ts src/plugins/provider-runtime.test.ts test/vitest-projects-config.test.ts test/vitest-scoped-config.test.ts src/infra/vitest-config.test.ts
- pnpm tsgo:prod
- autoreview --mode branch --base origin/main --no-web-search --thinking low
- GitHub required dependency-guard: pass
- GitHub Real behavior proof: pass
- GitHub broad CI/checks visible on PR: pass

Co-authored-by: Jason (Json) <fuller-stack-dev@users.noreply.github.com>
2026-05-30 22:14:46 +01:00
Jason (Json)andGitHub 81505ada18 fix(codex): rotate native threads before overflow
Fix Codex app-server native thread overflow recovery and CLI compaction fallback.

- rotate Codex native startup bindings when rollout token pressure leaves too little headroom
- keep byte-size rollout fuses ahead of rollout content reads
- clear stale resumed context-engine bindings only when the stored thread id still matches
- fall back to context-engine compaction when Codex owns/skips native compaction

Verification:
- node scripts/run-vitest.mjs run --config test/vitest/vitest.extension-codex.config.ts extensions/codex/src/app-server/startup-binding.test.ts extensions/codex/src/app-server/run-attempt.context-engine.test.ts extensions/codex/src/app-server/session-binding.test.ts --reporter=verbose
- node scripts/run-vitest.mjs run --config test/vitest/vitest.agents.config.ts src/agents/command/cli-compaction.test.ts --reporter=verbose
- git diff --check origin/main...HEAD
- autoreview --mode branch --base origin/main: clean
- GitHub CI for 466bfbe78c: green

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-05-30 08:07:29 +02:00
Jason (Json)andGitHub 1610b4983f fix: scope jiti transform cache by OpenClaw install
Scope jiti filesystem transform caches for OpenClaw plugin loaders by package version and package.json install metadata so stale transforms cannot survive upgrades or package reinstalls.

Covers the central plugin module loader and the plugin SDK root alias CJS loader, while preserving jiti filesystem-cache env opt-outs and the TMPDIR cwd guard.

Verification: CI run 26601117143 passed; Real behavior proof run 26601445285 passed; CodeQL selected checks passed in run 26601117126; CodeQL Critical Quality plugin-boundary and plugin-sdk-package-contract passed in run 26601117074; OpenGrep PR diff passed in run 26601117137.

Refs: https://github.com/openclaw/openclaw/pull/87745
Thanks @fuller-stack-dev.
2026-05-29 00:17:04 +01:00
Jason (Json)GitHubclawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>takhoffman
0dbdaf98ea fix: release session lock before runtime teardown (#87747)
Summary:
- The PR reorders embedded attempt cleanup to release the session write lock before session/MCP/LSP teardown, treats sessions_yield cleanup as abort-like for flush timing, and adds focused regression tests.
- PR surface: Source +14, Tests +71. Total +85 across 3 files.
- Reproducibility: yes. Source inspection shows current main releases the cleanup lock only after runtime tear ... R body’s terminal proof exercises the same ordering with production cleanup and filesystem lock primitives.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge branch 'main' into fix/session-lock-release-before-teardown

Validation:
- ClawSweeper review passed for head 178192fa0e.
- Required merge gates passed before the squash merge.

Prepared head SHA: 178192fa0e
Review: https://github.com/openclaw/openclaw/pull/87747#issuecomment-4566994280

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-05-28 21:40:06 +00:00
Jason (Json)andGitHub 8a007c987d fix(agents): fallback when generated media handoff locks
Generated-media completions now use the existing idempotent direct-media fallback when active requester wake has already failed and the requester-agent handoff hits a session write-lock-shaped no-response error. Generic requester-agent handoff errors still fail visibly instead of direct-sending after an unknown side effect.

Release-note context: fixes a message-delivery loss path for generated images, music, and video where the artifact had been created but the final handoff could be reported as failed after a session write lock.

Verification:
- GitHub CI run 26601111985 passed at b0be994332.
- Blacksmith Testbox through Crabbox tbx_01ksr2jtt3fnz0zqvwmqq513h7 covered the exact lock fallback and qa-channel generated-media smoke.
- git diff --check origin/main...refs/remotes/pull/87741/head passed before merge.

Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com>
2026-05-28 22:30:13 +01:00
Jason (Json)andGitHub 13cfb77c10 fix: repair local approval resolution (#86771) 2026-05-26 19:56:30 -07:00
Jason (Json)andGitHub ee655f4d94 fix: scrub serialized tool-call text from replies (#86924)
* fix: scrub serialized tool-call text from replies

* fix: consume xmlish tool parameters
2026-05-27 01:16:58 +01:00
532494b12a Preserve xAI usage limit errors in local TUI (#86614)
* fix: preserve xai usage limit errors

* fix: classify actual xai credit errors

* fix: classify xai 429 billing exhaustion

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-27 00:43:55 +01:00
fuller-stack-devandPeter Steinberger 40fa750b4f docs: explain bundled plugin npm override 2026-05-26 23:51:53 +01:00
fuller-stack-devandPeter Steinberger 669bfdd9b0 test: fix bundled install mock typing 2026-05-26 23:51:53 +01:00
fuller-stack-devandPeter Steinberger 771675e826 fix: keep bundled OpenClaw plugins image-owned 2026-05-26 23:51:53 +01:00
5cfa577778 Recover Codex context overflow prompt errors (#85542)
* fix: recover codex context overflow prompt errors

* test: align Codex overflow prompt proof

* test: satisfy manifest registry mock contract

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-25 17:44:48 +01:00
FullerStackDevandPeter Steinberger d5b0174eb1 fix(agents): derive overflow budgets from provider errors 2026-05-25 17:35:47 +01:00