Peter Steinberger
be5e427f56
feat(dashboard): plugin-declared widget data bindings and action verbs ( #112083 )
...
* feat(dashboard): add plugin capability declarations
* docs(dashboard): describe plugin capabilities
* fix(plugins): preserve registry map cloning
* fix(dashboard): make plugin grant ids unambiguous
* fix(dashboard): align generated plugin grant ids
* chore(boards): internalize verb ids and refresh protocol snapshots
2026-07-20 22:43:04 -07:00
joshavant
9089e33a1a
Android: add Wear OS screenshot pipeline
2026-07-21 00:06:15 -05:00
Lei Mei
a0f03b6f9f
test(tooling): stabilize lifecycle measure pid fixtures ( #96482 )
...
* test(tooling): stabilize lifecycle measure pid fixtures
* test: remove redundant lifecycle pid wait
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-20 21:52:48 -07:00
thomas.szbay
db482e6e97
fix(agents): race in-flight tool promises against run abort ( #103905 ) ( #110704 )
...
* fix(agents): race in-flight tool promises against run abort (#103905 )
wrapToolWithAbortSignal forwarded the combined abort signal into tool
execute calls but awaited the returned promise without racing it, so a
tool that never observes the signal kept running after stuck-session
recovery aborted the run and delivered its result into a dead run.
Race the execute promise against the combined signal so the wrapped
call rejects with AbortError as soon as the abort fires. The tool
promise itself cannot be cancelled in JavaScript; it keeps running in
the background and its late settlement is detached so it never lands
in the aborted run. Tool results and errors pass through unchanged
while the run is alive.
Refs #103905
* fix(agents): satisfy oxlint abort-race rejection rules without losing tool errors
* fix(lint): annotate intentional non-Error pass-through rejections
The race intentionally forwards tool rejections untouched (including
non-Error values), which trips oxlint's promise-rejection rules; mark
both sites with oxlint-disable-next-line justifications.
* test(scripts): allowlist intentional abort-race rejection suppression
The raw non-Error pass-through reject() in agent-tools.abort.ts is the
documented tool-error contract; register its prefer-promise-reject-errors
suppression in the production allowlist.
* fix(agents): observe sync-aborted tool rejections
Co-authored-by: thomas.szbay <thomas.szbay@xydigit.com >
---------
Co-authored-by: thomas.szbay <thomas.szbay@example.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: thomas.szbay <thomas.szbay@xydigit.com >
2026-07-20 21:24:52 -07:00
joshavant
d445a251f7
fix(android): remove retired voice release screenshot
2026-07-20 23:04:56 -05:00
wangmiao0668000666
998f0ed27d
fix(e2e): keep phase log tails UTF-8 safe ( #109923 )
...
* fix(e2e): keep phase log tails UTF-8 safe
The phase runner keeps a bounded in-memory log tail per phase and writes it
to stderr when a phase fails. The byte-based cut can land inside a multi-byte
UTF-8 character, and decoding from that offset emits U+FFFD replacement
characters at the start of the diagnostics tail. Reuse the decodeUtf8Tail
helper from scripts/e2e/lib/text-file-utils.mjs (#109669 ) so the retained
window starts on a character boundary.
Co-Authored-By: Claude <noreply@anthropic.com >
* fix(e2e): declare decodeUtf8Tail in text-file-utils types
phase-runner.ts imports decodeUtf8Tail from text-file-utils.mjs; the
adjacent declaration file must export it or check-test-types fails with
TS2305.
Co-Authored-By: Claude <noreply@anthropic.com >
* refactor(e2e): reuse tailText wrapper for phase log tails
Co-Authored-By: Claude <noreply@anthropic.com >
* test(e2e): focus phase tail regression
Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com >
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-20 19:45:35 -07:00
Peter Steinberger
2bb6b870aa
fix: preserve Codex-bound conversation history across session rotation ( #112016 )
...
* fix: preserve Codex conversation bindings
* test: harden Codex live gateway stress
* chore: refresh plugin SDK API baseline
* test: tighten restart recovery fixtures
* test: complete restart recovery recorder fixture
* fix: keep plugin command authorization fail closed
* fix: restore private queue source imports
* fix: keep private SDK imports inside core
* fix: keep speech core on private SDK paths
* fix: stage private SDK exports for live tests
* fix: preserve plugin-bound gateway history
* fix: block transcript writes after binding races
* test: complete live stage helper contracts
* test: align binding mocks with current types
* fix: preserve compiler OOM diagnostics
* chore: move release notes to PR context
2026-07-20 19:42:56 -07:00
Dallin Romney
3abf8ce964
fix(ci): freeze floating maturity main refs ( #112015 )
2026-07-21 11:42:22 +09:00
Peter Steinberger
64607ba63d
feat: show cloud workspace conflicts in the Control UI ( #111329 )
...
* feat(ui): surface cloud workspace conflicts with staged-ref guidance
* fix(ui): satisfy workspace conflict CI checks
* fix(ui): reject terminal controls in conflict paths
* chore: keep release notes out of the PR
* fix(ui): satisfy conflict path lint
* fix(ui): retain cloud conflicts after reclaim
* fix(ui): keep child conflict badges visible
* test(ui): cover cloud conflict recovery in browser
* fix(ci): rotate poisoned dependency snapshot
* fix(ui): keep nested cloud conflicts discoverable
* docs(changelog): note cloud conflict UI
* fix(ui): restore conflict UI budget headroom
2026-07-20 19:27:19 -07:00
Dallin Romney
29737496a8
fix(qa): run independent evidence channels concurrently ( #112008 )
...
* fix(qa): overlap independent channel evidence
* fix(ci): pin nested maturity evidence ref
* test(qa): satisfy promise executor lint
2026-07-21 11:25:46 +09:00
zw-xysk
9db4b991b0
fix(scripts): preserve UTF-16 surrogate pairs at truncation boundaries in label-open-issues ( #109498 )
...
Replace .slice(0, maxChars) with truncateUtf16Safe in two locations:
- readBoundedResponseText (error body truncation)
- truncateBody (issue body preview)
Without this fix, an emoji (or any astral character) straddling the
truncation boundary would leave a lone surrogate in the output, producing
invalid UTF-16 that serializes to a garbled replacement character.
Follows the same pattern as Leon-SK668's PRs #108184 , #108193 , #108208 .
2026-07-20 19:06:06 -07:00
Dallin Romney
d4deddb6ed
fix(ci): budget maturity evidence runs ( #111980 )
2026-07-21 10:54:37 +09:00
lzyyzznl
f267a4f99b
fix(scripts): preserve UTF-16 surrogate pairs in firecrawl truncation ( #109561 )
...
* fix(scripts): preserve UTF-16 surrogate pairs in firecrawl truncation
* test(scripts): cover UTF-16-safe firecrawl truncation
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-20 18:50:03 -07:00
Patrick Erichsen
ff98dd93f5
ci: scan pull requests with TruffleHog ( #111935 )
...
* ci: scan pull requests with TruffleHog
* ci: scan staged changes with TruffleHog
* ci: fetch pull request base for secret scan
* ci: fetch complete pull request scan history
2026-07-20 17:08:41 -07:00
Jason (Json)
e2bb04328f
fix(release): accept large tarball entry lists ( #111672 )
2026-07-20 13:21:27 -06:00
Dinesh H Suthar
444fd4bbea
test(ci): provide rg in PR wrapper fixture ( #111824 )
...
* test(ci): avoid lock path in wrapper opt-in test
* test(ci): stub rg in PR wrapper fixture
2026-07-20 06:49:32 -07:00
Peter Steinberger
a971188a6d
build(client): make @openclaw/gateway-client publishable to npm ( #111707 )
2026-07-20 00:23:36 -07:00
Peter Steinberger
6b80b01369
chore(pr): warn when ci-dispatch targets a remote head behind local work ( #111694 )
2026-07-19 23:24:29 -07:00
Peter Steinberger
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
Peter Steinberger
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 Steinberger
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 d0f5e7b749 .
* 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 Steinberger
8f9e42f2a9
fix(cli): report honest SQLite store labels and consistent build SHA in help ( #111659 )
2026-07-19 22:07:44 -07:00
Peter Steinberger
3564c1c795
fix(test): bound Matrix test process memory ( #111607 )
...
* test: bound Matrix test process memory
* test: align Matrix runner mock contract
2026-07-19 20:04:14 -07:00
Peter Steinberger
e0b1a39d2a
improve(i18n): generate native locales after merge ( #111557 )
...
* ci(i18n): move native locale generation post-merge
* fix(i18n): allow generated Android companions
2026-07-19 15:42:41 -07:00
Peter Steinberger
50114c5163
fix(test): recognize CI env aliases ( #111521 )
2026-07-19 12:44:18 -07:00
Peter Steinberger
5ec3b2dab4
fix(install): isolate source postinstall state ( #111514 )
2026-07-19 12:14:21 -07:00
Peter Steinberger
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
7aedca21b2
test(release): align built-in timing proofs ( #111483 )
2026-07-19 09:42:16 -07:00
Peter Steinberger
87fbc19fe3
fix: complete lint toolchain reuse in worktrees ( #111467 )
...
* fix(scripts): complete worktree lint toolchain
* fix(scripts): prepare complete lint pipeline
2026-07-19 08:58:43 -07:00
Peter Steinberger
ca3a1873a6
fix(test): make broad shard execution deterministic ( #111416 )
...
* fix(test): harden broad shard execution
* test: allow broad-profile contention
* style(telegram): remove redundant chat id cast
* style(test): preserve setup test spacing
2026-07-19 08:39:16 -07:00
Peter Steinberger
1f507162ee
fix(ci): validate sticky importer restores ( #111444 )
2026-07-19 07:57:46 -07:00
Peter Steinberger
783a5d21cf
refactor(config): purge numeric tuning knobs behind built-in defaults ( #111382 )
2026-07-19 07:35:45 -07:00
Peter Steinberger
d9c9eeb8cd
fix(ci): resolve manual protocol baseline
2026-07-19 14:53:32 +01:00
Peter Steinberger
be831088e9
fix: local lint works in dependency-less worktrees ( #111393 )
...
* fix(scripts): resolve worktree oxlint toolchain
* fix(scripts): declare worktree tool resolver
2026-07-19 06:23:36 -07:00
Peter Steinberger
6a8f16a69e
chore(pr): reuse green hosted CI from patch-identical pre-rebase heads ( #111335 )
...
* chore(pr): reuse green hosted CI from patch-identical pre-rebase heads (24h window)
* fix(pr): type-safe fixtures and lint cleanup for hosted-CI reuse tests
2026-07-19 05:34:48 -07:00
Peter Steinberger
ef91ce5712
feat: keep reset session history searchable ( #111194 )
...
* feat(sessions): retain reset history in sqlite with physical disk budget
* fix(sessions): satisfy test-types, knip export scan, and docs map
* fix(sessions): align behavioral suites and flip proof with retained history, route-aware cleanup plans
2026-07-19 03:38:51 -07:00
Peter Steinberger
e2930422d0
fix(ci): make pr-ci-sweeper clock injectable so lookback fixtures cannot rot
2026-07-19 03:26:50 -07:00
Peter Steinberger
c7d2d111d8
fix(ci): enforce plugin SDK API baseline ( #111289 )
...
* fix(ci): enforce plugin SDK API baseline
* fix(plugin-sdk): refresh fs-safe API baseline
2026-07-19 02:38:58 -07:00
Peter Steinberger
b3bb40551b
fix(mac): opening General Settings crashes in packaged app ( #111300 )
...
* fix(macos): package KeyboardShortcuts resources
* fix(macos): keep dependency patch whitespace-safe
* fix(macos): preserve locked Swift resolution
* fix(macos): guard Swift lock across builds
* fix(macos): simplify KeyboardShortcuts packaging
2026-07-19 02:30:49 -07:00
Peter Steinberger
84e54ab264
chore(pr): landing-UX — aggregated validation, lock classes, ci-dispatch, committer guard ( #111287 )
...
* chore(pr): landing-UX — aggregate artifact validation, lock classes, ci-dispatch, committer worktree guard
* fix(pr): CI lane cleanup for landing-ux — lint causes, hermetic tests, private helpers
* chore(deadcode): register pr-lib CLI entries in knip config
2026-07-19 02:09:55 -07:00
Mason Huang
c26d3cfbd0
fix(ci): skip Periphery scans for unrelated PR changes ( #107991 )
...
* fix(ci): scope Periphery to PR merge changes
* test(ci): align Periphery changed-test routing
2026-07-19 16:52:44 +08:00
Peter Steinberger
f07a1fb502
refactor: centralize bounded file reads in fs-safe ( #111104 )
...
* refactor: use fs-safe bounded descriptor reads
* build: update fs-safe to 0.4.2
* build: refresh root npm shrinkwrap
* fix: satisfy bounded read return paths
* fix: update fs-safe integration for latest main
* fix: adopt fs-safe overflow compatibility release
* build: complete fs-safe lockfile update
* build: update fs-safe to 0.4.4
* build: refresh plugin SDK API baseline
* test: follow fs-safe bounded read seam
2026-07-19 01:29:23 -07:00
Peter Steinberger
58452de711
refactor(config): config-surface reduction tranche 1 — retire dead keys, dedupe channel schemas, add growth ratchet ( #111142 )
...
* refactor(config): retire dead and aliased config keys via doctor migrations
* refactor(config): dedupe bundled channel config schemas into shared builders
* feat(config): add config-surface count ratchet to doc-baseline check
* test(config): drop stale fixtures for retired config keys
* fix(doctor): migrate only positive finite MCP timeout aliases
* fix(migrate-hermes): emit canonical MCP timeouts only
* fix(config): satisfy lint and contract gates
2026-07-19 00:52:37 -07:00
Jason (Json)
baa8b9b24f
test(telegram): add MCP App Funnel proof fixture ( #111238 )
2026-07-19 00:14:36 -06:00
Peter Steinberger
b57660d024
fix(apps): call chat sessions threads ( #111038 )
...
* fix(apps): call chat sessions threads
* test(apps): update thread wording expectations
* fix(i18n): guard retained Android translations
2026-07-18 20:34:12 -07:00
Peter Steinberger
28ce6b8116
fix(macos): accept current native state schema ( #111032 )
2026-07-18 19:58:37 -07:00
Peter Steinberger
68ec50d643
fix(android): show conversation in screenshot fixture ( #111000 )
...
* fix(android): seed screenshot chat history
* fix(android): update screenshot chat readiness
* fix(android): use visible screenshot chat marker
* style(android): format screenshot script test
* fix(android): pin screenshot timezone
* fix(android): restore screenshot timezone
2026-07-18 17:02:29 -07:00
tzy-17
828bcd8231
fix(scripts): bound GHSA patch GitHub lookups ( #110756 )
...
* fix(scripts): bound GHSA patch subprocesses
Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com >
* fix(scripts): satisfy GHSA runner control-flow lint
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-19 00:37:06 +01:00
Peter Steinberger
ed458f14dc
test(scripts): wait for Knip pid file content ( #111001 )
2026-07-19 00:36:15 +01:00
mushuiyu886
2dce9d3012
fix(scripts): retry auth alerts after ntfy rejects delivery ( #110760 )
...
* fix(scripts): retry auth alerts after delivery failure
* test(scripts): cover mixed auth notification outcomes
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-19 00:10:32 +01:00