Commit Graph

72638 Commits

Author SHA1 Message Date
Peter Steinberger
6bc06abbfb fix(release): exclude automation changelog credit (#114788)
* fix(release): exclude automation changelog credit

* fix(ci): repair release-note verifier gates
2026-07-27 19:24:47 -04:00
Ayaan Zaidi
b37e819d74 fix(telegram): show progress for queued replies (#114590)
* fix(telegram): preserve queued followup progress
* fix(auto-reply): restore queued progress lifecycle

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-28 08:12:17 +09:00
Peter Steinberger
c1b56266e4 fix(ci): restore production type check (#114787) 2026-07-27 19:07:55 -04:00
joshavant
49e7c12d61 fix(gateway): isolate message route bindings 2026-07-27 17:55:44 -05:00
joshavant
bc1a317e29 fix: preserve message route and account defaults 2026-07-27 17:55:44 -05:00
joshavant
568cf47812 fix(gateway): retain active message route bindings 2026-07-27 17:55:44 -05:00
joshavant
e7ee47af31 fix: preserve idempotency across route defaults 2026-07-27 17:55:44 -05:00
joshavant
454a179f1e test: cover legacy broadcast account planning 2026-07-27 17:55:44 -05:00
joshavant
66aa4b2ba7 fix: preserve broadcast account metadata checks 2026-07-27 17:55:44 -05:00
joshavant
d35cff5edc fix: scope broadcast secrets by account routes 2026-07-27 17:55:44 -05:00
joshavant
21680c33da fix: canonicalize gateway message dedupe routes 2026-07-27 17:55:44 -05:00
joshavant
bd8fc28ae8 test: preserve conversation account binding 2026-07-27 17:55:44 -05:00
joshavant
3f4a23ccb4 fix: canonicalize message action idempotency scope 2026-07-27 17:55:44 -05:00
joshavant
6add1a72ce fix: validate explicit message account selection 2026-07-27 17:55:44 -05:00
joshavant
a4c4f905ff fix: apply outbound hooks before webchat projection 2026-07-27 17:49:12 -05:00
Peter Steinberger
b5bb29a36e fix(code-mode): preserve direct tools and secure suspended runs (#114778)
Preserve trusted policy-required message delivery and native image/computer tools across Code Mode catalogs and provider transports. Keep preferred Gemini capability metadata during live discovery, escape MCP declaration keywords, and reject suspended-run resumes with missing owner identity. Add before-and-after regressions for each user path. Closes #114753.
2026-07-27 18:47:33 -04:00
Peter Steinberger
69e8d406f0 fix: CJK tool results stay within context budgets (#114755)
* fix(agents): make tool-result budgets CJK-aware

Use one weighted, UTF-16-safe budget across live truncation, aggregate recovery, persisted sessions, and the mid-turn context guard. Preserve ASCII behavior, bound mixed blocks, and add a real Gateway QA scenario.\n\nFixes #103847.

* fix(agents): satisfy tool-budget lint

* test(qa): require exact CJK scenario reply

* test(auto-reply): preload reply runtimes without a synthetic turn
2026-07-27 18:35:57 -04:00
SunnyShu
eeeae78bcc fix(agents): clean sessions_yield transcript suffix (#113190)
* [AI] fix(agents): strip trailing assistant messages after sessions_yield artifact removal
* fix(ci): resolve check-lint and check-test-types failures
* fix(agents): simplify sessions_yield cleanup (#113190)
* fix(agents): separate sessions_yield cleanup budgets (#113190) (thanks @SunnyShu0925)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-28 07:30:56 +09:00
Peter Steinberger
e5e77b656a fix: keep dynamic model switching and agent catalogs reliable (#114760)
* fix: keep dynamic model switching and agent catalogs reliable

* test: use schema-valid dynamic model regression fixtures

* test: align utility completion with configured model fallback
2026-07-27 18:30:40 -04:00
Peter Steinberger
0073862e23 fix(cron): protect recreated jobs from stale runs (#114756)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 18:22:34 -04:00
Masato Hoshino
0d32f85155 fix(config): model policy refs padded around the provider/model separator fail config validation (#114116)
* fix(config): accept model policy refs padded around the provider/model separator

Model policy ref validation split refs on / and rejected any component
containing whitespace, so " openai / gpt-5.5 " failed config validation even
though parseProviderModelRef in @openclaw/model-catalog-core trims the
provider and the model remainder and the runtime resolves the ref fine.
Allow-list validation is newer than that resolution path, so configs that
loaded before started failing at load.

Validate the values parseModelCatalogRef returns — the resolved provider and
the whole model remainder — keeping empty-path-segment rejection, so padding
around the separator is accepted while whitespace inside the resolved model id
stays rejected. Wildcard prefixes trim per segment, since their canonical key
is matched on segment boundaries; a padded nested prefix now keeps its
namespace instead of failing validation.

* refactor(config): simplify model policy normalization

* fix(config): normalize padded policy wildcards

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 18:14:34 -04:00
Peter Steinberger
00ccfce510 fix(models): recognize all IPv4 loopback hosts (#114766) 2026-07-27 18:13:55 -04:00
qingminlong
15ab1334f4 fix(ui): clear web push ready timeout (#110879)
* fix(ui): clear web push ready timeout

* fix(ui): clear web push ready timeout

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 18:07:21 -04:00
Peter Steinberger
b4ad1891c2 fix(docs): replace rate-limited star history badge (#114762) 2026-07-27 18:05:56 -04:00
chenyangjun-xy
15ae1ddb93 fix(plugin-sdk): reject malformed UTF-8 in live provider model catalog responses (#111766)
* fix: reject malformed UTF-8 in live provider model catalog responses

Add { fatal: true } to TextDecoder in readLiveModelCatalogJson so
invalid UTF-8 bytes throw a TypeError before JSON.parse instead of
silently becoming U+FFFD.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(plugin-sdk): add fallback proof for malformed UTF-8 in live catalog

Adds a focused test that constructs raw bytes with an invalid 0xFE byte
inside a JSON string value and validates that buildLiveModelProviderConfig
catches the Typeerror and falls back to the static catalog rows.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(pr): classify auto-merge failures without ripgrep

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 18:03:09 -04:00
Peter Steinberger
8207d016d5 fix(cli): install cached shell completions without plugin loading (#114761) 2026-07-27 18:02:47 -04:00
Ayaan Zaidi
5e8555a7c9 fix(telegram): keep media-less unmentioned group messages on the canonical mention gate 2026-07-28 06:57:02 +09:00
Peter Steinberger
d0948c33b5 fix: prevent cron and Workboard lifecycle races (#114744) 2026-07-27 17:55:17 -04:00
Peter Steinberger
428b5cc7df perf(board): stop reading widget html on board.get and calm the ticket poll (#114748) 2026-07-27 17:53:08 -04:00
Jason (Json)
d3026c3b90 fix(doctor): persist config migrations before runtime checks (#114703) 2026-07-27 15:40:04 -06:00
Peter Steinberger
69b54cf13c chore(docs): harden external link audit results (#114746) 2026-07-27 17:37:02 -04:00
Peter Steinberger
ecfebd48a4 test(gateway): flush discussion title eviction without runAllTimers (#114751) 2026-07-27 17:35:25 -04:00
Peter Steinberger
7e8afba703 feat(plugins): mirror local coding sessions to a remote Beam receiver (#114735)
* feat(plugins): mirror local coding sessions to a remote Beam receiver

* fix(plugins): satisfy static gates for the Beam mirror seam

* fix(plugins): import the config type from the narrow contracts subpath

* fix(plugins): require catalog consent and loopback-only plaintext for the Beam mirror
2026-07-27 17:31:34 -04:00
Zakaria Rahali
a04ba3a468 fix(config): compaction.enabled is rejected as invalid config (#114118)
* fix(config): compaction.enabled is rejected as invalid config

Setting agents.defaults.compaction.enabled in openclaw.json made the
whole config fail to load with "agents.defaults.compaction: Invalid
input", so auto-compaction could not be turned off.

The runtime already reads the field (SettingsManager.getCompactionEnabled
returns settings.compaction?.enabled ?? true, and setCompactionEnabled
writes it), and the documented config example in
docs/reference/session-management-compaction.md already shows
"enabled: true". Only the zod schema was missing the key, and the
compaction object is .strict(), so the unknown key rejected the config.

Adds enabled to AgentDefaultsSchema and to AgentCompactionConfig.

Closes #110065

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(config): wire compaction enablement through runtime

Align the accepted compaction.enabled contract across runtime precedence, help, labels, docs, and generated schema baselines.

Co-authored-by: Zakaria Rahali <zakariarahali288@gmail.com>

* test(config): preserve omitted compaction setting

Document the reload lifecycle and lock in project-setting precedence when the OpenClaw config key is absent.

Co-authored-by: Zakaria Rahali <zakariarahali288@gmail.com>

* refactor(config): centralize compaction runtime override

* fix(config): preserve compaction safety guards

* fix(scripts): avoid ripgrep in merge fallback

* docs(config): refresh current main baseline

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 17:23:35 -04:00
LZY3538
903d8bc9d5 fix(imessage): detect remote wrappers when HOME is blank (#111715)
* fix(imessage): detect remote hosts when HOME is blank

* fix(imessage): resolve blank HOME in SSH wrappers (#111715)

Resolve explicitly blank or whitespace HOME values from the operating-system account, preserve configured and unset home contracts, and share the canonical resolver with the iMessage monitor and recovery cursor. Add unmocked subprocess coverage for account-home resolution and working-directory tilde shadows.

Co-authored-by: LZY3538 <liu.zhenye@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 17:14:38 -04:00
Peter Steinberger
960b050add refactor(extensions): remove orphaned shadow trial and retired config aliases (#114709)
* refactor(memory-core): remove orphaned shadow trials

* refactor(qqbot): migrate direct voice upload formats

Release note: QQBot configs using voiceDirectUploadFormats now migrate through openclaw doctor --fix to audioFormatPolicy.uploadDirectFormats at root and account scope. Existing nested uploadDirectFormats values win conflicts, and runtime reads only the nested policy.

* refactor(feishu): migrate tools base alias

Release note: Feishu configs using tools.base now migrate through openclaw doctor --fix to tools.bitable at root and account scope. Existing bitable values win conflicts, and runtime accepts only the canonical key.

* refactor(extensions): remove dead runtime state

* chore(config): refresh bundled channel metadata

* refactor(codex): keep realtime fallback type private

* test(ci): align QA compatibility scenario count
2026-07-27 17:12:41 -04:00
Peter Steinberger
6f7edb3695 fix: make auto-review and PR triage fail safely (#114745)
* fix: make auto-review and PR triage fail safely

* test: cover fail-closed PR merge review gates

* fix: preserve GitHub pending-check review semantics
2026-07-27 17:11:28 -04:00
Peter Steinberger
1c0ccdddcd fix(ui): hide the terminal dock while Settings is open (#114737)
* fix(ui): hide docked terminal and browser panels during settings takeover

* test(ui): align browser panel casts with core test typecheck

* test(ui): split dock suppression coverage
2026-07-27 17:08:52 -04:00
Jason (Json)
c0c55a82fa fix(models): repair invalid generated catalogs before startup (#114697)
* fix(models): repair generated catalog metadata

* fix(models): reread catalog after repair race
2026-07-27 15:03:31 -06:00
Peter Steinberger
c9c22632d0 fix(ui): prevent stale catalog continuations from hijacking chat (#114731)
* fix(ui): prevent stale catalog continuations from hijacking chat

* fix(ui): preserve adopted catalog routes and scoped regression coverage

* test(ui): cover deferred catalog adoption ownership
2026-07-27 17:03:00 -04:00
Peter Steinberger
f0e81b97e8 refactor(model-picker): centralize session apply contracts (#114739)
* refactor(model-picker): centralize session apply contracts

* fix(ci): keep model apply helper result internal

* fix(model-picker): require channel codec opt-in
2026-07-27 16:58:23 -04:00
Jason (Json)
62baf451c1 fix(deepinfra): remove deprecated embedding provider warning (#114727)
* fix(deepinfra): migrate embedding provider registration

* fix(deepinfra): preserve embedding index identity
2026-07-27 14:53:34 -06:00
Peter Steinberger
f4058528e5 refactor(agents): centralize message-tool and direct-visibility predicates (#114720)
* refactor(agents): centralize message-tool and direct-visibility predicates

* refactor(agents): unexport classifyTool and drop redundant union
2026-07-27 16:51:20 -04:00
Peter Steinberger
6d9b2d4d66 refactor(outbound): consolidate fenced cross-channel delivery (#114689)
* refactor(outbound): consolidate fenced delivery ownership

* fix(outbound): break durable-delivery contract cycle

* fix(outbound): align delivery queue owner tests and exports
2026-07-27 16:50:58 -04:00
Peter Steinberger
c656e73065 fix(tui): preserve Unicode during fragmented terminal input [AI-assisted] (#114728)
* fix(tests): run Codex prewarm in exactly one shard

* fix(tui): preserve Unicode in fragmented terminal input

* fix(tui): keep Unicode stress coverage within lint limits
2026-07-27 16:47:49 -04:00
Peter Steinberger
7394262cd1 feat: per-model code-mode capability flags with an "auto" master-switch tier (#114695)
* feat(tools): per-model code-mode capability flags and auto master-switch tier

* feat(anthropic): flag claude-sonnet-4-6 as code-mode preferred

* revert(anthropic): drop claude-sonnet-4-6 from the code-mode preferred set

* test(anthropic): type the manifest compat field in the catalog contract test

* fix(anthropic): carry catalog compat onto hand-built forward-compat model rows
2026-07-27 16:47:41 -04:00
Peter Steinberger
5210e1b4d3 feat(gateway): title untitled sessions when their discussion opens (#114740)
* feat(gateway): title untitled sessions when their discussion opens

* fix(gateway): keep SessionTitleAttempt module-local
2026-07-27 16:46:48 -04:00
Peter Steinberger
0e37f143f5 refactor(slack)!: retire inline interactive directives for typed presentation (#114738)
* refactor(slack): retire inline interactive directives

Release note: Slack configs using channels.slack.capabilities.interactiveReplies, including per-account settings, are removed by openclaw doctor --fix. Slack-only [[slack_buttons:...]] and [[slack_select:...]] markup is no longer parsed; emit typed presentation buttons and selects instead.

* docs: refresh Slack docs map
2026-07-27 16:41:00 -04:00
Peter Steinberger
02e4dceaa8 fix(ui): show a simple channel settings view with a flip to advanced (#114741)
* test(ui): make channel settings renderable in the mock dev server

* fix(ui): hide advanced channel settings behind the shared advanced tier

* fix(ui): widen the tier renderer callback to lit's nothing

* fix(ui): keep the advanced collapse control on advanced-only channel forms

* docs: note the shared advanced tier on channel settings
2026-07-27 16:40:15 -04:00
Peter Steinberger
fbb3525368 fix(ui): show a simple channel settings view with a flip to advanced (#114741)
* test(ui): make channel settings renderable in the mock dev server

* fix(ui): hide advanced channel settings behind the shared advanced tier

* fix(ui): widen the tier renderer callback to lit's nothing

* fix(ui): keep the advanced collapse control on advanced-only channel forms

* docs: note the shared advanced tier on channel settings
2026-07-27 16:39:23 -04:00