Vincent Koc
39156a99cd
fix(ci): restore beta release harnesses ( #116596 )
...
* test(release): model systemd ownership probes
* fix(ci): restore release Docker package probes
* fix(release): preserve Windows setup-node runtime
* fix(release): isolate Windows service validation
* fix(release): strip isolated Windows service identity
2026-07-31 09:17:35 +08:00
Peter Steinberger
e604cf5b77
fix(release): trust update restart harness ( #116301 )
...
* fix(release): trust update restart harness
* fix(release): preserve candidate harness root
2026-07-30 05:19:16 -07:00
Dallin Romney
c854a04696
fix(ci): validate frozen release candidates faithfully ( #116357 )
2026-07-30 18:57:32 +08:00
Vincent Koc
8a3f5c862b
fix(plugin-sdk): ship documented public typings ( #116345 )
...
* fix(plugin-sdk): ship documented public typings
* fix(plugin-sdk): refresh public contract artifacts
2026-07-30 18:20:07 +08:00
Shakker
014e1a6c3a
feat: preserve Markdown in Buzz messages
2026-07-29 23:07:22 +01:00
xingzhou
b5c0878777
fix(build): bound bundled plugin asset generators ( #111366 )
...
Fail build and copy generators with ETIMEDOUT after 600000ms and terminate the complete managed process tree. Keep the timeout policy in the bundled-assets caller while preserving the shared helper for distinct callers such as #111349 .
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-30 04:56:21 +08:00
Peter Steinberger
d6f9affe79
feat(cli): run agent exec against the ambient config, composed in memory ( #116038 )
...
* feat(cli): run agent exec against the ambient config, composed in memory
Exec previously ignored the operator's config entirely, so a one-shot turn
could not reach configured providers, credentials, or agentRuntime harness
selection. It now layers config the way other folder-scoped coding CLIs do.
The composed config is published as this process's runtime snapshot rather
than serialized to a temp file and re-read through OPENCLAW_CONFIG_PATH. The
snapshot is the only in-process config cache, so the file only ever fed it --
while writing env-substituted provider keys to disk where the run's own exec
tool could read them.
* fix(cli): resolve exec stored credentials from the configured agent dir
* chore(scripts): allow agent exec the file-scoped config loader at its process boundary
* test(cli): cover the exec credential default and pinned-config flags
2026-07-29 15:38:27 -04:00
Jason (Json)
3f6f172873
fix(build): bound declaration memory use ( #116021 )
2026-07-29 13:25:47 -06:00
Josh Lehman
6beaff450e
fix(codex): avoid transcript mirror snapshot churn ( #115070 )
2026-07-29 11:59:14 -07:00
Vincent Koc
6ef0beaa60
Merge pull request #115951 from openclaw/refactor/isrecord-cleanup-final-20260729
...
refactor: reuse canonical record guards
2026-07-30 02:36:19 +08:00
wings1029
a4aaa1cd74
fix(scripts): keep cross-os command output tails UTF-8 safe ( #109152 )
...
* fix(scripts): keep cross-os command output tails UTF-8 safe
* fix(scripts): avoid possibly-undefined buffer index in cross-os UTF-8 tail skip
Buffer bracket indexing returns number | undefined under strict
TypeScript. Use .at() with an explicit undefined guard to satisfy
check-test-types.
* fix: add curly braces to single-line if statements (lint)
ESLint curly rule requires { } around all if/while/for bodies.
* fix(scripts): preserve streamed UTF-8 command output tails
Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 12:51:13 -04:00
Peter Steinberger
d16e33e08e
fix: restore trustworthy end-to-end QA and cross-channel delivery ( #115404 )
...
* fix(qa): repair verified end-to-end and channel regressions
* fix(gateway): make interrupted restart recovery lifecycle-safe
* test(heartbeat): target the canonical recovery session store
* fix(gateway): prioritize durable restart recovery before heartbeat
* fix(qa): preserve safe restart recovery and channel expiry
* fix(qa): fail closed and fence restart recovery
* test(agents): isolate restart recovery timing
* test(agents): prove actual restart retry timing
* fix(qa): report incompatible profile scenarios
* fix(scripts): resolve symlinked docker scheduler entrypoints
* fix(qa): require fresh native test evidence
* fix(heartbeat): fence active restart recovery delivery
* fix(gateway): consume untargeted restart acknowledgements
* fix(qa): satisfy exhaustive hosted validation gates
* fix(agents): fence stopped restart recovery dispatch
* style(agents): format restart recovery lifecycle regression
* test(gateway): isolate context prewarm sidecar lifecycle
* test(qa): make scenario process timeout cleanup deterministic
* fix(qa): stamp synthetic gateway configs with current version
* fix(openai): preserve vision capabilities in stale model catalogs
* test(qa): align profile channel rejection with current main
* fix(openai): forward supported moderation for image edits
* fix: restore latest-main CI and image edit documentation
* fix(qa): retain relocated code-mode evidence validation
* fix(openai): expose GPT-5.4 vision in static catalog
* fix(pricing): honor explicit model cost overrides
* test(pricing): keep isolated provider regressions deterministic
* fix(openai): inherit transport for discovered static models
* fix(gateway): honor agent-owned static image capabilities
* test(gateway): preserve prepared-snapshot attachment races
* test(gateway): isolate subagent persistence failure injection
* test(gateway): exercise concurrent voice replay admission
* fix(gateway): restore stale model image capabilities
* fix(agents): publish configured model vision capabilities
* fix(agents): isolate detached media transcript ownership
* test(agents): preserve generic transcript lock regression
* fix(gateway): require proven static model route identity
* fix(qa): accept bounded full-size generated image attachments
* fix(qa): require fresh script producer evidence
* test(qa): prove native E2E scenario execution
2026-07-29 12:45:27 -04:00
Vincent Koc
ba1403a1e3
types(scripts): declare shared record helpers
2026-07-29 16:42:12 +02:00
wings1029
796ee27b3a
fix(scripts): keep format-docs output tails UTF-8 safe ( #110825 )
...
* fix(scripts): keep format-docs output tails UTF-8 safe
When formatter (oxfmt) error output exceeds the 16 KiB tail cap and the
retained byte window starts inside a multibyte UTF-8 character, the
diagnostic tail would begin with a replacement character (�).
Add a decodeUtf8Tail helper that skips leading UTF-8 continuation bytes
before decoding the byte suffix, matching the existing pattern in
scripts/run-additional-boundary-checks.mjs (#109167 ).
Keep the existing 16 KiB cap and ASCII behavior unchanged.
* refactor(scripts): share UTF-8-safe output tails
Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com >
* test(scripts): prove real formatter UTF-8 failures
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 08:29:24 -04:00
Vincent Koc
9daa60961c
fix(agents): serialize sandbox provisioning ( #115645 )
...
* fix(agents): serialize sandbox provisioning
* test(docker): add sandbox browser sidecar e2e
* fix(ci): register sandbox browser e2e entrypoint
* fix(ci): restore code mode matrix checks
2026-07-29 14:50:15 +08:00
Eugene Harold Krabs
0079fe80bb
fix(plugin-npm): align bundled lock install strategy ( #114620 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 00:20:32 -04:00
Christian Lallo
811444d6db
fix(memory-core): avoid cubic MMR similarity rescans ( #113359 )
...
* fix(memory): avoid cubic MMR similarity rescans
* style(memory-core): oxfmt mmr.test.ts
* test(memory-core): allow packed CI integration tests
* fix(ci): serialize targeted memory-core tests
* fix(ci): pin agentic cli worker count
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-29 03:53:43 +08:00
Peter Steinberger
388bcc43a1
fix: make Code Mode reliable across gateway and provider lifecycles ( #115379 )
...
* fix(code-mode): dispose suspended runs and propagate cancellation
* fix(code-mode): preserve request-visible provider tools
* test(code-mode): require real packaged gateway execution
* fix(gateway): load code mode cleanup only during shutdown
2026-07-28 15:21:54 -04:00
Peter Steinberger
374e8e99e0
fix(agents): make overflow recovery append-only via branch-and-reappend ( #115271 ) ( #115310 )
2026-07-28 14:58:24 -04:00
Peter Steinberger
6de618315a
refactor: centralize isolated agent test ownership ( #115340 )
2026-07-28 14:07:02 -04:00
Vincent Koc
7e0f43a5b3
fix(ui): detect composed accessibility copy
2026-07-28 23:47:14 +08:00
Vincent Koc
498a7fec28
test(ui): catch untranslated accessibility labels
2026-07-28 23:47:14 +08:00
Peter Steinberger
0cb56ace62
fix(ui): harden browser, session, permissions, and media lifecycles ( #115110 )
...
* fix(ui): harden browser, session, and gateway lifecycles
* fix(ui): satisfy browser lifecycle and control UI CI gates
* fix(ui): satisfy type-aware browser and cron lint
* fix(ci): isolate model and UI test workloads
* fix(ui): reject superseded browser and session page races
* fix(ui): settle superseded background-tab refreshes
* fix(ui): reconcile committed navigation and terminal pages
* fix(ui): preserve canonical cron permission contracts
2026-07-28 05:48:35 -07:00
wanyongstar
89b6d85cdd
fix(scripts): bound android-release-signing exec operations ( #110822 )
...
* fix(scripts): bound android-release-signing exec operations
* fix(scripts): test Android signing timeouts
Co-authored-by: wanyongstar <wan.yong@xydigit.com >
* fix(scripts): keep signing timeout internal
* docs(scripts): clarify signing timeout scope
* test(agents): isolate transport timeout proof
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 07:51:38 -04:00
ToToKr
d57e228c3a
docs(mistral): fix broken adjustable reasoning docs URL ( #114867 )
...
* docs(mistral): fix broken adjustable reasoning docs URL
The linked Mistral page 404s; the reasoning docs now live one path segment up. Verified: old URL returns HTTP 404, new URL returns HTTP 200 and documents reasoning_effort. oxfmt --check passed on the changed file.
* fix(ci): audit links inside docs components
* test(cli): isolate root help exit fixture
* test(ci): split embedded agent shard
* fix(ci): harden docs link projection
* test(ci): satisfy docs audit strict types
* test(ci): isolate incomplete-turn harness
* test(cli): document root help fixture boundary
* test(ci): isolate overflow compaction harness
* test(ci): isolate contaminated agent model tests
* test(ci): update isolated prefix routing
* test(ci): bound loaded streaming HTTP cases
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 06:55:02 -04:00
Peter Steinberger
c141496217
fix: full release validation avoids embedded-agent shard stalls ( #115019 )
...
* ci: use scoped embedded-agent timeouts
* ci: align frozen-target test watchdogs
* ci: align embedded-agent timeout assertions
2026-07-28 04:38:32 -04:00
Peter Steinberger
97c19a98e3
fix(ci): keep fork embedded-agent shard alive on cold runners ( #115035 )
...
* fix(ci): unstick fork embedded-agent shard
* test(ci): allow cold embedded harness setup
2026-07-28 04:04:38 -04:00
Peter Steinberger
0d7fb8eb39
refactor(fs): adopt fs-safe 0.5 core primitives ( #113705 )
...
* refactor(fs): unify exclusive file publication
* fix(fs): fence stale lock reclamation
* refactor(fs): bound wiki scans and secret reads
* chore(fs): finalize fs-safe 0.5 compatibility
* fix(fs): preserve publication ownership and legacy mode
* fix(fs): fail closed on unverifiable lock owners
* fix(fs): preserve concurrent backup publications
* refactor(fs): preserve ambiguous backup outputs
* fix(fs): preserve mixed-version lock coordination
* refactor(file-transfer): adopt fs-safe archive extraction
* refactor(fs): add bounded walk and secret seams
* refactor(auth): replace proper-lockfile with fs-safe
* fix(fs): honor Windows mode override casing
* refactor(snapshot): adopt fs-safe publication
* refactor(memory-wiki): adopt prunable root walks
* refactor(fleet): adopt bounded archive restore
* fix(fs): preserve post-publication ownership receipts
* refactor(fs): harvest final fs-safe primitives
* style(fs): clean harvest lint
* chore(plugin-sdk): refresh move helper API baseline
* refactor(snapshot): adopt native Windows ACL facts
* refactor(fs): adopt hardened atomic outputs
* fix(fs): scope lock reentrancy to logical owners
* chore(config): lower env var count budget
* fix(deps): adopt published fs-safe 0.5.0
* fix(ci): align SDK surface ratchets
* fix(ci): regenerate SDK API baseline after rebase
* fix(fs): preserve owner-scoped file lock nesting
* fix(ci): refresh SDK API baseline for file locks
* fix(fs): separate SQLite and file lock reentrancy
* fix(imessage): bound pinned attachment reads
* fix(agents): narrow session-key lock options
* fix(fs): preserve fs-safe 0.5 compatibility contracts
* fix(windows): retain private SQLite directory owner
* refactor(sqlite): centralize exclusive coordinator
* refactor(snapshot): isolate Windows ACL policy
* fix(windows): retain snapshot ACL inspector
* chore(config): realign env budget after rebase
* test(agents): accept canonical sandbox escape error
* docs(changelog): defer fs-safe release note
2026-07-28 03:41:47 -04:00
Peter Steinberger
258cc84965
test(cli): isolate process exit coverage ( #114903 )
2026-07-28 00:41:49 -04:00
Peter Steinberger
938749180e
refactor(nodes)!: retire arming leases for durable capability enablement ( #114892 )
...
* refactor(nodes): retire phone control leases
* fix(doctor): clean retired phone control state
* docs(nodes): document durable capability enablement
* docs(changelog): defer node enablement note
* fix(doctor): harden retired phone control cleanup
* fix(doctor): fail closed on unreadable lease state
* fix(doctor): validate retired lease journals
* fix(doctor): preserve deny-shadowed consent
* docs: refresh node authorization map
* fix(doctor): keep retirement helpers private
2026-07-27 23:51:30 -04:00
Peter Steinberger
4273ca9dbd
refactor(sessions): remove file-era transcript runtime ( #113233 )
...
* refactor(sessions): keep helper transcripts in memory
* refactor(sessions): remove file-era transcript storage
* test(sessions): use SQLite identity in attempt persistence
* test(codex): isolate legacy transcript fixtures
* fix(sessions): preserve SQLite transcript identity
* fix(sessions): harden transcript lifecycle invariants
* fix(sessions): validate transcript identities
* fix(sessions): close identity compatibility gaps
* fix(sessions): preserve leaf and plugin identities
* fix(sessions): retain dispatch transcript targets
* fix(sessions): preserve active transcript context
* fix(sessions): isolate artifact accounting
* fix(sessions): bound SQLite usage accounting
* fix(sessions): retain bounded latest usage
* fix(sessions): align rebased transcript targets
* test(sessions): align accessor scope fixture
* fix(telegram): derive SQLite transcript identity
* refactor(sessions): remove file-era compaction residue
* chore(sessions): lower max-lines baseline
* fix(sessions): preserve structured transcript identity
* test(sessions): align doctor identity assertions
* fix(sessions): isolate default SDK database
* refactor(sessions): remove dead file-era exports
* fix(sessions): reconcile SQLite transcript identity
* fix(sessions): pass checkpoint identity explicitly
* test(sessions): make entry field probe explicit
* test(sessions): satisfy transcript cleanup lint
* test(sessions): align diagnostics identity proof
* fix(sessions): finish transcript runtime teardown
* fix(sessions): preserve transcript identity invariants
* fix(sessions): harden transcript compatibility edges
* fix(sessions): preserve checkpoint transcript anchors
* fix(sessions): preserve SQLite lifecycle invariants
* fix(sessions): retarget compaction successors
* test(sessions): preserve transcript fixture semantics
* feat(plugin-sdk): add command transcript targets
* fix(sessions): serialize transcript rewrites
* fix(sessions): validate legacy successor identity
* fix(sessions): normalize compaction ownership
* fix(sessions): validate successor identity before adoption
* fix(sessions): preserve plugin transcript ownership
* fix(sessions): carry transcript identity through commands
* fix(sessions): import legacy checkpoint artifacts into SQLite
* fix(sessions): preserve successor transcript ownership
* fix(sessions): align transcript consumers with target identity
* fix(sessions): scope transcript token estimates
* fix(sessions): retain agent identity across lifecycle hooks
* fix(sessions): resolve scoped SQLite targets
* fix(sessions): isolate lifecycle transcript targets
* fix(sessions): validate compaction agent ownership
* fix(sessions): preserve reset and cleanup lifecycle
* fix(sessions): serialize prompt cleanup lifecycle
* fix(sessions): remove stale lock import
* fix(sessions): preserve reset target context
* fix(sessions): fence prompt reload takeover
* fix(sessions): unblock abort and default lifecycle reads
* fix(sessions): validate legacy successor scope
* fix(sessions): reject metadata-only runtime rows
* fix(sessions): propagate custom transcript stores
* fix(sessions): preserve adopted retry targets
* fix(sessions): allow unkeyed usage reads
* fix(sessions): harden runtime target boundaries
* fix(sessions): serialize retry transcript writes
* fix(sessions): bound prompt reload disposal
* fix(sessions): complete retry marker identity
* fix(sessions): keep legacy marker identity minimal
* test(sessions): tighten teardown fixture types
* fix(sessions): preserve compatibility target identity
* test(sessions): persist post-checkpoint boundary turn
* test(sessions): align runtime store mock contracts
* style(sessions): simplify persisted identity guard
* fix(sessions): prefer complete typed targets
* fix(sessions): recover legacy marker targets
* test(sessions): align marker lookup fixture scope
* fix(sessions): validate partial transcript targets
* fix(sessions): reconcile partial transcript identities
* fix(sessions): canonicalize compatibility identities
* test(sessions): cover compatibility aliases
* fix(sessions): adopt legacy successor identity
* fix(sessions): preserve usage read identity
* fix(sessions): preserve partial marker compatibility
* fix(sessions): validate legacy successor mappings
* fix(sessions): reconcile marker store mappings
* fix(sessions): preserve legacy fallback identity
* fix(sessions): harden marker alias resolution
* fix(sessions): prefer verified successor aliases
* fix(sessions): resolve preferred marker aliases
* fix(sessions): serialize cleanup admission
* fix(sessions): align marker lookup scopes
* fix(codex): type marker alias summaries
* style(sessions): satisfy changed lint
* test(sessions): align structured target assertions
* fix(sessions): reconcile latest identity contracts
* fix(sessions): validate transcript identity boundaries
* docs(sessions): explain stable registry keys
* fix(sessions): harden compatibility target round trips
* fix(sessions): port usage identity to split modules
* test(sessions): align subagent transcript identity
* fix(sessions): finish transcript identity migration
* fix(agents): route subagent completion capture through transcript targets
* fix(agents): settle SQLite prompt handoff during cleanup
* chore: shrink max-lines baseline after teardown
* fix(sessions): port teardown across split runtime owners
* fix(sessions): carry transcript targets through split owners
* test(agents): use SQLite compaction target in abort coverage
* chore: retain unrelated max-lines suppressions
* chore: shrink max-lines baseline after main splits
* style(agents): const compaction checkpoint locals
* fix(sessions): harden SQLite teardown boundaries
* test(sessions): use typed metadata in predicate isolation fixture
* test(agents): cover malformed settlement rejections lint-safely
* fix(sessions): close remaining SQLite identity races
* fix(agents): fail closed on incomplete successor targets
* fix(sessions): preserve transcript identity fallbacks
* fix(agents): preserve session-key abort admission
* fix(trajectory): validate incomplete export targets
* test(sessions): drop retired pricing cache imports
* fix(sessions): validate partial transcript identities
* fix(sessions): close transcript identity edge cases
* fix(plugins): reserve retired transcript locator slot
* fix(sessions): scope transcript locks by target
* style(sessions): simplify SDK initialization error
* fix(sessions): preserve initialized transcript state
* fix(codex): verify mirrored history session keys
* fix(sessions): reject stale transcript ownership
* fix(sessions): anchor asynchronous transcript ownership
* fix(sessions): measure active transcript state
* fix(sessions): preserve scoped transcript compaction
* fix(sessions): harden transcript identity and lifecycle
* fix(sessions): resolve scoped command transcript stores
* fix(sessions): make transcript appends failure-atomic
* fix(sessions): enforce scoped transcript ownership
* fix(sessions): reject cross-owner transcript handoffs
* fix(sessions): fence cleanup transcript ownership
* fix(sessions): retire stale write ownership contexts
* fix(sessions): preserve pending session migration state
* fix(sessions): validate migrated transcript ownership
* fix(sessions): validate usage transcript targets
* fix(sessions): clear predecessor transcript metadata
* fix(sessions): align durable session event targets
* fix(sessions): fence late prompt handoffs
* fix(sessions): fence lifecycle transcript fallbacks
* fix(sessions): bound zero-length memory capture
* fix(sessions): preserve transcript teardown ownership
* fix(sessions): reject duplicate cleanup ownership
* fix(sessions): serialize runtime writes with sqlite leases
* fix(sessions): close sqlite teardown concurrency gaps
* fix(sessions): preserve nested lifecycle failures
* fix(sessions): canonicalize sqlite transcript ownership
* fix(sessions): settle disposed prompt handoffs
* fix(sessions): resolve canonical attempt lock targets
* test(sessions): align canonical target fixtures
* test(sessions): retire redundant jsonl parser coverage
* refactor(sessions): split active transcript cursors
* test(memory): retire legacy marker fixture
* fix(sessions): preserve canonical transcript access after rebase
* fix(sessions): fence prompt lease and return transcript targets
* fix(sessions): colocate transcript leases with target store
* fix(sessions): canonicalize transcript lease and worker targets
* fix(sessions): preserve plugin and fork identity markers
* fix(sessions): complete sqlite transcript target migration
* fix(sessions): integrate canonical followup identity
* fix(sessions): preserve bounded transcript topology
* fix(sessions): validate transcript identity boundaries
* fix(context): separate caller and successor targets
* test(sessions): split persistence compatibility coverage
* test(sessions): preserve fixture topology efficiently
* chore(sdk): refresh plugin api baseline
* test(agents): align compaction lock target mocks
* test(sessions): seed malformed transcript fixtures directly
* fix(agents): canonicalize transcript compatibility inputs
* fix(agents): type optional tool result ids
* test(ci): stabilize loaded process timing
* test(tui): wait for collect queue admission
2026-07-27 22:33:24 -04:00
Peter Steinberger
7e8afba703
feat(plugins): mirror local coding sessions to a remote Beam receiver ( #114735 )
...
* feat(plugins): mirror local coding sessions to a remote Beam receiver
* fix(plugins): satisfy static gates for the Beam mirror seam
* fix(plugins): import the config type from the narrow contracts subpath
* fix(plugins): require catalog consent and loopback-only plaintext for the Beam mirror
2026-07-27 17:31:34 -04:00
Jason (Json)
62baf451c1
fix(deepinfra): remove deprecated embedding provider warning ( #114727 )
...
* fix(deepinfra): migrate embedding provider registration
* fix(deepinfra): preserve embedding index identity
2026-07-27 14:53:34 -06:00
Peter Steinberger
269bc5c89e
fix(cli): preserve machine-readable stdout ( #113654 )
...
Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com >
2026-07-27 05:44:16 -04:00
Peter Steinberger
669db2968f
refactor(agents): retire TOOLS.md into an AGENTS.md section with a doctor migration ( #113966 )
...
* fix(agents): stop retired attestation hashes from faking a vanished workspace
* feat(agents): migrate TOOLS.md content into the AGENTS.md tools section
* refactor(agents): drop TOOLS.md from the workspace bootstrap set
* refactor(policy): read tool policy entries from AGENTS.md
* docs: describe local tool notes as an AGENTS.md section
* test(codex): drop TOOLS.md developer-instruction coverage with the removed path
* test(agents): cover the TOOLS.md doctor migration behaviors
* refactor(doctor): satisfy TOOLS.md migration lint
* test(agents): split workspace attestation survival coverage
* refactor(codex): simplify workspace context basenames
* refactor(doctor): keep TOOLS.md migration helpers module-local
* docs: regenerate docs map
* fix(doctor): keep migration claims fresh
* fix(doctor): preserve nested tool notes
* refactor(doctor): split tools migration helpers
* refactor(doctor): limit TOOLS.md migration to workspace root
* style(doctor): keep migration under line limit
* fix(doctor): recover interrupted AGENTS publish
* docs(hooks): describe root-only TOOLS.md migration accurately
* fix(doctor): preserve migrated tool guidance visibility
* test(agents): regenerate prompt snapshots after rebase
* fix(policy): block evaluation while TOOLS.md is unmigrated
* fix(doctor): check merged bootstrap budget per agent
* fix(doctor): keep budget helper internal
* refactor(doctor): keep migration budget helpers to their consumers
2026-07-27 03:56:30 -04:00
Peter Steinberger
7ad7cf8b0f
refactor(sessions): unify canonical SQLite lifecycle and transcript projection ( #114369 )
...
* refactor(sessions): unify canonical SQLite lifecycle and transcript projection
* fix(sessions): ratchet eliminated transcript accessor debt
2026-07-27 02:59:08 -04:00
Peter Steinberger
60aac74672
fix(openai): harden live and packaged onboarding ( #114288 )
2026-07-27 00:50:49 -04:00
Peter Steinberger
4f34c60d45
build(deps): drop dead glob/markdown-it ownership-manifest entries ( #114218 )
...
* build(deps): drop stale root partial-json and dead ownership-manifest entries
partial-json is owned by packages/ai (which declares its own copy); glob and
markdown-it no longer exist as root dependencies. Audit follow-up to #114006 .
* build(deps): keep root partial-json (openclaw/ai bundling contract); drop only dead manifest entries
2026-07-26 21:33:27 -04:00
Patrick Erichsen
aa0d3192d2
feat(channels): add Buzz channel plugin
2026-07-26 14:09:23 +01:00
Peter Steinberger
19a98c873c
refactor(auth): finish SQLite-only auth profile cutover ( #114033 )
...
* refactor(auth): finish SQLite-only profile cutover
* test(auth): isolate SQLite shadow fixtures
* test(auth): satisfy OAuth refresh lint
* test(auth): infer legacy sidecar fixtures
* fix(auth): fail closed on unreadable stores
* fix(auth): recheck migration readiness on lookup
* fix(auth): preserve compatibility owner checks
* fix(auth): align SQLite cutover proof
* style(qa): format SQLite auth helpers
* fix(auth): recover interrupted SQLite migrations
* fix(auth): bind materialized SQLite refs
* style(auth): clarify receipt hash value
* fix(auth): preserve state-only OAuth routing
* fix(auth): snapshot receipted migration sources
* fix(auth): fail closed across recovery races
* fix(auth): close legacy recovery gaps
* fix(auth): serialize SQLite refresh recovery
2026-07-26 07:27:54 -04:00
Peter Steinberger
f6131a4fbf
build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks ( #114006 )
...
* build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks
npm 12 removed shrinkwrap (command + tarball/root loading). Delete all 82
committed npm-shrinkwrap.json files and stop publishing lockfiles; keep
pnpm-lock.yaml as the single reviewed dependency boundary. The generator
becomes scripts/generate-npm-package-lock.mjs and feeds plugin bundling via
a transient package-lock.json + npm ci (works on npm 11 and 12). Tarball
validation treats the published 2026.7.2 beta train as a shrinkwrap
transition; self-update npm detection now uses install topology instead of
the shipped shrinkwrap.
* fix(deps): repair lint, deadcode, and test-type lanes for the npm 12 migration
- sort integrity comparisons with an explicit comparator (oxlint)
- keep resolveBunGlobalNodeModules module-local (knip unused-export gate)
- model npm pack --json as npm<=11 array / npm 12 name-keyed object
- default calver destructuring in the tarball test fixture
2026-07-26 01:29:55 -04:00
Peter Steinberger
fc3476b116
fix(policy): drop retired config coverage entry ( #114014 )
2026-07-25 21:29:50 -07:00
Peter Steinberger
08138cabe0
refactor(policy): drop unreachable sensitive-logging redaction check ( #113993 )
...
The policy/data-handling-redaction-disabled check could never emit a finding:
scanPolicyDataHandling records the sensitiveLoggingRedaction evidence with a
hardcoded value true, and the finding builder only fired on value !== true.
Redaction is unconditional in src/logging/redact.ts, which hardcodes tools mode
and reads only redactPatterns, so no config can turn it off.
Delete the check, its finding builder, check id, and the validateOnly fix class
that existed solely for it. Keep the public
dataHandling.sensitiveLogging.requireRedaction policy key: it is a policy.jsonc
contract, it still drives openclaw policy compare baseline strictness, and its
shape stays validated.
Make the key's satisfied status explicit instead of silent: the policy rule
declares satisfiedByInvariant pointing at the evidence source policy state
records (oc://openclaw.invariant/logging/redaction), which openclaw policy check
emits in dataHandling evidence and the attestation. A metadata test asserts every
rule names either its checks or its invariant, never both and never neither, and
that policy state actually emits the declared source.
Also drop the stale logging.redactSensitive entry from the policy config coverage
manifest; that config key is retired.
2026-07-25 20:00:25 -07:00
Peter Steinberger
4859d524ed
refactor(tasks): classify harness-owned subagent rows without plugin ids ( #113964 )
...
* refactor(tasks): classify harness-owned subagent rows without plugin ids
* refactor(plugin-sdk): require taskKind for harness-owned subagent runtimes
* docs(tasks): record harness-ownership invariant at the predicate
* test(plugin-sdk): declare harness task kind in scope fixtures
2026-07-25 18:41:13 -07:00
Peter Steinberger
d5a3740707
fix(package): prevent installs from deleting required runtime modules ( #113821 )
...
* fix(package): preserve imported runtime chunks after install
* fix(package): isolate public build from private QA
* test(package): prove installed postinstall dependency graph
2026-07-25 14:05:41 -07:00
Vincent Koc
687923189e
fix(sqlite): make reliability proofs cross-platform safe ( #113652 )
...
* test(sqlite): canonicalize reliability crash barriers
* fix(sqlite): normalize reliability database paths
* test(sqlite): allow Windows reliability proof to finish
2026-07-25 21:50:27 +08:00
Peter Steinberger
3d1369ff4f
test(telegram): consolidate bot test harness ( #113571 )
...
* test(telegram): consolidate bot test harness
* test(plugin-sdk): expose isolated test state
Promote the isolated OpenClaw test-state lifecycle through a narrow published Plugin SDK subpath so extension tests no longer import private core helpers. This intentional SDK surface addition is maintainer-approved.
* test(telegram): use public test-state seam
* test(plugin-sdk): keep test state local-only
Match the existing channel test-helper boundary: bundled extension tests can import the focused SDK source entrypoint, while ordinary builds and the published npm package exclude it. The earlier public classification existed only on this unmerged PR branch and was never a shipped contract.
* test(plugins): map test-state in package boundaries
2026-07-25 05:28:26 -07:00
Vincent Koc
d4794c90a0
test(sqlite): cover interrupted canonical index repair ( #113624 )
2026-07-25 19:27:17 +08:00
Vincent Koc
2b19ae1f00
fix(snapshot): recover complete pending sqlite snapshots ( #113607 )
2026-07-25 18:50:50 +08:00
Peter Steinberger
a5d758e74b
refactor(plugin-sdk): share channel DM policy setup ( #113537 )
2026-07-25 01:00:53 -07:00