Peter Steinberger
8b0735e89f
refactor(memory)!: remove the QMD backend; builtin is the only memory engine ( #120936 )
...
* refactor(memory): remove qmd backend
Make builtin the sole memory-core engine, rename the retained session helper barrel, retire QMD config with doctor migrations, and remove QMD runtime/UI/policy surfaces.
* docs(memory): remove qmd backend guidance
Delete the QMD concept page, rewrite memory documentation for builtin retrieval, and remove QMD from navigation and taxonomy source.
* refactor(memory): remove qmd-only leftovers
* refactor(memory): finish qmd integration cleanup
* build(deps): align root string-width types
* build(deps): model root string-width tooling
* refactor(memory): align qmd removal ui and docs
* fix(memory): preserve qmd external paths in doctor
* test(memory): remove obsolete backend probe case
* test(plugin-sdk): refresh private type baseline
2026-08-09 03:05:47 -07:00
Peter Steinberger
8cb53c7b55
perf(doctor): keep bundled doctor contract closures dependency-light ( #120698 )
...
* perf(doctor): keep bundled doctor contract closures dependency-light
Doctor contract enumeration cold-loads each plugin's doctor-contract-api
closure via jiti, so a static value import of openclaw/plugin-sdk/runtime-doctor
pulled the state-db/kysely graph (~4.3s per closure) into
listPluginDoctorLegacyConfigRules / listPluginDoctorStateMigrationEntries.
- migrate all light doctor-contract closures (66 files) to the
dependency-light openclaw/plugin-sdk/runtime-doctor-migrations subpath
- voice-call: load detect/repairOpenClawStateDatabaseSchema* lazily inside
the migration bodies; keep only a type-only static runtime-doctor import
- matrix: split pure credential record shapes/normalizers into
credentials-state.ts so the doctor closure no longer imports the sync
plugin-state store through credentials-read
- guard: doctor-contract-closure-guard.test.ts now forbids static value
imports of runtime-doctor in closures alongside agent-runtime
* fix(matrix): keep credential revocation record type module-local
Knip production scan flags the export as consumer-less; the type is only
referenced by the exported union and revocation guard signature.
2026-08-08 17:51:31 -07:00
synth
6d2ff9ef38
fix(memory): permanent legacy sidecar migration warning for empty placeholder OpenClaw creates ( #114661 )
...
* fix(memory-core): fail closed on non-ENOENT companion stat errors
Only treat ENOENT as 'sidecar is absent'. Other fs errors (EACCES, EIO,
ELOOP, EMFILE) now return null (fail-closed) instead of silently treating
the sidecar as zero-byte, preventing legacy data from being dropped on
transient or permission failures.
* fix(memory): silence self-inflicted legacy sidecar migration warning
OpenClaw can leave a zero-byte placeholder at the legacy memory sidecar
path (~/.openclaw/memory/<agentId>.sqlite) while the live memory index
is the per-agent SQLite database. The legacy-index migration check found
the empty file, attached it, saw no legacy schema, and warned on every
CLI invocation and gateway start, with no way for users to clear it.
Treat a demonstrably empty sidecar (zero-byte main file and no WAL or
journal content) as nothing to import: remove it quietly as a migration
change instead of emitting a permanent warning. Sidecars that contain
any bytes still go through the existing import and warning paths, so a
real legacy index or a genuinely unrecognized database is unaffected.
Closes #114626
* fix(memory-core): fail closed on non-ENOENT companion stat errors
Only treat ENOENT as 'sidecar is absent'. Other fs errors (EACCES, EIO,
ELOOP, EMFILE) now return null (fail-closed) instead of silently treating
the sidecar as zero-byte, preventing legacy data from being dropped on
transient or permission failures.
* test(memory-core): add ELOOP and EACCES companion stat regression coverage
Regression tests for the fail-closed fix: when a WAL/SHM/journal
companion's fs.stat fails with ELOOP (self-referential symlink) or
EACCES (permission denied), the migration must NOT remove the main
legacy sidecar file. Only ENOENT means genuinely absent.
Addresses Whatsskill Codex review P1 finding on openclaw/openclaw#114661 .
* ci: retrigger after transient runner failures
2026-08-02 07:51:20 -07:00
Vincent Koc
007fdb1f7c
test(extensions): remove duplicate coverage ( #116643 )
2026-07-31 11:59:12 +08:00
EricKwan
e00ef16ee7
fix(xai): follow OAuth default model automatically ( #115617 )
...
* fix(xai): default OAuth login to Grok 4.5
* fix(xai): follow OAuth default model automatically
* fix(xai): send OAuth proxy request headers
* fix(xai): avoid provider API shadowing
* fix(qa): restore current main validation gates
---------
Co-authored-by: echeung <echeung@agentsonly.com >
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
2026-07-29 23:05:29 +00:00
Peter Steinberger
a2ead0a929
fix(memory): recover divergent dreaming journals ( #115855 )
...
* fix(memory): recover divergent dreaming journals
Co-authored-by: brokemac79 <martin_cleary@yahoo.co.uk >
* chore: drop changelog edit (release generation owns it)
---------
Co-authored-by: brokemac79 <martin_cleary@yahoo.co.uk >
2026-07-29 07:32:26 -04:00
Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
Peter Steinberger
9d97e10efe
refactor: move non-session runtime journals to SQLite ( #109427 )
...
* refactor: migrate runtime JSONL state to SQLite
* chore: refresh SQLite migration validation
* fix: preserve safe audit migration order
* fix: sanitize retired audit archives safely
* fix: satisfy SQLite storage architecture gates
* fix: serialize plugin doctor state migrations
* fix: bound memory event SQLite projections
* fix: rotate memory event projections safely
* fix: preserve imported event retention age
* fix: harden memory event export projection
* fix: canonicalize memory event migrations
* fix: harden legacy journal migrations
* fix: report unsafe legacy journal paths
* fix: preserve journal ownership during migration
* fix: keep legacy file imports doctor-only
* fix: align SQLite audit CI coverage
* refactor: keep state helpers module-private
* fix: harden legacy state migration recovery
* fix: reconcile SQLite state audit migration
* test: use neutral audit redaction fixtures
* fix: close SQLite migration recovery gaps
* refactor: split audit migration recovery helpers
* test: prove completed audit pads stay out of backups
* fix: preserve audit record ordinals across blank lines
* fix: align SQLite audit CI contracts
* build: package SQLite audit E2E entries
* fix: preserve audit ordinals in backup snapshots
2026-07-18 11:42:14 +01:00
Josh Lehman
48863e1b83
fix: prevent doctor hangs on large Memory Core migrations ( #109355 )
...
* fix(memory): avoid quadratic FTS migration scans (#108442 )
* test(memory): narrow SQLite query-plan detail type
2026-07-17 12:40:00 -07:00
Peter Steinberger
e873a7f955
refactor(memory): move QMD coordination to SQLite ( #109636 )
...
* refactor(memory): move QMD coordination to SQLite
* chore: keep release notes in PR body
* chore: annotate lease SQLite primitive
2026-07-16 22:01:34 -07:00
Peter Steinberger
863443fac8
fix(memory): recover derived sidecar conflicts ( #108652 )
2026-07-15 23:55:07 -07:00
felirami
c1191cdf2f
fix(memory-core): preserve canonical cache rows during legacy migration ( #107243 )
...
* fix(memory-core): preserve canonical cache rows on migration
* fix(memory-core): guard cache migration dimensions
* fix(memory-core): validate cache embedding lengths
* fix(memory-core): validate cache migration dimensions
* refactor(memory-core): keep cache guard compact
---------
Co-authored-by: felirami <felirami@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 09:40:35 -07:00
Peter Steinberger
f81f9d8570
chore: enforce max-lines suppression ratchet ( #107315 )
...
* ci: enforce max-lines suppression ratchet
* chore: prune stale max-lines suppression
* fix: close max-lines ratchet enforcement gaps
* fix: harden max-lines ratchet checks
* fix(ci): satisfy max-lines ratchet checks
* style: format max-lines declarations
* fix(ci): match oxlint suppression grammar
* test: isolate max-lines git fixtures
* chore: prune resolved max-lines debt
* test: skip newline path fixture on Windows
* fix: harden max-lines suppression ratchet
* chore: refresh max-lines baseline
* fix: close max-lines ratchet bypasses
* fix: derive ratchet base from PR merge tree
* fix: support older Git in staged ratchet
* fix: align max-lines declarations and baseline
* chore: refresh max-lines baseline for current main
* fix: exclude generated wizard locales from max-lines
* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Peter Steinberger
4da0eb19c5
fix(state): converge legacy startup migrations ( #107002 )
...
* fix(state): converge legacy startup migrations
Co-authored-by: Eva <eva@100yen.org >
* refactor(state): split legacy migration helpers
* fix(memory): persist legacy source acknowledgements
* fix(state): remove stale migration imports
* fix(memory): recognize numbered migration archives
* fix(matrix): downgrade archived migration residue
* fix(memory): satisfy migration lint
---------
Co-authored-by: Eva <eva@100yen.org >
2026-07-13 20:05:24 -07:00
Peter Steinberger
6d299f383c
refactor(memory-core): remove unused exports
2026-07-13 12:44:33 -07:00
Peter Steinberger
81941f2d68
test: enable noUncheckedIndexedAccess for extension tests ( #105343 )
2026-07-12 12:48:22 +01:00
Sally O'Malley
cdb58cafb5
fix(migrations): converge recoverable legacy state ( #104529 )
...
Signed-off-by: sallyom <somalley@redhat.com >
2026-07-11 11:19:12 -07:00
mushuiyu886
414c250af9
fix #95495 : [Bug]: 2026.6.9 silently relocates memory store with no migration, forcing a full re-embed (1499 files) with zero upgrade-time warning ( #95631 )
...
* fix(memory): import legacy sidecar indexes into agent db
* fix(memory): move legacy sidecar import to doctor migration
* fix(memory): restore sidecar vector rows during doctor migration
* fix(memory): keep legacy sidecar when skipping import
* fix(memory): keep legacy sidecar import within extension boundary
* fix(memory-core): keep legacy sidecar migration retry-safe
* fix(memory-core): backfill sidecar FTS rows
* fix(memory-core): preserve sidecar when vector import defers
* fix(memory-core): cover custom sidecar migrations
* fix(memory-core): keep legacy config migration under doctor
* fix(memory-core): reject sidecar metadata conflicts
* fix(memory-core): keep partial legacy config sidecars
* fix(memory-core): preserve partial config retries
* fix(memory-core): keep partial config task migrations
* fix(memory-core): avoid phantom sidecar agents
* fix(memory-core): reject incomplete sidecar indexes
* fix(memory-core): keep malformed sidecars retryable
* fix(doctor): use canonical state dir for plugin migrations
* fix(memory-core): honor disabled vector sidecar migration
* fix(memory-core): treat provider-none sidecars as fts-only
* fix(memory-core): preserve setup-failed sidecars
* test(memory-core): use non-mutating sort assertions
* test(memory-core): compare sorted chunk ids
* test(memory-core): compare sorted chunk ids
* test(memory-core): stringify sorted chunk ids
* fix(qa): skip chromium bootstrap for explicit browser channels
* fix(qa): skip chromium bootstrap for explicit browser channels
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-06-24 17:47:44 +08:00
Peter Steinberger
08ae0e6d29
refactor: store Zalo hosted media in plugin state
...
Move Zalo hosted outbound media metadata and expiry into plugin state, add SDK chunked hosted media storage, and keep CI/type/lint gates green after rebase.
2026-06-06 22:56:48 -07:00
Peter Steinberger
3f5e001844
fix: store memory-core dreams state in sqlite ( #91056 )
2026-06-06 18:38:45 -07:00