Commit Graph

66965 Commits

Author SHA1 Message Date
ooiuuii
1e7694a8a5 fix(whatsapp): serialize overlapping Web sends (#99050)
* fix(whatsapp): serialize web sendMessage calls

* fix(whatsapp): make send serialization socket-owned

* test(qa): narrow live gateway connection fields

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 02:32:36 -04:00
Peter Steinberger
f052a2f23b feat(macos): animate the OpenClaw mascot in About and onboarding
Ports the animated OpenClawMascotView to the macOS app: the About pane
icon and the onboarding hero now render the Canvas+TimelineView mascot
(float/blink/antenna-wiggle/claw-snap, still under Reduce Motion)
instead of the static app icon.

The view moves from apps/ios into the shared OpenClawChatUI target of
OpenClawKit so iOS and macOS consume one copy; the iOS lint filelist
tracks the moved file.
2026-07-04 23:20:11 -07:00
Peter Steinberger
9b60e1429d fix(control-ui): declutter Settings and make Simple/Advanced switch persistent (#100147)
Quick Settings read as competing panels and the Appearance card wrapped/clipped its segmented controls in a narrow side column. Switching to Advanced also had no visible way back — the only return was a "Quick Settings" link buried in the accordion nav.

- Replace the one-way "Advanced" button and buried accordion back link with a persistent Simple/Advanced switch in the page header, mirrored into an in-body row at the mobile breakpoint where the header is hidden.
- Give Appearance a full-width auto-fit grid so Theme/Mode/Roundness/Text size never wrap or clip.
- Drop the duplicate Context Profile side panel for a compact summary line, and only show "Pending" when a change is actually staged (pass savedConfigObject).
- Remove the redundant in-page "Quick Settings" heading and unused preset copy.

Presentation-only within ui/src/pages/config; net -354 non-test LOC. Closes #100145.
2026-07-05 02:20:02 -04:00
Peter Steinberger
c9614e96e6 fix(tui): block unsupported local commands (#100188) 2026-07-05 02:16:51 -04:00
Vincent Koc
10877c1573 test(qa): tolerate delayed MCP channel event poll 2026-07-05 08:09:32 +02:00
Peter Steinberger
062f88e3e3 refactor: extract reusable AI runtime package (#99059)
* refactor: extract reusable AI runtime package

* refactor: complete AI provider relocation

* refactor: keep llm core internal

* refactor(ai): make @openclaw/ai self-contained with host policy ports

Move pure transport helpers (tool projections, strict-schema normalization,
prompt-cache boundary, stream guards, anthropic/openai compat, request
activity) from src into packages/ai; move utf16-slice into
normalization-core. Inject host policy (guarded fetch, redaction,
strict-tool defaults, diagnostics logging) through AiTransportHost with
inert library defaults installed by src/llm/stream.ts. Narrow the public
barrel to instance-scoped createApiRegistry/createLlmRuntime; the
process-default runtime moves behind internal/ and
registerBuiltInApiProviders takes an explicit registry. Delete the
src/llm/api-registry re-export facade.

* fix(ai): teach node, jiti, and vite resolvers the @openclaw/ai and utf16-slice subpaths

The workspace alias tables in root-alias.cjs, plugin-sdk-native-resolver,
sdk-alias, the shared vitest config, and the Control UI vite config only
knew @openclaw/llm-core; Node-side plugin loading resolved @openclaw/ai
through the pnpm symlink to the unbuilt dist (checks-node-compact CI
failures), and the Control UI build broke on the new
normalization-core/utf16-slice subpath.

* chore(ui): drop leftover service-worker debug logging

* build(release): ship @openclaw/ai with its own shrinkwrap and honest dependency set

packages/ai declares only its six real runtime deps (kysely, chalk, json5,
tslog, zod, fs-safe, and proxyline were never imported); orphaned root deps
removed. generate-npm-shrinkwrap now treats publishable packages/* like
publishable plugins so the AI tarball pins its transitive tree even though
workspace deps are omitted from the root shrinkwrap. knip learns the
package entry points; the tsdown dts neverBundle option moves to its
documented deps.dts home; the README documents the no-semver internal/*
contract and host ports.

* docs(ai): add minimal external-consumer example app

examples/ai-chat consumes only the public @openclaw/ai surface (built dist
via the workspace link): isolated runtime, built-in provider registration,
one streamed completion. Supports Anthropic/OpenAI via env keys and a
keyless local Ollama target; live-verified against Ollama.

* docs(ai): document the @openclaw/ai package and workspace shrinkwrap boundary

* chore(check): include examples/ in duplicate-scan targets

* fix: emit normalization package subpaths

* fix: complete AI package boundary artifacts

* fix: align AI package boundary contracts

* fix(ci): stabilize package release contracts

* test: align documentation contract checks

* test: keep cron docs guard aligned

* test: align restored docs contract guards

* test: follow upstream docs contracts

* docs: drop superseded talk wording
2026-07-05 01:56:40 -04:00
Peter Steinberger
913311845e fix(browser): accept no-preference in openclaw browser set media
The /set/media control route accepts dark|light|no-preference|none, but the
CLI rejected no-preference, so prefers-color-scheme: no-preference could not
be emulated from the CLI. Align the CLI argument, validation, and error text
with the route contract and update the browser-control docs media line.
2026-07-05 06:54:13 +01:00
Peter Steinberger
3cf0d00d90 docs: align source contract wording (#100186) 2026-07-05 01:41:40 -04:00
Vincent Koc
c29054a7dc chore(plugin-sdk): refresh API baseline hash 2026-07-05 07:30:57 +02:00
Peter Steinberger
53bdac249d docs: restore source-backed contract details (#100182) 2026-07-05 01:26:25 -04:00
Vincent Koc
214ee02359 test(docs): align rewrite guards with current wording (#100183) 2026-07-04 22:23:10 -07:00
Vincent Koc
76d686cf61 fix(auto-reply): persist first command session updates 2026-07-05 07:09:53 +02:00
Peter Steinberger
1d9fb2773f feat(ui): surface mobile pairing shortcuts (#100157) 2026-07-05 00:47:27 -04:00
Bartok
5dff031467 fix(plugins): stage git plugin clone on target filesystem to avoid EXDEV (#99896)
* fix(plugins): stage git plugin clone on target filesystem to avoid EXDEV

Git plugin installs cloned into os.tmpdir() then atomically renamed the
staged repo into ~/.openclaw/git/. When /tmp and the state dir live on
different filesystems (common in Docker with bind-mounted volumes), the
rename failed with EXDEV: cross-device link not permitted.

Stage the clone under the managed git root (same filesystem as the
destination) so the final rename never crosses devices. Falls back to
os.tmpdir() when the managed root cannot be prepared, preserving prior
behavior.

Closes #99885

* fix(plugins): isolate git clone staging per install

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-04 21:40:20 -07:00
Peter Steinberger
f7d7148cf0 docs: rewrite published docs grounded in current source (#100142)
Source-grounded rewrite of 529 published docs pages with per-unit information-loss verification: 1,713 factual corrections cited to src/**, generated surfaces regenerated, frontmatter titles preserved for i18n, release notes pages untouched. All docs gates green.

Closes #100141
2026-07-05 00:32:47 -04:00
github-actions[bot]
e069cb26f7 chore(i18n): refresh native locales 2026-07-05 04:04:27 +00:00
Vincent Koc
02af382a06 fix(ci): pass release metadata refs as options 2026-07-05 05:58:12 +02:00
Vincent Koc
2bb07361e6 chore(changelog): keep normal fix notes generated 2026-07-05 05:54:16 +02:00
Peter Steinberger
1ab218fda0 fix(agent): hide code mode wait progress (#100164) 2026-07-05 04:52:09 +01:00
Peter Steinberger
d3641421a4 fix(whatsapp): replace refreshed terminal QR (#100159) 2026-07-04 23:42:26 -04:00
truiem-bot
420b3cdd29 feat(slack): support per-channel replyToMode (#82253)
* feat(slack): support per-channel replyToMode

* fix(slack): align per-channel threading contexts

* fix(slack): preserve queued channel reply mode

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 23:41:24 -04:00
Vincent Koc
451190d625 fix(mobile): authenticate terminal page with stored operator token 2026-07-05 05:39:12 +02:00
WhatsSkiLL
1c83c2d4a6 fix(android): prevent gateway setup button clipping (#100090)
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-04 23:31:39 -04:00
Vincent Koc
4212de9e08 fix(telegram): count thinking token progress in collapse summary 2026-07-05 05:23:16 +02:00
Peter Steinberger
8251c4094a fix(ui): align activity error badges (#100163)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 20:18:20 -07:00
Peter Steinberger
851156af3b feat: animate the OpenClaw mascot across web, iOS, and Android
Ports the openclaw.ai hero mascot animation (body float 4s, eye blink 3s,
antenna wiggle 2s, staggered claw snaps 4s) to every product surface that
shows the logo:

- web: ui/public/favicon.svg now carries SMIL animations, so every <img>
  usage (login gate, sidebar brand, agent avatar fallback) animates with
  no markup changes; CSS animations do not run in <img>-loaded SVGs.
- iOS: new OpenClawMascotView renders the canonical 120x120 vector via
  Canvas + TimelineView (30fps, honors Reduce Motion); OpenClawProMark
  uses it in onboarding, sidebar, and command center. Static PNG imageset
  deleted (watch app keeps its own copy).
- Android: new OpenClawMascot composable (PathParser + infinite
  transitions, honors the OS animator scale) replaces the static vector
  drawable in onboarding and the chat/shell/voice headers, with tint
  support for the monochrome header silhouettes. Drawable deleted.
2026-07-04 20:14:34 -07:00
Peter Steinberger
fcd7eb6130 feat(android): terminal settings screen hosting the gateway terminal page 2026-07-04 20:07:56 -07:00
Peter Steinberger
211e0d7263 feat(ios): Terminal hub destination embedding the gateway terminal page 2026-07-04 20:07:19 -07:00
Peter Steinberger
9c7848928f feat(control-ui): full-screen terminal-only view mode for mobile WebViews 2026-07-04 20:07:18 -07:00
Peter Steinberger
bafdec9868 fix: preserve codex transcript ownership (#100160)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 20:04:43 -07:00
WhatsSkiLL
1a23b266ef [AI-assisted] fix(android): polish Voice text truncation (#100060) 2026-07-04 22:59:42 -04:00
Peter Steinberger
2ec765edea fix(auto-reply): deliver model directive acknowledgements (#100151) 2026-07-05 03:57:11 +01:00
Peter Steinberger
4d181b62a9 fix(status): hide healthy plugin summary (#100143)
* fix(status): hide healthy plugin summary

* fix(status): hide healthy plugin summary
2026-07-04 22:55:23 -04:00
Peter Steinberger
194d85e891 fix(ui): chat workspace panel leaves an empty gap when collapsed (#100088)
* fix(ui): remove reserved gap when chat workspace rail is collapsed

* fix(ui): remove reserved gap when chat workspace rail is collapsed
2026-07-04 22:53:27 -04:00
Ayaan Zaidi
b34c188f8f fix(agents): surface Claude CLI thinking token progress 2026-07-04 19:43:11 -07:00
Ayaan Zaidi
32d791fee3 fix(auto-reply): bridge queued CLI reasoning streams 2026-07-04 19:43:11 -07:00
Jeff Sutherland
1945a8e5de Warn on shared Slack Socket Mode connections (#79938)
* Warn on shared Slack Socket Mode connections

* fix(slack): harden shared socket diagnostics

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 22:41:18 -04:00
cxbAsDev
f400eb718f fix(tui): isolate embedded event listener failures (#100117)
* fix(tui): suppress unhandled rejection from async agent event handler

* fix(tui): isolate embedded event listener failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 22:40:49 -04:00
Vincent Koc
58d707fbed fix(infra): avoid session warning duration double rounding 2026-07-05 04:37:43 +02:00
Gio
55683d23e3 test(policy): avoid Object.groupBy in fix metadata coverage 2026-07-04 19:34:17 -07:00
Gio
ab90e3a922 chore(policy): normalize fix recommendation formatting 2026-07-04 19:34:17 -07:00
Gio Della-Libera
28316c8c07 policy: keep recommendations out of attestations 2026-07-04 19:34:17 -07:00
Gio Della-Libera
0af35c1477 policy: keep fix recommendations policy-owned 2026-07-04 19:34:17 -07:00
Gio Della-Libera
6f7d1427c6 policy: emit fix recommendations in json 2026-07-04 19:34:17 -07:00
Gio Della-Libera
f466ebc00c policy: classify doctor fix recommendations 2026-07-04 19:34:17 -07:00
Amir
1efc7270cd fix(cli): include aliases in shell completion (#99419)
* fix(cli): shell completion omitted command aliases like capability, chat, and cron create

* fix(cli): route the dead exec-approvals root alias and single-source alias path expansion

* fix(cli): complete nested aliases in Bash

Co-authored-by: Jack-dev-ops <chen.zegui@xydigit.com>

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Jack-dev-ops <chen.zegui@xydigit.com>
2026-07-04 19:33:00 -07:00
Ayaan Zaidi
eb2f9bece7 fix(agents): persist spill metadata for elision recovery
Preserve fullOutputPath plus partial-spill metadata when oversized tool-result details are summarized for persistence. This keeps aggregate elision from relabeling capped or source-truncated web_fetch spill files as complete after reload.
2026-07-04 19:26:16 -07:00
Ayaan Zaidi
235f18def5 fix(agents): spill truncated web fetch output
Write truncated web_fetch extracted content to owner-only private temp files using the shared Full output footer contract. Spills use the wrapped untrusted-content form, cap recoverable content at 2,000,000 chars, and label capped or source-truncated spills as partial instead of full output.
2026-07-04 19:26:16 -07:00
Ayaan Zaidi
ad826faf0d fix(agents): preserve spill pointers through tool-result elision
Keep aggregate elision recoverable by preserving existing spill pointers only when the original model-visible footer already disclosed the path. This commit also keeps partial-spill markers honest, handles JSON-escaped footers, and resolves full-clear markers from the original tool-result message after partial aggregate shrinking.
2026-07-04 19:26:16 -07:00
Peter Steinberger
adf25f853c fix(ui): add chat transcript top spacing (#100144)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-04 19:24:25 -07:00