Commit Graph
70866 Commits
Author SHA1 Message Date
Peter SteinbergerandGitHub a1f43b218a feat(ui): offer page refresh on protocol-mismatch failure (#111772) 2026-07-20 02:31:40 -07:00
VectorPeakGitHubchatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>Peter Steinberger
3ef2d8cf05 fix(sms): trim prefixed phone number spacing (#111111)
Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 02:29:06 -07:00
Peter SteinbergerandGitHub 7defd4a7b4 refactor(android): split offline client databases (#111710)
* refactor(android): split offline client databases

* chore(android): refresh native i18n inventory

* test(gateway): close databases before transcript cleanup
2026-07-20 02:28:02 -07:00
Peter SteinbergerandGitHub 473f2aca33 fix(gateway): honor session title model routing (#111757)
Route automatic dashboard titles through the effective session model and auth profile while preserving explicit cross-provider utility ownership and the existing generic title fallback.
2026-07-20 02:19:57 -07:00
Peter SteinbergerandGitHub 9056c43368 docs(gateway): add client-building and embedding guides (#111726)
* docs(gateway): add client-building and embedding guides

* docs(gateway): harden package rollout guidance
2026-07-20 02:12:52 -07:00
Peter SteinbergerandGitHub fd081d6521 fix(ui): keep Codex commentary visible after runs (#111648)
* fix(ui): keep Codex commentary visible

* fix(codex): preserve commentary transcript ordering

* fix(ui): preserve commentary retention opt-out
2026-07-20 02:10:56 -07:00
2c05365fbd fix(plugins): decode self-hosted discovery JSON with fatal UTF-8 validation (#111113)
* fix(plugins): decode self-hosted discovery JSON with fatal UTF-8 validation

* ci: retrigger checks

* refactor(plugins): share self-hosted JSON decoding

Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 02:07:45 -07:00
Peter SteinbergerandGitHub 922240568a fix(doctor): check every configured agent (#111758) 2026-07-20 02:05:53 -07:00
Peter SteinbergerandGitHub 5d80b62d21 fix(ui): nudge stale tabs after gateway updates (#111619)
* fix(ui): nudge stale tabs after gateway updates

* fix(ui): resolve external packages in worktrees
2026-07-20 01:51:22 -07:00
Wynne668andGitHub 72f77364b3 fix(google): keep embedding batch waits within timeout (#111674) 2026-07-20 11:46:06 +03:00
Peter SteinbergerandGitHub 6f2fa019bd fix: honor configured default agent in consults (#111749) 2026-07-20 01:43:00 -07:00
Jason (Json)andGitHub 779cf40d46 feat(dashboard): harden transcript MCP App pinning (#111748) 2026-07-20 02:42:00 -06:00
Pavan Kumar GondhiandGitHub 391c3bcb17 fix(ui): neutralize Usage CSV text cells [AI] (#111653)
* fix(ui): neutralize usage csv text cells

* test(ui): align usage csv fixture types

* fix(ui): preserve benign usage csv whitespace
2026-07-20 14:08:33 +05:30
Pavan Kumar GondhiandGitHub 1de4a099ca fix: keep exec approval carriers scoped [AI] (#111652)
* fix: unwrap shell argv carriers for exec approvals

* fix: constrain shell carrier unwraps

* fix: block command path-search carriers
2026-07-20 14:06:03 +05:30
Peter SteinbergerandGitHub 0e62293104 fix(ui): keep sidebar session titles aligned (#111698)
* fix(ui): stabilize sidebar session indicators

* test(ui): update sidebar leading-slot assertion
2026-07-20 01:27:25 -07:00
Peter SteinbergerandGitHub 343cfba638 fix(clickclack): private API base for gated hostnames and single discussion-provider registration (#111724)
* fix(clickclack): split API base and refresh discussion provider

* chore: regenerate bundled channel config metadata and docs map for the apiBaseUrl key
2026-07-20 01:27:13 -07:00
Peter SteinbergerandGitHub 629de998f9 feat(system-agent): agentic cached caretaker greeting with quick actions (#111615)
* feat(system-agent): agentic cached caretaker greeting with quick actions

* test(gateway): pin caretaker greeting in session-ownership tests

* fix(system-agent): offer agent handoff chip only when a model is available

* fix(ci): typecheck narrowing, lint, and knip gates for greeting module

* fix(system-agent): reject structured greeting output on every retained line

* test(gateway): split caretaker welcome tests under the max-lines gate
2026-07-20 01:21:09 -07:00
Peter SteinbergerandGitHub 6eee1dccfc fix(cloud-workers): reclaim sessions after workspace conflicts (#111714)
* fix(cloud-workers): make reclaim failures retryable

* chore: leave changelog to release flow

* chore: fix cloud reclaim lint

* fix(cloud-workers): preserve committed reclaim recovery
2026-07-20 01:16:07 -07:00
Peter SteinbergerandGitHub 83e78d8681 fix(ui): quiet the reconnect-wait queue row and hide its raw transport error (#111703) 2026-07-20 01:11:27 -07:00
Peter SteinbergerandGitHub 248726fafd feat(anthropic): import Claude Desktop custom groups (#111644)
* feat(anthropic): import Claude Desktop custom groups

* fix(anthropic): resolve Claude Desktop groups from LevelDB entries

Group discovery regexed whole decompressed blocks, so matches were not
attributable to a Local Storage value and byte order decided the winner.
On a real 5.4MB store that mislabelled 59 of 159 sessions, surfacing a
mojibake label spliced out of Snappy copy-record bytes.

Parse SSTable entries properly instead: prefix-delta keys bounded by the
restart array, newest internal sequence per user key (honoring deletions),
and record scanning confined to a single value. Values are normalized so
Chromium's UTF-16 form scans like Latin-1, and unflushed WAL writes keep
precedence over SSTables.

Prod LOC grows ~77; it buys structural correctness in place of ordering
luck, and folds the old index-only walk into one shared entry decoder.

Verified against the live store: 159 assignments, 0 mislabelled versus an
independent entry-level ground truth, 0 control-character labels.

* fix(ui): sort custom session groups ahead of project groups

Custom groups were pushed into the section list as encountered, so their
position depended on roster order rather than the documented behavior;
the existing test only passed because its fixture happened to be ordered
that way. Collect custom and project groups separately and concatenate,
and assert the guarantee with a reversed-input case.

* fix(anthropic): widen LevelDB fixture key type for test typecheck

The prefix-delta helper assigned a Buffer into a Buffer-typed accumulator
whose generic argument differed, which tsgo rejects in the test lane.

* chore(anthropic): drop release-owned changelog edit from the PR

CHANGELOG.md is generated at release time, so a normal PR must not carry
an entry. The release-note context lives in the feature commit message and
the PR body instead.
2026-07-20 00:30:37 -07:00
Peter SteinbergerandGitHub a971188a6d build(client): make @openclaw/gateway-client publishable to npm (#111707) 2026-07-20 00:23:36 -07:00
Peter SteinbergerandGitHub 3e14caa2bd fix(ui): give markdown list items more breathing room (#111693) 2026-07-20 00:15:04 -07:00
Peter SteinbergerandGitHub f5940ee92d fix(ui): make stale-chunk Reload survive the gateway restart (#111670)
* fix(ui): make stale-chunk Reload survive the gateway restart

The 'A new version is available' banner appears precisely because the
gateway was just updated — so when the user clicks Reload, that gateway
is usually still restarting. The handler probed once and, on failure,
silently fell back to revalidating the same replaced chunk, so the
button looked dead and a manual hard reload was the only way out.

Poll the document probe until the gateway answers (bounded, so an
unreachable gateway still degrades to the recoverable panel error
rather than a fatal navigation), and show a disabled 'Reloading…' state
while waiting.

* fix(ui): enforce the reload wait deadline locally

The bound was only checked after each probe settled, so it relied on the
probe timing itself out. The default probe does self-abort, but a
caller-supplied one need not, and a probe that never settles would leave
the Reload button disabled forever. Race each probe against the
remaining deadline instead.

* fix(ui): satisfy lint and deadcode gates for the reload retry

CI caught two things local oxlint does not: the wait default returned
the timer id from a Promise executor (eslint no-promise-executor-return),
and retryStaleChunkReload became an unused export once the lazy-route
button moved to the polling variant.

Wrap the executor body, and collapse the two near-identical retry paths
into one: the polling helper with timeoutMs: 0 is exactly the old
single-shot behavior, which the stylesheet-recovery banner keeps.

* fix(ui): keep the reload wait bounded across interval waits

The deadline was checked before the interval wait, so a wait that
carried past it left the next iteration taking the unbounded
single-shot branch — a probe that never settles would then strand the
disabled Reload button past its own bound. Only the first attempt may
probe from outside the window.
2026-07-20 00:11:01 -07:00
Peter SteinbergerandGitHub 873c2a0c32 fix(ui): keep completed work expanded outside dashboard sessions (#111640) 2026-07-20 00:08:53 -07:00
Peter SteinbergerandGitHub 46ceb21b89 fix(control-ui): keep OpenClaw in settings (#111686) 2026-07-20 00:00:23 -07:00
Peter SteinbergerandGitHub 8a5b4af660 fix(gateway): make agent deletion transactional (#111678)
* fix: make agent deletion transactional

* fix: align deletion proof with config IO

* test: align deletion mocks with strict types

* test: remove stale cron helper

* chore: drop changelog entry and unshipped-schema compat branches

* fix: preserve reclaimed agent state

* fix: make agent deletion recovery durable

* fix: make agent cleanup symlink-safe

* fix: retain failed agent database ownership

* fix: harden agent deletion path ownership

* fix: persist agent cleanup completion

* docs: name the local trust-boundary bound on deletion fencing

* fix: satisfy agent deletion CI guards
2026-07-19 23:58:02 -07:00
Peter SteinbergerandGitHub 34f942e89d fix(agents): tolerate auth mutation before first prepared-model-runtime owner (#111627) (#111701) 2026-07-19 23:53:53 -07:00
Peter SteinbergerandGitHub e2e394e1ab fix(ui): give roster rows their avatar-text gap and add presence mock fixtures (#111689)
* fix(ui): add avatar-text gap in roster menu and presence mock fixtures

* refactor(ui): keep presence snapshot helper out of the connect auth hunk
2026-07-19 23:38:40 -07: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
Peter SteinbergerandGitHub 6b80b01369 chore(pr): warn when ci-dispatch targets a remote head behind local work (#111694) 2026-07-19 23:24:29 -07:00
Peter SteinbergerandGitHub fef846a3f0 build(protocol): make @openclaw/gateway-protocol publishable to npm (#111664)
* build(protocol): make @openclaw/gateway-protocol publishable to npm

* chore(mxc): align package version with release train

* fix(release): support gateway-only core packages
2026-07-19 23:18:24 -07:00
8e40acbbb7 fix(control-ui): tighten About build grid spacing (#111532)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 23:18:12 -07:00
Peter SteinbergerandGitHub 401ef9770e fix(ui): restyle chat pane error banner as a compact centered alert (#111681) 2026-07-19 23:12:03 -07:00
Peter SteinbergerandGitHub e67fda8ec8 fix(clickclack): accept omitted nullable managed-channel fields and auto-open the discussion panel (#111685)
* fix(clickclack): accept omitted nullable managed-channel fields and auto-open the discussion panel

* fix(ui): open the discussion when write access arrives after it resolved
2026-07-19 23:10:29 -07:00
Peter SteinbergerandGitHub f67e55ac00 refactor: unify the embedded-agent fallback run-entry across all four pipelines (#111608)
* refactor(agents): unify fallback run-entry across channel, command, memory, and follow-up paths

* refactor(agents): keep run-entry contracts module-local

* test(reply): derive run-entry params type locally
2026-07-19 23:08:55 -07:00
Peter SteinbergerandGitHub 250e636ffd fix(onboard): reject invalid setup options before writes (#111680)
* fix(onboard): validate setup options before mutation

* fix(onboard): keep flow helper type local
2026-07-19 23:05:23 -07:00
8c9ecd9242 fix(process): use a valid PTY type when TERM is blank (#111261)
* fix(process): ignore blank PTY terminal names

* fix(process): normalize PTY terminal identity

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

* fix(process): keep PTY default private

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 22:58:24 -07:00
Peter SteinbergerandGitHub 104128dd32 chore(pr): dev-wrapper opt-in — advisory subcommands may dogfood modified wrappers (#111656)
* chore(pr): dev-wrapper opt-in — advisory subcommands may dogfood modified wrappers

* fix(pr): hermetic dev-wrapper test fixture and type narrowing
2026-07-19 22:58:15 -07:00
Peter SteinbergerandGitHub 6e19c36d41 feat(channels): batch 2 producers drop media placeholder bodies (#111665)
* feat(channels): batch 2 producers drop media placeholder bodies

Media-placeholder program batch 2: Discord, Feishu, and MSTeams stop
minting <media:kind> placeholder bodies. Primary bodies carry captions
only; native resources produce ordered structured facts with type-only
facts for failures/rejections (batch-1 alignment contract). Discord
stickers travel as native kind "sticker" (not MIME-derivable); text
carriers (forwarded snapshots, room history, thread starters, pending
text) render via formatMediaPlaceholderText. Feishu audio preflight and
MSTeams unavailable selection move from body-string equality to
structured facts; dead placeholder payload builders deleted.

* test(discord): make allowlist policy explicit
2026-07-19 22:48:32 -07:00
Peter SteinbergerandGitHub 71513436f9 fix(ui): hide system agent from agent roster (#111677) 2026-07-19 22:46:02 -07:00
Peter SteinbergerandGitHub a22ede72e4 fix(ui): redesign the who's-online roster menu (#111668) 2026-07-19 22:24:53 -07:00
e45ebac97a fix(media): m4a/AAC audio files from non-Apple sources are misidentified as video/mp4 and excluded from audio workflows (#111177)
* fix(media): preserve audio hints for isom-brand m4a/AAC files misidentified as video/mp4

* fix(media): correct ambiguous M4A aliases

Co-authored-by: 潘晓波0668000512 <pan.xiaobo@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 22:18:23 -07:00
Peter SteinbergerandGitHub bdf71d7d98 refactor(apple): unify offline client databases (#111598)
* refactor(apple): unify offline client databases

* refactor(apple): remove dead cache APIs

* fix(apple): satisfy native storage gates

* fix(apple): sync generated localization catalog

* Revert "fix(apple): sync generated localization catalog"

This reverts commit d0f5e7b74932e98ccc5f1984840e8f9d545edc2d.

* fix(i18n): keep source validation pre-merge

* test(macos): isolate flaky suite state

* test(macos): isolate log locator on main actor
2026-07-19 22:14:12 -07:00
Peter SteinbergerandGitHub 69ee7127c0 fix(ui): prevent chat jump when the working claw appears (#111642)
* fix(ui): smooth working claw transition

* test(ui): satisfy chat transition checks
2026-07-19 22:13:42 -07:00
Peter SteinbergerandGitHub 8f9e42f2a9 fix(cli): report honest SQLite store labels and consistent build SHA in help (#111659) 2026-07-19 22:07:44 -07:00
1508a58674 fix(media): case-sensitive Content-Type checks bypass header extension and image-header safety rules (#111184)
* fix(media): normalize Content-Type casing in header extension and image-header checks

* test(media): consolidate MIME case coverage

Co-authored-by: 潘晓波0668000512 <pan.xiaobo@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 21:53:13 -07:00
Jesse MerhiandGitHub ce9e393196 fix: make Back work within channel setup (#108007)
* fix: support Back within channel setup

* docs: note channel setup Back navigation

* fix: keep navigation outcome type private

* style: format navigation outcome type

* chore: leave changelog to release prep
2026-07-20 14:34:05 +10:00
94a2494570 fix(mattermost): probe hangs past deadline when DNS preflight stalls (#111314)
* fix(mattermost): bound probe preflight with guard timeoutMs

* test(mattermost): tighten preflight timeout proof

Co-authored-by: hugenshen <hu.genshen@xydigit.com>

* test(mattermost): isolate preflight timeout path

Co-authored-by: hugenshen <hu.genshen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 21:31:05 -07:00
Peter SteinbergerandGitHub 1ee42427ea fix(cli): surface gateway→embedded fallback session divergence in --json output (#111645) 2026-07-19 21:26:58 -07:00