Commit Graph

20014 Commits

Author SHA1 Message Date
Josh Lehman 179cb1b4cb fix(cron): restrict scheduled authority to Codex owner 2026-08-24 18:37:39 -07:00
Josh Lehman 46312a4927 fix(cron): seal scheduled tool authority at host boundary 2026-08-24 16:06:31 -07:00
Josh Lehman 411fce065f fix(cron): read legacy authority rows before migration 2026-08-24 13:51:19 -07:00
Josh Lehman 7094cda2f9 fix(cron): preserve scheduled bindings through normalization 2026-08-24 13:51:19 -07:00
Josh Lehman f44741691f fix(cron): preserve authority across downgrades 2026-08-24 13:51:19 -07:00
Josh Lehman d3e30d1ab9 fix(cron): bind projected exec authority to Codex 2026-08-24 13:51:19 -07:00
Josh Lehman e51ad6845e fix(cron): preserve Codex trigger exec authority 2026-08-24 13:51:19 -07:00
Peter Steinberger bea8740981 fix(matrix): show edited messages in replies and thread context (#128763)
* fix(matrix): use edited messages in reply and thread context

* fix(matrix): narrow bundled edit records without assertions
2026-08-24 13:38:57 -07:00
Peter Steinberger 2a39c50227 fix: make full verification hermetic across local environments (#128777)
* test: harden full verification fixtures

* test: resolve main fixture overlap
2026-08-24 13:26:00 -07:00
Peter Steinberger 9a15d4cbf9 fix(discord): keep forum attachments and receipts in their first thread (#128765)
* fix(discord): keep structured forum attachments in one thread

* test(discord): type forum delivery fixture sender
2026-08-24 13:17:06 -07:00
Peter Steinberger 86d2c35e2e fix(feishu): preserve captions after inferred voice degrades (#128771) 2026-08-24 10:38:26 -07:00
Peter Steinberger 56664c5cfb fix(codex): preserve GitHub tool capability (#128807) 2026-08-24 10:12:19 -07:00
ClawSweeper 29f39affc2 fix(agents): resolve terminal from admitted gateway (#128348)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-08-24 12:46:14 -04:00
Peter Steinberger a23e77b61a refactor(parallel): share search request lifecycle (#128775)
* refactor(parallel): share search request lifecycle

* refactor(parallel): keep request helpers private
2026-08-24 08:35:57 -07:00
wangmiao0668000666 c61bc221b0 fix(nextcloud-talk): dispose webhook auth rate limiter on monitor stop (#126908)
* fix(nextcloud-talk): dispose webhook auth rate limiter on monitor stop

The monitor created its webhook auth rate limiter with a prune interval
but never called dispose(), leaking one interval plus entry maps per
stop/start cycle (boot, config hot reload, health-monitor restart).
dispose() is idempotent and callers own the timer lifecycle, matching
how core gateway callers release their limiters on shutdown.

* fix(nextcloud-talk): release webhook limiter in all lifecycle owners

Preserve the contributor stop-time limiter disposal while routing the shared webhook harness and both direct-listener fixtures through the same canonical stop owner, including failure cleanup.

Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-24 07:57:58 -07:00
Peter Steinberger ec091478fc refactor(slack): reuse canonical interactive block renderer (#128760) 2026-08-24 07:55:00 -07:00
Ayaan Zaidi d50dbfc448 fix(anthropic): show Claude questions as interactive prompts (#128729)
Route Claude Agent SDK AskUserQuestion through OpenClaw's shared structured-input flow across the Control UI and existing channel fallback surfaces.

Fixes #81099.
2026-08-24 19:01:35 +05:30
Peter Steinberger 15e9bea3cb refactor(telegram): unify interactive keyboard rendering (#128728)
* refactor(telegram): unify interactive keyboard rendering

* chore(telegram): ratchet removed keyboard assertion
2026-08-24 06:24:36 -07:00
Peter Steinberger 018b01e500 refactor(firecrawl): reuse canonical provider runtime helpers (#128717) 2026-08-24 06:01:49 -07:00
Peter Steinberger 5e438e9d0b fix(clickclack): stop queued messages after account shutdown (#128672)
* fix(clickclack): fence inbound callbacks after account shutdown

* test(clickclack): reuse shared deferred helper in shutdown coverage
2026-08-24 05:50:44 -07:00
Peter Steinberger 97b13b1735 fix(llama-cpp): preserve managed local embedding batch capacity (#128721)
Preserve the contributor fix from #127288 and its original Git author. Thanks @cantoblanco for the original issue and pull request.

Co-authored-by: Alex <alex@example.com>
2026-08-24 05:46:59 -07:00
Peter Steinberger e30279f89f fix(google): support stable Gemini Embedding 2 request contracts (#128716)
* fix(memory): support stable Gemini Embedding 2

* fix(memory): validate async Gemini batch dimensions

* docs(memory): explain stable Gemini index rebuild

* docs(memory): cover explicit-dimension rebuilds

* fix(google): honor stable Gemini embedding task contracts

Co-authored-by: Franck MEYER <meyerfranckpro@gmail.com>

---------

Co-authored-by: Codex OpenClaw Migration <noreply@local>
Co-authored-by: Franck MEYER <meyerfranckpro@gmail.com>
2026-08-24 05:38:54 -07:00
Peter Steinberger 03658a99a9 fix(browser): stop cancelled downloads from publishing files (#128651)
* fix(browser): cancel in-flight downloads before atomic publication

* fix(browser): type download capture event and deferred fixtures

* fix(browser): ratchet down obsolete download capture assertions
2026-08-24 05:10:48 -07:00
Peter Steinberger 295809df98 feat(geolocation): resolve client addresses to a coarse city via a bundled plugin (#128546)
* feat(geolocation): resolve client addresses to a coarse city via a bundled plugin

The Activity identity card could show a client's IP address but not where it
was, so an operator still had to look the address up by hand.

Add a bundled `geolocation` plugin that owns address-to-place resolution behind
one authenticated route, `GET /plugins/geolocation/lookup?ip=`. It downloads a
MaxMind-format database on first lookup into the state directory, answers from
that local copy, and refreshes it monthly, so a lookup never sends an address
to a third party. The Control UI renders the resolved city on the device row
next to the address and the client-reported time zone.

The default source is DB-IP City Lite under CC BY 4.0. That license requires
attribution, so every response carries the credit and the UI renders it next to
the value; the database is downloaded at runtime and never redistributed.
Plugin code and the `maxmind` reader are MIT. No free city-level IP database is
MIT-licensed, so the obligation lives with the data rather than the code, and
`databaseUrl` plus the attribution fields make the source swappable.

No new core provider kind: with one implementation the plugin owns everything
through the existing HTTP-route seam, keeping core plugin-agnostic. A second
provider is what would justify promoting this to a registry contract.

Availability and lookup failure stay distinguishable: a missing or still
downloading database answers 503, never `found: false`. A failed refresh serves
the cached copy, and a body that does not parse as an MMDB is discarded without
replacing a working database.

* fix(docs): correct geolocation config examples and add zh-CN glossary entries

The config examples used `plugins.<id>` instead of the real
`plugins.entries.<id>.config` shape, which the docs config-example
validator and src/config/docs-config-examples.test.ts both reject.
New doc labels also need zh-CN glossary entries.

* chore(labeler): cover the geolocation extension directory

AGENTS.md requires a labeler entry plus a GitHub label for every new
plugin surface; test/scripts/labeler-extension-coverage.test.ts enforces
the labeler half.

* fix(geolocation): address review findings on caching, download bounds, and scope

Cold-start lookups were permanently suppressed. The loader cached one promise
per address including failures, so the 15s browser deadline expiring against a
first download that takes ~46s cached a blank forever, and a mounted row only
looks up again when its IP changes. Lookups now return a discriminated
located/absent/unavailable result: only definitive answers are cached, and the
element retries an unavailable one on a widening 5s/15s/45s schedule.

Download limits ran after allocation. The size check happened only after
`response.arrayBuffer()` had buffered the whole body, and gunzip had no output
ceiling, so a replaced source or a compression bomb could exhaust Gateway memory
before rejection. The body now streams against a compressed ceiling enforced
per chunk, and inflation uses zlib's maxOutputLength.

Cached placements were not scoped to the Gateway. The cache keyed only by
address while endpoint and credentials come from the shared Gateway context, so
a switch could render the previous Gateway's answer. The shared reset hook now
supports multiple subscribers - a single slot silently dropped whichever
registered first - and the geolocation cache subscribes.

Unresolvable ranges no longer trigger a download. Only loopback suppresses `ip`
at connect, so Tailscale carrier-grade-NAT and LAN addresses are recorded and
displayed. No geolocation database contains them, so a tailnet-only or LAN-only
Gateway was downloading 125 MB to answer nothing. The route now answers those
ranges without loading the database, using the already-public
`isPrivateOrLoopbackHost` seam so the SDK surface budget is unchanged.

The quickstart queried a reserved documentation range while showing a located
response, which cannot happen; it now uses a routable address and documents the
not-found case.

* fix(deps): resync the lockfile after dropping the net-policy dependency

The geolocation plugin briefly depended on @openclaw/net-policy before
switching to the already-public isPrivateOrLoopbackHost SDK seam. The
package.json entry was removed without regenerating the lockfile, so the
frozen-lockfile install failed and every downstream CI job failed with it.
2026-08-24 04:56:03 -07:00
Peter Steinberger 0d840c0fce fix(file-transfer): inline bounded text attachment formats (#128656) 2026-08-24 04:33:32 -07:00
Vincent Koc d9165f9813 fix(deps): align Anthropic Agent SDK lock (#128671) 2026-08-24 03:54:40 -07:00
Peter Steinberger a9fdb68496 fix(discord): preserve distinct super reaction events (#128649) 2026-08-24 03:17:10 -07:00
Peter Steinberger 234df15a6d chore: refresh dependencies after seven-day cooldown (#128414)
* build(deps): refresh dependencies after cooldown

Apply dependency, toolchain, action, image, and exact tool updates released by the inclusive 2026-08-16 seven-day cutoff. Adapt owner boundaries for the resulting CUA, logging, Teams, Markdown, native, and test-harness contract changes while retaining versions blocked by upstream compatibility constraints.

* fix(ui): align markdown renderer env typing

* fix(deps): align postcss and mistral peer contracts

* fix(deps): repair refreshed dependency contracts

* fix(deps): retain tslog startup budget

* fix(ci): verify Android tools with SHA-256

* fix(ci): fence Android SDK cache version
2026-08-24 03:01:54 -07:00
Yuval Dinodia 078237cf2c fix(memory-wiki): persist ChatGPT import run record before compiling the vault (#126487)
* fix(memory-wiki): persist ChatGPT import run record before compiling the vault

The import wrote and overwrote wiki pages, then compiled the whole vault, and
only persisted the rollback run record after a successful compile. When the
compile failed, for example on an unrelated report page with malformed
frontmatter, the pages were already changed but no run record existed, so the
run was invisible to listing and rollback could not restore the overwritten
pages. The record is now persisted right after the page writes and before the
compile, keeping every page-mutating run rollbackable.

* fix(memory-wiki): expose failed import rollback id

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-24 15:16:02 +05:30
Peter Steinberger 4c48c13ab6 fix: surface cloud worker enrollment rejection evidence (#128632) 2026-08-24 02:32:24 -07:00
Peter Steinberger b84292cec8 fix(telegram): preserve accepted rich fallback reply chunks (#128622) 2026-08-24 02:23:24 -07:00
sunlit-deng c9f0a1b847 fix(ollama): reject invalid UTF-8 in streaming NDJSON responses (#120240)
* fix(ollama): reject invalid UTF-8 in streaming NDJSON responses

* fix(ollama): count terminal-line whitespace in record cap

* fix(ollama): treat terminal tail cutoff separately from EOF

* fix(ollama): cap terminal-tail UTF-8 validation before decoding

* fix(ollama): restore terminal stream validation

* fix(ollama): preserve terminal completion during tail validation

* fix(ollama): let bounded tail validation finish

* test(ollama): cover timeout progress during streaming

* fix(ollama): simplify strict streaming UTF-8 validation

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>

* test(ollama): satisfy streaming decoder lint rules

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-24 02:04:18 -07:00
Peter Steinberger 12d0fd2ef8 refactor(anthropic): replace handwritten Claude sessions with Agent SDK (#128131)
* refactor(anthropic): explore official Claude Agent SDK runtime

* refactor(anthropic): replace handwritten Claude sessions with SDK

* refactor(anthropic): collapse SDK live-session ownership

* refactor(anthropic): simplify SDK ownership and preserve live skills

* fix(anthropic): fence cancelled SDK runs before process startup

* fix(anthropic): harden SDK approvals, lifecycle, and packaging

* refactor(anthropic): own SDK process trees and streamline runtime

* fix(anthropic): repair rebased packaging and legacy test fixtures
2026-08-24 01:59:16 -07:00
Peter Steinberger 46563b66f5 fix(slack): reject message edits that would truncate visible text (#128613) 2026-08-24 01:55:19 -07:00
Peter Steinberger a435cf6840 fix(codex): unify conversation permission policy (#128464)
* fix(codex): unify conversation permission policy

* fix(codex): reject stale conversation sources

* fix(codex): preserve permissions through compaction
2026-08-24 01:48:10 -07:00
zengLingbiao 350070293f fix(diffs-language-pack): serve byte-accurate Content-Length on asset HEAD requests (#120282)
* fix(diffs-language-pack): send Content-Length on viewer HEAD responses

* test(diffs-language-pack): await route handler result and build generated viewer runtime fixture

* test(diffs-language-pack): reuse canonical viewer build and HTTP server

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-24 01:43:55 -07:00
TheHandAIMan a1f8e1b04e fix(llm-task): trust explicit provider for slash-containing model ids (#126518)
* fix(llm-task): trust explicit provider for slash-containing model ids

Model ids like openai/gpt-oss-20b contain a slash that resolveModelRefFromString
misreads as a provider separator, overriding an explicit provider=groq and
resolving to provider=openai. When the caller supplies an explicit provider,
trust it and only strip a duplicate provider prefix instead of re-parsing the
model string.

* fix(llm-task): preserve aliases with explicit providers

* fix(llm-task): preserve selected providers for nested model ids

Co-authored-by: Chris Cantwell <ChrisCantwell@protonmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-24 01:32:24 -07:00
Vincent Koc 5cb4bbcd41 fix(msteams): use one Teams API runtime entrypoint (#128572)
* fix(msteams): use one Teams API runtime entrypoint

* test(msteams): exercise packaged CJS loader

* test(msteams): run packaged build through CLI

* chore(msteams): document SDK assertion safety
2026-08-24 01:23:43 -07:00
Rocco Russo 235b693ea4 fix(telegram): accept threadName for topic actions (#99505)
Punchcard-Session: amber-lantern-timber-w7

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-24 01:07:29 -07:00
Peter Steinberger 23df5799fd fix(discord): classify announcement threads consistently (#128568)
* refactor(discord): deduplicate thread channel classification

* fix(discord): classify announcement threads during channel resolution
2026-08-24 01:02:16 -07:00
Peter Steinberger 68ba1ef641 refactor(xai): share responses tool request transport (#128571)
* refactor(xai): share responses tool request transport

* refactor(xai): remove unused responses body test seam

* test(xai): preserve responses request contracts at fetch boundaries
2026-08-24 00:57:28 -07:00
Peter Steinberger 6530948812 fix(location): reject future-dated cached fixes (#128591) 2026-08-24 00:57:04 -07:00
Alix-007 115f3dae65 fix(ollama): redact reflected request credentials (#119537)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-24 00:31:17 -07:00
Peter Steinberger 62aca9a785 fix(lmstudio): redact reflected model-load credentials (#128561)
* test(lmstudio): add reflected credential redaction regression

* fix(lmstudio): redact exact outbound credentials in model load error body

* fix(lmstudio): suppress truncated model load error bodies before redaction

* fix(lmstudio): restore redactToolPayloadText import after rebase

* test(lmstudio): add real HTTP-server credential redaction proof

* fix(lmstudio): harden reflected model-load credentials

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* test(lmstudio): isolate reflected model-load transport proof

---------

Co-authored-by: xialonglee <li.xialong@xydigit.com>
2026-08-24 00:18:43 -07:00
Peter Steinberger 65bcdf2f26 fix(discord): report actual delivered message kinds (#128575) 2026-08-24 00:05:07 -07:00
zengLingbiao 45d6a08a0a fix(imessage): reject malformed base64 attachment buffers (#120216)
* fix(imessage): reject malformed base64 attachment buffers

* refactor(imessage): centralize attachment base64 validation

* fix(imessage): preserve URL-safe attachment buffers

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-24 00:02:36 -07:00
SunnyShu 02b8ed7b02 fix(channels/turn): clear pending history on error paths (#123193)
Failed channel turns could leave caller-owned pending group history in the next prompt. Finalize it on every terminal path, and filter Telegram rolling context while preserving explicit reply ancestry.

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-24 12:29:55 +05:30
Peter Steinberger 3202183b2b fix(telegram): finalize answered media captions correctly (#128526) 2026-08-23 23:37:25 -07:00
Peter Steinberger 2de095746b test(msteams): cover agent reaction removal parity (#128560)
Parity assessment for Microsoft's Lobster patch 0018 via giodl73-repo/lobster-plugins-and-patches.
2026-08-23 23:30:48 -07:00
zhangyan2026 5021451dc0 fix(agents): report blocked command outcomes (#108060)
Punchcard-Session: amber-lantern-timber-w7

Co-authored-by: zhangyan2026 <zhangyan202613579@outlook.com>
2026-08-23 23:16:24 -07:00