Commit Graph

68708 Commits

Author SHA1 Message Date
Peter Steinberger
6beb726be7 fix(docs): preserve inline code literals 2026-07-15 03:10:11 -04:00
Peter Steinberger
0d7da61e9b fix(macos): hide update guide after app-only updates (#108034)
* fix(macos): hide update guide for app-only updates

* chore: defer release note to release changelog

* docs(macos): clarify app-only update completion

* chore(i18n): sync native update strings
2026-07-15 00:09:26 -07:00
Peter Steinberger
732fb5f9e6 fix(release): bind Telegram proof artifact identity 2026-07-15 08:02:17 +01:00
Yuval Dinodia
864bb18738 fix(cron): cap trigger script tool access (#104430)
* fix(cron): cap trigger script tool access

Persist the creator tool cap for any cron job with a trigger script and pass it to the headless trigger runtime. System event and command payloads retain the cap across cron updates.

* fix(cron): persist trigger tool cap for systemEvent and command payloads

The creator tool cap is stamped on systemEvent and command payloads whenever a
cron job carries a trigger script, but the SQLite codec dropped
payload.toolsAllow for those kinds. After a gateway restart the reloaded job
carried no cap and the trigger regained the full coding surface. Persist and
restore toolsAllow through the existing payload_tools_allow_json column for all
payload kinds, and add restart-aware round-trip coverage.

* ci: re-trigger workflows (transient self-hosted runner flake)

* fix(cron): use expectDefined for store test job access

* refactor(cron): hoist cron tool types, payload merge, and wire types into companion modules

Keeps the oversized cron files at or below their baseline line counts for the
changed-file TypeScript LOC ratchet on main. No behavior change.

* fix(cron): retain freshly stamped cap markers

* test(ci): align compact shard count

* fix(cron): make trigger cap updates atomic

* fix(cron): preserve explicit cap provenance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 00:01:26 -07:00
Peter Steinberger
d139c0e854 test: speed PR operation lock fixtures (#108078) 2026-07-14 23:58:13 -07:00
Wynne668
b01c7619cc fix(media): handle uploads with conflicting MIME metadata (#107863)
* fix(media): prefer attachment bytes for MIME detection

* fix(media): honor detected MIME in explicit image paths

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

* fix(media): preserve ambiguous audio container hints

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

* fix(media): narrow ambiguous MIME overrides

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

* fix(media): reconcile fetched MIME hints

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

* fix(media): refine generic ZIP MIME metadata

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

* fix(media): preserve compatible ZIP MIME hints

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 23:57:56 -07:00
Peter Steinberger
c31d19950f refactor(macos): tighten status item lifecycle 2026-07-14 23:57:05 -07:00
Peter Steinberger
5779422283 refactor(packaging): remove unused inventory override 2026-07-14 23:56:09 -07:00
Dallin Romney
f0109f430c fix(release): retry transient live provider failures (#108015) 2026-07-14 23:55:32 -07:00
Peter Steinberger
0754d23615 fix: group native sessions by host (#108062)
* fix(control-ui): group native sessions by host

* test: satisfy native session checks

* chore: remove release-owned changelog entry
2026-07-14 23:51:00 -07:00
Peter Steinberger
80e1509fe8 fix(codex): keep parent binding on cross-key handoff and stop foreign-transcript mirror warns (#108042)
- session_end with a provably different nextSessionKey (dashboard "New Chat",
  fork child) no longer permanently retires the still-live parent Codex
  binding; same-key rollovers, unknown-key ends, and terminal ends retire as
  before (#106778)
- mirrored session-history reads treat well-formed non-Codex transcripts as an
  empty mirror instead of a read failure, so codex harness hooks stop warning
  on every non-Codex model run; corrupted session headers stay on the warn
  path (#106556)
2026-07-14 23:50:01 -07:00
Peter Steinberger
18c14abc2a docs: require post-merge recap 2026-07-14 23:48:20 -07:00
Peter Steinberger
92d06e51bb refactor(mcp): trim internal server exports (#108076)
* refactor(mcp): remove dead internal exports

* chore(deadcode): refresh export baseline
2026-07-14 23:47:38 -07:00
Alix-007
c4cd643c1b test(extensions): derive Firecrawl batch expectations from tracked tests (#103369)
* fix(firecrawl): require own legacy provider config entries

* fix(firecrawl): make legacy config lookup type-safe

* test(firecrawl): keep extension batch assertions data-driven

* test(firecrawl): cover inherited config in client path

* test(firecrawl): avoid request object stringification

* test(extensions): keep firecrawl batch expectations data-driven

* test(extensions): simplify shard fixture mapping

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 23:47:31 -07:00
Peter Steinberger
92fc907ffb fix: preserve TUI restore state without JSON races (#108058)
* refactor(tui): move last session state to sqlite

* chore: keep release notes in PR body

* test: update doctor migration fixture

* chore: satisfy dead code export gate
2026-07-14 23:46:22 -07:00
clawsweeper[bot]
5afb1fb381 feat(ui): add follow-up behavior setting for active runs (steer by default) (#108032)
* feat(ui): add follow-up behavior setting (queue vs steer) for active runs

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

* default follow-up behavior to steer

Follow-ups sent while a run is active now steer into the running turn by
default; queue mode becomes the persisted opt-out. Offline/disconnected
sends still always queue.

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

* feat(ui): steer active follow-ups by default

---------

Co-authored-by: openclaw-clawsweeper[bot] <openclaw-clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 23:28:27 -07:00
Peter Steinberger
0240327fe7 refactor(security): privatize audit internals (#108067)
* refactor(security): privatize audit internals

* chore(deadcode): shrink security export baseline
2026-07-14 23:28:04 -07:00
Peter Steinberger
c51bb5ed20 test(github-copilot): align token endpoint fixtures (#108047)
* test(github-copilot): align token endpoint fixtures

* docs: refresh generated docs map
2026-07-14 23:25:49 -07:00
Peter Steinberger
1d22f1d34c fix: restore palette-aware embedded terminal surfaces (#108057)
* fix(ui): answer terminal color queries

* chore: keep terminal release note in PR
2026-07-14 23:25:19 -07:00
Peter Steinberger
23c0a7b612 fix: preserve working installs on unsupported Node (#106994)
* fix(update): preserve installs on unsupported Node

* fix(update): verify skipped install scripts

* refactor(update): share global install preflight

* fix(update): validate Bun-installed Node runtime

* fix(update): classify install preflight failures

* refactor(update): normalize install failure reasons

* style(update): format updater policy test

* fix(update): preserve pnpm script policy safety

* fix(update): classify hosted git sources

* chore: leave release notes to release flow

* fix(release): defer package inventory helper loading

* style(release): keep inventory loader LOC-neutral

* fix(update): validate staged package lifecycle

* fix(update): match packed lifecycle contract

* fix(update): harden Bun package activation

* test(update): model packed Bun lifecycle

* style(update): avoid lifecycle name shadowing

* fix(update): remove unsafe Bun staging experiment

* fix(update): satisfy updater type checks

* fix(update): preserve packed npm package name

* fix(update): preserve checkout failure status

* fix(update): disable scripts while packing candidates

* fix(update): preflight source package engines safely

* fix(update): preserve legacy npm downgrades

* fix(update): pin npm packing to selected Node

* fix(update): stage npm activation before replacing live package

* fix(update): guard non-npm source activation

* refactor(update): isolate npm staging helpers

* fix(update): harden staged package lifecycle

* test(update): satisfy merged type gates

* fix(update): privatize runtime npm helper

* fix(ci): satisfy merged lint and type gates

* docs(changelog): defer updater note to release

* fix(update): guard package activation runtime

* fix(update): preserve installs on unsupported Node

* test(update): reject prerelease Node runtimes

* test(update): use shared temp cleanup

* fix(update): fail closed when install scripts are skipped

* fix(update): pack install guard in docker artifacts

* fix(ci): keep install guard export tooling-local
2026-07-14 23:19:48 -07:00
Peter Steinberger
bda5288365 fix(gateway): preserve MCP literal union schemas (#108054) 2026-07-14 23:17:42 -07:00
Alix-007
d5ece3b2d7 fix(device-pair): bound notifier polling overlap (#106395)
* fix(device-pair): bound notifier polling overlap

* fix(device-pair): retain notify lock across reloads

Co-authored-by: Alix-007 <li.long15@xydigit.com>

* test(device-pair): prove reload delivery dedupe

* test(device-pair): type pairing list mock

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 23:17:09 -07:00
Dallin Romney
c421a3b2e6 feat: add reusable Parallels Windows test setup (#107881)
* test: route Parallels Windows setup

* test: own Parallels Windows baseline setup

* docs: point Windows proof to Parallels sidecar
2026-07-14 23:15:57 -07:00
Peter Steinberger
75a48c0033 fix(config): align session maintenance validation (#108046) 2026-07-14 23:15:06 -07:00
Peter Steinberger
6ec5a2e5aa refactor(plugins): defer installed payload validation (#108051) 2026-07-14 23:14:06 -07:00
WhatsSkiLL
e6f3303cf2 fix(android): enlarge attachment remove touch target (#106737)
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-14 23:13:14 -07:00
Peter Steinberger
ed49673307 fix(release): prepare trusted harness dependencies 2026-07-15 07:11:59 +01:00
Peter Steinberger
5eaa72e740 test: speed bench model tests (#108048) 2026-07-14 23:11:28 -07:00
Peter Steinberger
3d4ba02574 feat(active-memory): add recall-specific fast mode (#108043)
* feat(active-memory): add fast mode override

* fix(agents): preserve fast auto cutoff

* fix(active-memory): inherit parent fast mode

* docs: refresh generated docs map
2026-07-14 23:09:04 -07:00
Peter Steinberger
34b8a3fda0 fix(release): isolate trusted candidate dependencies 2026-07-15 07:08:00 +01:00
Peter Steinberger
f30d9b250a fix(worktrees): fail closed on owner lookup errors (#108041) 2026-07-14 23:06:26 -07:00
Dallin Romney
fc56b55403 docs: refresh generated docs map (#108052) 2026-07-14 23:05:07 -07:00
VectorPeak
1ac30c8491 fix(tlon): send fragment image URLs as media (#104853)
* fix(tlon): keep fragment image URLs as media

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* test(tlon): prove fragment image media send path

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* test(tlon): remove mocked fragment outbound proof

Keep the PR evidence scoped to the helper-level regression test until live Tlon proof is available. The mocked outbound test was not sufficient for the reviewer-requested live behavior proof and triggered serialized-state review noise.

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* docs: refresh docs map for CI

Regenerate docs/docs_map.md after syncing with upstream/main so the docs map check passes on this PR branch.

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* fix(tlon): constrain fragment image URL matching

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* fix(tlon): harden image URL classification

Co-authored-by: VectorPeak <garrufariw@gmail.com>

---------

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Co-authored-by: VectorPeak <VectorPeak@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 23:04:21 -07:00
Peter Steinberger
7f1baa6d75 refactor(codex): trim session catalog exports (#108045)
* refactor(codex): privatize session catalog helpers

* chore(deadcode): refresh export baseline
2026-07-14 22:59:46 -07:00
Peter Steinberger
701d02f241 refactor(gateway): make secret assignment projection explicit (#108040) 2026-07-14 22:56:54 -07:00
Peter Steinberger
c8733ea674 fix(release): run candidate smoke from trusted tooling 2026-07-15 06:56:04 +01:00
Wynne668
f0bcf899c0 fix(imessage): preserve split Full Disk Access errors (#107393) 2026-07-14 22:52:49 -07:00
Leon-SK668
9f471d0189 fix(gateway): keep worker failures UTF-16 safe (#107718) 2026-07-14 22:51:38 -07:00
Peter Steinberger
2e73cff6ca fix(maint): keep PR maintenance delta-only (#108018)
* fix(maint): keep fork prep sync delta-only

* fix(ci): use exact merge parent for PR diffs

* fix(ci): pass docs diff base through environment

* test(ci): cover environment-mediated docs base
2026-07-14 22:49:33 -07:00
Peter Steinberger
ccefa7c028 test: speed exec no-output timer (#108037) 2026-07-14 22:48:11 -07:00
Peter Steinberger
5bbf30b852 refactor(canvas): remove internal A2UI handler factory (#108038)
* refactor(canvas): remove internal A2UI handler factory

* chore(deadcode): refresh export baseline
2026-07-14 22:41:27 -07:00
Peter Steinberger
d702f6fb33 ci: shorten full release validation critical path (#107894)
* ci(release): parallelize plugin Docker lanes

* test(plugins): expect malformed URL redaction

* ci: start release performance validation concurrently

* docs(agents): guard PR operations after throttling
2026-07-14 22:39:32 -07:00
Peter Steinberger
596fb742fc fix(macos): update Peekaboo for Swift 6.2 (#107926) 2026-07-14 22:38:22 -07:00
Yuval Dinodia
d576881390 fix(github-copilot): reject unsupported OAuth enterprise domain before refresh and model routing (#105584)
* fix(github-copilot): reject unsupported OAuth enterprise domain before refresh and model routing

Legacy github-copilot OAuth credentials can carry a non-github.com
enterpriseUrl. The token-refresh path templated it into the endpoint and
sent the bearer refresh token there with no allowlist, and the model
routing path derived a base URL from the same credential, so an unexpired
credential kept routing its access token to that origin without ever
reaching a refresh.

A persisted credential origin that is not on the Copilot host allowlist
is now rejected before any request is issued and before any model URL is
produced. Because an off-allowlist origin means the stored access token
may itself have been minted by that origin, the credential is refused as
a whole rather than coerced to github.com: modifyModels withholds the
github-copilot models so the token has no route, and its proxy-ep is
never trusted. Login rejects an unsupported host up front, so every path
that turns a domain into a bearer-bearing URL validates first.
formatAuthDoctorHint guides affected users to re-authenticate, mirroring
the qwen-portal hint. Supported hosts are unchanged: github.com and
*.ghe.com data-residency tenants still route and refresh as before.

The allowlist plus a new isSupportedGithubCopilotDomain predicate move to
a dependency-free plugin-sdk leaf so the core OAuth runtime can share them
without closing a module cycle; plugin-sdk/provider-auth re-exports
normalizeGithubCopilotDomain, so the plugin-owned GitHub Copilot provider
keeps its existing import.

Fixes #103078.

* fix(github-copilot): resolve provider auth base conflict

* fix(github-copilot): resolve provider auth base conflict

* fix(github-copilot): validate token proxy endpoint

* fix(github-copilot): remove stale helper import

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-14 22:29:35 -07:00
Alix-007
ebb1e83b64 fix(logbook): bound background refresh concurrency (#106397)
* fix(logbook): bound background refresh concurrency

* fix(logbook): unify refresh ownership

* style(logbook): format type import

* test(logbook): use typed rejection error

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:27:20 -07:00
Peter Steinberger
b9a837ec8d refactor(agents): split agent session responsibilities (#107948) 2026-07-14 22:25:08 -07:00
Peter Steinberger
9275f476f4 fix(release): retry flaky fresh Parallels lanes 2026-07-15 06:24:32 +01:00
Peter Steinberger
fbe033214d test: speed doctor plugin install tests (#108022) 2026-07-14 22:21:26 -07:00
Peter Steinberger
1967e4c04d refactor(telegram): privatize internal plugin surfaces (#108026)
* refactor(telegram): privatize internal plugin surfaces

* chore(deadcode): refresh export baseline
2026-07-14 22:20:46 -07:00
Peter Steinberger
eebc0dbc33 refactor(auto-reply): split agent runner execution (#107985)
* refactor(auto-reply): split agent runner execution

* style(auto-reply): satisfy promise executor lint

* fix(ci): align refactor baselines and test types

* fix(ci): prune stale max-lines baseline
2026-07-14 22:20:25 -07:00