Peter Steinberger
4a05a087a1
refactor(config): retire flat streaming keys from the last six channel schemas via doctor migration ( #105709 )
...
* refactor(config): retire flat streaming keys from the last six channel schemas
signal, irc, nextcloud-talk, whatsapp, googlechat, and mattermost now accept
only the nested streaming.{chunkMode,block.enabled,block.coalesce} shape
(mattermost also drops scalar/boolean streaming); flat spellings migrate via
each channel's defineChannelAliasMigration doctor contract with root seeding
for their wholesale-replace account merges.
* feat(channels): warn once per key when the deprecated flat streaming fallback is used
Bundled schemas now reject the flat delivery keys, so the streaming.ts
fallback only serves external SDK plugin configs; emit a once-per-process
per-key subsystem warning and pin the removal plan to the next release train.
* chore(config): regenerate bundled channel config metadata for nested-only streaming
* docs: describe nested-only channel streaming config and the SDK flat-key deprecation window
* fix(whatsapp): seed migrated named-account streaming from the accounts.default layer
WhatsApp resolution layers accounts.default shared config between root and
named accounts, so doctor-materialized account streaming objects now inherit
default-account settings over root ones; mattermost schema test moves to the
nested-only shape with explicit rejection coverage; scope flat-key deprecation
notes to the pending Matrix/Feishu migrations.
* fix(whatsapp): resolve the default account case-insensitively when seeding migrated streaming
* chore(plugin-sdk): repin API baseline for nested-only channel streaming types
2026-07-12 15:27:28 -07:00
Peter Steinberger
81941f2d68
test: enable noUncheckedIndexedAccess for extension tests ( #105343 )
2026-07-12 12:48:22 +01:00
thomas.szbay
a9e2b06812
fix(nextcloud-talk): align supported message actions ( #104906 )
...
Nextcloud Talk's supportsAction advertised support for all non-send
actions (including delete, pin, edit, read), but the handler only
implements 'react'. Unsupported actions passed the dispatcher boundary
check only to fail inside the handler.
This aligns supportsAction with actual implementation, matching the
pattern from PR #104788 (Signal adapter fix).
2026-07-12 06:28:07 +01:00
Alix-007
c4f46baec3
fix(nextcloud-talk): add timeout to room info lookup ( #102859 )
...
* fix(nextcloud-talk): add timeout to room info lookup
* test(nextcloud-talk): assert room lookup deadline
Co-authored-by: llagy009 <0668001470@xydigit.com >
---------
Co-authored-by: llagy009 <0668001470@xydigit.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 21:59:32 -07:00
Josh Avant
fbd330b7aa
fix(channels): honor configured read target policies ( #99905 )
...
* fix(channels): enforce configured read targets
* test(channels): align policy checks with boundaries
* fix: bind channel reads to trusted turn context
* test: satisfy gateway lint
* fix: narrow message action channel imports
* fix(feishu): authorize message reads before provider access
* fix(slack): await reaction clear authorization
* fix(channels): align provider action contracts
* fix(matrix): read direct-room account data before sync
* fix(channels): reject unsupported attachment actions early
* fix: restore trusted operator conversation reads
* fix(matrix): authorize pin actions before provider reads
* fix: preserve trusted channel read workflows
* fix(discord): resolve current channel ids consistently
* fix(agents): preserve message action turn capability
* fix(plugins): enforce host-owned read provenance
* fix(channels): harden Teams and Discord read policy
* fix(channels): preserve exact-current action compatibility
* fix(imessage): authorize trusted current chat aliases
* fix(channels): preserve normalized current aliases
* fix(channels): preserve external current target aliases
* fix: reconcile channel policy with current main
* fix(discord): isolate DM read policy
* fix(channels): enforce provider read gates
* fix(gateway): await serialized message action identity tokens
* fix(ci): refresh channel protocol contracts
2026-07-10 22:29:37 -05:00
pick-cat
8a93d288e2
fix(nextcloud-talk): strip internal tool-trace banners from outbound text ( #101712 )
...
* fix(nextcloud-talk): strip internal tool-trace banners from outbound text
* fix(nextcloud-talk): sanitize inbound replies
Co-authored-by: liyuanbin <li.yuanbin1@xydigit.com >
* test(nextcloud-talk): prove low-level send text preservation
* test(nextcloud-talk): focus inbound sanitizer coverage
* fix(nextcloud-talk): report stripped replies as non-visible
* docs(changelog): note Nextcloud Talk reply sanitization
* chore: keep PR changelog-neutral
---------
Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: liyuanbin <li.yuanbin1@xydigit.com >
2026-07-10 18:17:19 +01:00
mushuiyu886
88acda11b8
fix(nextcloud-talk): keep error snippets UTF-16 safe ( #102949 )
...
* fix(nextcloud-talk): keep error snippets UTF-16 safe
* test(nextcloud-talk): assert exact safe error
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 18:21:26 +01:00
Alix-007
bebf0b98c1
fix(nextcloud-talk): add timeouts to Talk send requests ( #102025 )
...
* fix(nextcloud-talk): add timeouts to Talk send requests
* test(nextcloud-talk): simplify send timeout proof
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 11:49:48 +01:00
Alix-007
936136a707
fix(channels): prevent metadata caches from growing without bound ( #101650 )
...
* fix(discord): cap channel info cache size
* fix(channels): consolidate bounded metadata caches
---------
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com >
2026-07-07 06:47:37 -07:00
Peter Steinberger
a2a68d154b
fix(agent): preserve explicit recipient sessions ( #101507 )
...
* fix(agent): honor recipient session routing
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): preserve canonical recipient routes
* fix(agent): require exact recipient routes
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): harden recipient route resolution
* fix(imessage): require canonical recipient handles
* fix(agent): refine provider recipient exactness
* fix(agent): bound direct alias session routing
* fix(signal): preserve direct alias route type
* fix(agent): honor binding-scoped recipient sessions
* fix(routing): honor configured main session aliases
* fix(clickclack): align account-owned session routes
* fix(twitch): preserve canonical recipient sessions
* fix(routing): isolate stable outbound identities
* chore: defer recipient session changelog
* fix(sms): use dedicated channel SDK facade
---------
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
2026-07-07 10:07:13 +01:00
pick-cat
09167523bf
fix(nextcloud-talk): bound bot preflight error reads ( #97811 )
...
Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com >
2026-06-29 10:50:47 -07:00
Alix-007
d577cb2fe9
fix(nextcloud-talk): bound external send/reaction response reads to prevent OOM ( #96031 )
...
* fix(nextcloud-talk): bound external send/reaction response reads to prevent OOM
Nextcloud Talk talks to self-hosted servers whose HTTP responses are not
trusted to be small. The send and reaction paths buffered three external
bodies without any byte cap:
- success JSON via await response.json()
- send error text via await response.text()
- reaction error text via await response.text()
A hostile or misbehaving Nextcloud endpoint could stream an unbounded body
(no content-length) into memory, pressuring or hanging the plugin/provider
path. Cap success JSON at 16 MiB via readResponseWithLimit and collapse error
bodies to an 8 KiB readResponseTextSnippet, cancelling the stream on overflow.
The 'message sent but receipt JSON unreadable -> unknown' fallback is
preserved (an over-limit body now also routes through the existing catch).
This is the symmetric counterpart to the #95103/#95108 response-limit
campaign, reusing the shared @openclaw/media-core helpers (newly re-exported
from plugin-sdk/response-limit-runtime for plugin consumers).
* fix(nextcloud-talk): bound error bodies via public readResponseTextLimited (no new plugin-SDK surface)
Re-exporting readResponseTextSnippet from plugin-sdk/response-limit-runtime
pushed the public plugin-SDK export count past its surface budget, failing
plugin-sdk-surface-report.test.ts. Drop that re-export and instead bound the
Nextcloud Talk send/reaction error bodies through the already-public
readResponseTextLimited (openclaw/plugin-sdk/provider-http), collapsing the
bounded 8 KiB prefix to a short, log-safe snippet locally. Behavior is
unchanged for callers; no new plugin-SDK surface is introduced.
Success JSON still reads through readResponseWithLimit (16 MiB cap). The
committed bounded-response-reads Vitest suite continues to prove the caps
hold against 17 MiB streamed bodies with no content-length.
* fix(nextcloud-talk): reuse shared readProviderJsonResponse for send success JSON
The send success receipt parsed JSON by hand via readResponseWithLimit + a
local NEXTCLOUD_TALK_JSON_MAX_BYTES cap + JSON.parse(TextDecoder.decode(...)),
duplicating the shared provider-http helper that the sibling room-info.ts and
bot-preflight.ts already use. extensions/AGENTS.md forbids re-implementing
shared helpers locally.
Swap the hand-rolled block for the one-stop
readProviderJsonResponse<{ ocs?: ... }>(response, "Nextcloud Talk send"), which
reads through the same bounded reader and throws on overflow/malformed JSON, so
the outer try/catch still keeps the "unknown" receipt and behavior is
equivalent. The error path keeps readResponseTextLimited (text, not JSON).
2026-06-28 10:30:17 -04:00
dongdong
7b9f4aefa2
fix(nextcloud-talk): ignore signed non-message webhook events ( #96243 )
...
* fix(nextcloud-talk): ignore non-message webhook events
* fix(nextcloud-talk): acknowledge lifecycle webhook events
---------
Co-authored-by: Jasmine Zhang <jasminezhang@JasminedeMac-mini.local >
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com >
2026-06-24 11:15:48 +08:00
Vincent Koc
aad78d399c
test(extensions): use real response mocks
2026-06-23 22:00:32 +08:00
Peter Steinberger
bab18d567b
refactor(plugin-sdk): persist dedupe state in sqlite
2026-06-07 02:41:45 -07:00
Peter Steinberger
96e5812426
docs: document medium extension sources
2026-06-04 21:33:54 -04:00
Peter Steinberger
2df95c0b10
chore(lint): enable no-misused-promises
2026-05-31 20:42:13 +01:00
Peter Steinberger
304e2c83c0
chore(lint): enable stricter oxlint rules
2026-05-31 18:59:02 +01:00
Peter Steinberger
b9fe0894a6
chore(lint): enable additional cleanup rules
2026-05-31 08:16:11 +01:00
Peter Steinberger
4eba3e5d7d
chore(lint): enable more readability rules
2026-05-31 07:38:33 +01:00
Peter Steinberger
deb7bc6539
chore(lint): enable readability lint rules
2026-05-31 07:17:57 +01:00
Peter Steinberger
ed59629ccd
fix(nextcloud-talk): centralize integer coercion
2026-05-29 06:45:24 -04:00
Peter Steinberger
46f023d097
fix: validate nextcloud talk numeric flags
2026-05-28 15:52:39 -04:00
Peter Steinberger
f24844d801
fix: reject partial numeric parsing
2026-05-27 18:00:19 -04:00
Vincent Koc
00004ca798
fix(cli): wait for respawn child shutdown
2026-05-27 22:57:30 +02:00
Peter Steinberger
1507a9701b
refactor: centralize inbound supplemental context
...
* refactor: centralize inbound supplemental context
* refactor: trim supplemental finalizer typing
* docs: clarify supplemental context projection
* refactor: move inbound finalization into core
* refactor: simplify channel inbound facts
* refactor: fold supplemental media into inbound finalizer
* refactor: migrate channel inbound callers to builder
* docs: mark inbound finalizer compat types deprecated
* refactor: wire runtime turn context builder
* refactor: replace channel turn runtime API
* fix: respect discord quote visibility
* fix: avoid deprecated line dispatch helper
* refactor: deprecate channel message SDK seams
* docs: trim channel outbound SDK page
* test: migrate irc inbound assertion
* refactor: deprecate outbound SDK facades
* refactor: deprecate channel helper SDK facades
* refactor: deprecate channel streaming SDK facade
* refactor: move direct dm helpers into inbound SDK
* chore: mark legacy test-utils SDK alias deprecated
* refactor: remove unused allow-from read helper
* refactor: route remaining channel dispatch through core
* refactor: enforce modern extension SDK imports
* test: give slow image root tests more time
* ci: support node fallback on windows
* fix: add transcripts tool display metadata
* refactor: trim legacy channel test seams
* fix: preserve channel compat after rebase
* fix: keep deprecated channel inbound aliases
* fix: preserve discord thread context visibility
* fix: clean final rebase conflicts
* fix: preserve channel message dispatch aliases
* fix: sync channel refactor after rebase
* fix: sync channel refactor after latest main
* fix: dedupe memory-core subagent mock
* test: align clickclack inbound dispatch assertions
* fix: sync plugin sdk api hash after rebase
* fix: sync channel refactor after latest main
* fix: sync plugin sdk api hash after rebase
* fix: sync plugin sdk api hash after latest main
* test: remove stale inbound context awaits
2026-05-27 09:26:06 +01:00
Dallin Romney
90fd26b602
fix(infra): restore symlink rejection in tryReadSecretFileSync ( #84711 )
...
* fix(infra): restore symlink rejection in tryReadSecretFileSync
The local wrapper added in 9e4eca00ff swallowed all errors from
@openclaw/fs-safe@0.2.7's tryReadSecretFileSync via a bare try/catch,
silently downgrading every rejectSymlink: true caller (Telegram, LINE,
Zalo, IRC, Nextcloud Talk credential files) to accept symlinked
credential files. It also broke the infra-state CI shard's symlink
expectation that #84595 had just realigned with the new fail-closed
upstream contract.
Restore the direct re-export so the upstream contract surfaces:
undefined for blank/missing/not-found, FsSafeError for symlink,
oversize, non-regular file, and hardlink validation failures.
* test(plugins): align stale symlink tests with fail-closed contract
5 token/account resolver tests still asserted the pre-fs-safe-0.2.7
"silent skip" behavior (token: "", source: "none") on rejected symlinks;
they passed only because the swallow-all wrapper in secret-file.ts hid
the throw. Restoring the upstream fail-closed contract surfaces the
throw, so update the tests to expect FsSafeError.
inspectTelegramAccount reports credential status (its return type has an
explicit configured_unavailable state for "configured but unreadable"),
so its callsite is the right boundary to catch the FsSafeError and map
it to configured_unavailable rather than letting the throw bubble.
Affected:
- extensions/zalo/src/token.test.ts
- extensions/line/src/accounts.test.ts
- extensions/telegram/src/token.test.ts
- extensions/irc/src/accounts.test.ts
- extensions/nextcloud-talk/src/setup.test.ts
- extensions/telegram/src/account-inspect.ts (catch + report status)
2026-05-20 15:21:13 -07:00
nitinjwadhawan
9995e1b4d5
fix(nextcloud-talk): dispatch react action so agents can send reactions ( #70110 ) ( #72348 )
...
Summary:
- This PR adds and registers a Nextcloud Talk message action adapter for add-only reactions, updates reaction docs, and adds adapter plus sender tests.
- Reproducibility: yes. Source inspection on current main shows Nextcloud Talk advertises reactions and has a ... ion sender, but the plugin lacks `actions.handleAction`, so shared `react` dispatch has no channel handler.
Automerge notes:
- PR branch already contained follow-up commit before automerge: test(nextcloud-talk): cover reaction sender request path
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): harden react null-guard; fix disabled-account te…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): reject react remove requests instead of silently…
- PR branch already contained follow-up commit before automerge: fix(nextcloud-talk): inline listEnabledAccounts helper after main cle…
- PR branch already contained follow-up commit before automerge: docs(nextcloud-talk): note add-only react support in reactions and me…
Validation:
- ClawSweeper review passed for head 9817fed842 .
- Required merge gates passed before the squash merge.
Prepared head SHA: 9817fed842
Review: https://github.com/openclaw/openclaw/pull/72348#issuecomment-4323046928
Co-authored-by: NW <nitinwadhawan66@gmail.com >
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com >
2026-05-18 18:54:44 +00:00
Peter Steinberger
4f4d108639
chore(lint): remove underscore-dangle allow list ( #83542 )
...
* chore(lint): reduce underscore-dangle exceptions
* chore(lint): reduce more underscore exceptions
* chore(lint): remove underscore-dangle allow list
* fix(lint): repair underscore cleanup regressions
* test(lint): track version define suppression
2026-05-18 14:56:06 +01:00
Peter Steinberger
16ef041b5d
fix(channels): preserve implicit default accounts
2026-05-17 06:42:28 +01:00
Peter Steinberger
40789da1ef
fix(wizard): narrow setup i18n SDK surface
2026-05-15 15:33:27 +01:00
MrBrain
6472b05fad
feat(plugins): localize channel setup wizards
2026-05-15 15:33:27 +01:00
Vincent Koc
376a792100
fix(nextcloud-talk): wrap malformed api json
2026-05-15 08:49:50 +08:00
Peter Steinberger
694ca50e97
Revert "refactor: move runtime state to SQLite"
...
This reverts commit f91de52f0d .
2026-05-13 13:33:38 +01:00
Peter Steinberger
f91de52f0d
refactor: move runtime state to SQLite
...
* refactor: remove stale file-backed shims
* fix: harden sqlite state ci boundaries
* refactor: store matrix idb snapshots in sqlite
* fix: satisfy rebased CI guardrails
* refactor: store current conversation bindings in sqlite table
* refactor: store tui last sessions in sqlite table
* refactor: reset sqlite schema history
* refactor: drop unshipped sqlite table migration
* refactor: remove plugin index file rollback
* refactor: drop unshipped sqlite sidecar migrations
* refactor: remove runtime commitments kv migration
* refactor: preserve kysely sync result types
* refactor: drop unshipped sqlite schema migration table
* test: keep session usage coverage sqlite-backed
* refactor: keep sqlite migration doctor-only
* refactor: isolate device legacy imports
* refactor: isolate push voicewake legacy imports
* refactor: isolate remaining runtime legacy imports
* refactor: tighten sqlite migration guardrails
* test: cover sqlite persisted enum parsing
* refactor: isolate legacy update and tui imports
* refactor: tighten sqlite state ownership
* refactor: move legacy imports behind doctor
* refactor: remove legacy session row lookup
* refactor: canonicalize memory transcript locators
* refactor: drop transcript path scope fallbacks
* refactor: drop runtime legacy session delivery pruning
* refactor: store tts prefs only in sqlite
* refactor: remove cron store path runtime
* refactor: use cron sqlite store keys
* refactor: rename telegram message cache scope
* refactor: read memory dreaming status from sqlite
* refactor: rename cron status store key
* refactor: stop remembering transcript file paths
* test: use sqlite locators in agent fixtures
* refactor: remove file-shaped commitments and cron store surfaces
* refactor: keep compaction transcript handles out of session rows
* refactor: derive transcript handles from session identity
* refactor: derive runtime transcript handles
* refactor: remove gateway session locator reads
* refactor: remove transcript locator from session rows
* refactor: store raw stream diagnostics in sqlite
* refactor: remove file-shaped transcript rotation
* refactor: hide legacy trajectory paths from runtime
* refactor: remove runtime transcript file bridges
* refactor: repair database-first rebase fallout
* refactor: align tests with database-first state
* refactor: remove transcript file handoffs
* refactor: sync post-compaction memory by transcript scope
* refactor: run codex app-server sessions by id
* refactor: bind codex runtime state by session id
* refactor: pass memory transcripts by sqlite scope
* refactor: remove transcript locator cleanup leftovers
* test: remove stale transcript file fixtures
* refactor: remove transcript locator test helper
* test: make cron sqlite keys explicit
* test: remove cron runtime store paths
* test: remove stale session file fixtures
* test: use sqlite cron keys in diagnostics
* refactor: remove runtime delivery queue backfill
* test: drop fake export session file mocks
* refactor: rename acp session read failure flag
* refactor: rename acp row session key
* refactor: remove session store test seams
* refactor: move legacy session parser tests to doctor
* refactor: reindex managed memory in place
* refactor: drop stale session store wording
* refactor: rename session row helpers
* refactor: rename sqlite session entry modules
* refactor: remove transcript locator leftovers
* refactor: trim file-era audit wording
* refactor: clean managed media through sqlite
* fix: prefer explicit agent for exports
* fix: use prepared agent for session resets
* fix: canonicalize legacy codex binding import
* test: rename state cleanup helper
* docs: align backup docs with sqlite state
* refactor: drop legacy Pi usage auth fallback
* refactor: move legacy auth profile imports to doctor
* refactor: keep Pi model discovery auth in memory
* refactor: remove MSTeams legacy learning key fallback
* refactor: store model catalog config in sqlite
* refactor: use sqlite model catalog at runtime
* refactor: remove model json compatibility aliases
* refactor: store auth profiles in sqlite
* refactor: seed copied auth profiles in sqlite
* refactor: make auth profile runtime sqlite-addressed
* refactor: migrate hermes secrets into sqlite auth store
* refactor: move plugin install config migration to doctor
* refactor: rename plugin index audit checks
* test: drop auth file assumptions
* test: remove legacy transcript file assertions
* refactor: drop legacy cli session aliases
* refactor: store skill uploads in sqlite
* refactor: keep subagent attachments in sqlite vfs
* refactor: drop subagent attachment cleanup state
* refactor: move legacy session aliases to doctor
* refactor: require node 24 for sqlite state runtime
* refactor: move provider caches into sqlite state
* fix: harden virtual agent filesystem
* refactor: enforce database-first runtime state
* refactor: rename compaction transcript rotation setting
* test: clean sqlite refactor test types
* refactor: consolidate sqlite runtime state
* refactor: model session conversations in sqlite
* refactor: stop deriving cron delivery from session keys
* refactor: stop classifying sessions from key shape
* refactor: hydrate announce targets from typed delivery
* refactor: route heartbeat delivery from typed sqlite context
* refactor: tighten typed sqlite session routing
* refactor: remove session origin routing shadow
* refactor: drop session origin shadow fixtures
* perf: query sqlite vfs paths by prefix
* refactor: use typed conversation metadata for sessions
* refactor: prefer typed session routing metadata
* refactor: require typed session routing metadata
* refactor: resolve group tool policy from typed sessions
* refactor: delete dead session thread info bridge
* Show Codex subscription reset times in channel errors (#80456 )
* feat(plugin-sdk): consolidate session workflow APIs
* fix(agents): allow read-only agent mount reads
* [codex] refresh plugin regression fixtures
* fix(agents): restore compaction gateway logs
* test: tighten gateway startup assertions
* Redact persisted secret-shaped payloads [AI] (#79006 )
* test: tighten device pair notify assertions
* test: tighten hermes secret assertions
* test: assert matrix client error shapes
* test: assert config compat warnings
* fix(heartbeat): remap cron-run exec events to session keys (#80214 )
* fix(codex): route btw through native side threads
* fix(auth): accept friendly OpenAI order for Codex profiles
* fix(codex): rotate auth profiles inside harness
* fix: keep browser status page probe within timeout
* test: assert agents add outputs
* test: pin cron read status
* fix(agents): avoid Pi resource discovery stalls
Co-authored-by: dataCenter430 <titan032000@gmail.com >
* fix: retire timed-out codex app-server clients
* test: tighten qa lab runtime assertions
* test: check security fix outputs
* test: verify extension runtime messages
* feat(wake): expose typed sessionKey on wake protocol + system event CLI
* fix(gateway): await session_end during shutdown drain and track channel + compaction lifecycle paths (#57790 )
* test: guard talk consult call helper
* fix(codex): scale context engine projection (#80761 )
* fix(codex): scale context engine projection
* fix: document Codex context projection scaling
* fix: document Codex context projection scaling
* fix: document Codex context projection scaling
* fix: document Codex context projection scaling
* chore: align Codex projection changelog
* chore: realign Codex projection changelog
* fix: isolate Codex projection patch
---------
Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org >
Co-authored-by: Josh Lehman <josh@martian.engineering >
* refactor: move agent runtime state toward piless
* refactor: remove cron session reaper
* refactor: move session management to sqlite
* refactor: finish database-first state migration
* chore: refresh generated sqlite db types
* refactor: remove stale file-backed shims
* test: harden kysely type coverage
# Conflicts:
# .agents/skills/kysely-database-access/SKILL.md
# src/infra/kysely-sync.types.test.ts
# src/proxy-capture/store.sqlite.test.ts
# src/state/openclaw-agent-db.test.ts
# src/state/openclaw-state-db.test.ts
* refactor: remove cron store path runtime
* refactor: keep compaction transcript handles out of session rows
* refactor: derive embedded transcripts from sqlite identity
* refactor: remove embedded transcript locator handoff
* refactor: remove runtime transcript file bridges
* refactor: remove transcript file handoffs
* refactor: remove MSTeams legacy learning key fallback
* refactor: store model catalog config in sqlite
* refactor: use sqlite model catalog at runtime
# Conflicts:
# docs/cli/secrets.md
# docs/gateway/authentication.md
# docs/gateway/secrets.md
* fix: keep oauth sibling sync sqlite-local
# Conflicts:
# src/commands/onboard-auth.test.ts
* refactor: remove task session store maintenance
# Conflicts:
# src/commands/tasks.ts
* refactor: keep diagnostics in state sqlite
* refactor: enforce database-first runtime state
* refactor: consolidate sqlite runtime state
* Show Codex subscription reset times in channel errors (#80456 )
* fix(codex): refresh subscription limit resets
* fix(codex): format reset times for channels
* Update CHANGELOG with latest changes and fixes
Updated CHANGELOG with recent fixes and improvements.
* fix(codex): keep command load failures on codex surface
* fix(codex): format account rate limits as rows
* fix(codex): summarize account limits as usage status
* fix(codex): simplify account limit status
* test: tighten subagent announce queue assertion
* test: tighten session delete lifecycle assertions
* test: tighten cron ops assertions
* fix: track cron execution milestones
* test: tighten hermes secret assertions
* test: assert matrix sync store payloads
* test: assert config compat warnings
* fix(codex): align btw side thread semantics
* fix(codex): honor codex fallback blocking
* fix(agents): avoid Pi resource discovery stalls
* test: tighten codex event assertions
* test: tighten cron assertions
* Fix Codex app-server OAuth harness auth
* refactor: move agent runtime state toward piless
* refactor: move device and push state to sqlite
* refactor: move runtime json state imports to doctor
* refactor: finish database-first state migration
* chore: refresh generated sqlite db types
* refactor: clarify cron sqlite store keys
* refactor: remove stale file-backed shims
* refactor: bind codex runtime state by session id
* test: expect sqlite trajectory branch export
* refactor: rename session row helpers
* fix: keep legacy device identity import in doctor
* refactor: enforce database-first runtime state
* refactor: consolidate sqlite runtime state
* build: align pi contract wrappers
* chore: repair database-first rebase
* refactor: remove session file test contracts
* test: update gateway session expectations
* refactor: stop routing from session compatibility shadows
* refactor: stop persisting session route shadows
* refactor: use typed delivery context in clients
* refactor: stop echoing session route shadows
* refactor: repair embedded runner rebase imports
# Conflicts:
# src/agents/pi-embedded-runner/run/attempt.tool-call-argument-repair.ts
* refactor: align pi contract imports
* refactor: satisfy kysely sync helper guard
* refactor: remove file transcript bridge remnants
* refactor: remove session locator compatibility
* refactor: remove session file test contracts
* refactor: keep rebase database-first clean
* refactor: remove session file assumptions from e2e
* docs: clarify database-first goal state
* test: remove legacy store markers from sqlite runtime tests
* refactor: remove legacy store assumptions from runtime seams
* refactor: align sqlite runtime helper seams
* test: update memory recall sqlite audit mock
* refactor: align database-first runtime type seams
* test: clarify doctor cron legacy store names
* fix: preserve sqlite session route projections
* test: fix copilot token cache test syntax
* docs: update database-first proof status
* test: align database-first test fixtures
* docs: update database-first proof status
* refactor: clean extension database-first drift
* test: align agent session route proof
* test: clarify doctor legacy path fixtures
* chore: clean database-first changed checks
* chore: repair database-first rebase markers
* build: allow baileys git subdependency
* chore: repair exp-vfs rebase drift
* chore: finish exp-vfs rebase cleanup
* chore: satisfy rebase lint drift
* chore: fix qqbot rebase type seam
* chore: fix rebase drift leftovers
* fix: keep auth profile oauth secrets out of sqlite
* fix: repair rebase drift tests
* test: stabilize pairing request ordering
* test: use source manifests in plugin contract checks
* fix: restore gateway session metadata after rebase
* fix: repair database-first rebase drift
* fix: clean up database-first rebase fallout
* test: stabilize line quick reply receipt time
* fix: repair extension rebase drift
* test: keep transcript redaction tests sqlite-backed
* fix: carry injected transcript redaction through sqlite
* chore: clean database branch rebase residue
* fix: repair database branch CI drift
* fix: repair database branch CI guard drift
* fix: stabilize oauth tls preflight test
* test: align database branch fast guards
* test: repair build artifact boundary guards
* chore: clean changelog rebase markers
---------
Co-authored-by: pashpashpash <nik@vault77.ai >
Co-authored-by: Eva <eva@100yen.org >
Co-authored-by: stainlu <stainlu@newtype-ai.org >
Co-authored-by: Jason Zhou <jason.zhou.design@gmail.com >
Co-authored-by: Ruben Cuevas <hi@rubencu.com >
Co-authored-by: Pavan Kumar Gondhi <pavangondhi@gmail.com >
Co-authored-by: Shakker <shakkerdroid@gmail.com >
Co-authored-by: Kaspre <36520309+Kaspre@users.noreply.github.com >
Co-authored-by: dataCenter430 <titan032000@gmail.com >
Co-authored-by: Kaspre <kaspre@gmail.com >
Co-authored-by: pandadev66 <nova.full.stack@outlook.com >
Co-authored-by: Eva <admin@100yen.org >
Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org >
Co-authored-by: Josh Lehman <josh@martian.engineering >
Co-authored-by: jeffjhunter <support@aipersonamethod.com >
2026-05-13 13:15:12 +01:00
Peter Steinberger
cce9a9ef2a
test: guard mixed extension mock calls
2026-05-12 10:10:52 +01:00
Peter Steinberger
1f167178f2
test: guard messaging provider mock calls
2026-05-12 00:00:46 +01:00
Shakker
f528a70a8f
test: tighten nextcloud preflight assertions
2026-05-11 08:06:51 +01:00
Shakker
abbb598986
test: tighten nextcloud replay status assertions
2026-05-11 08:01:20 +01:00
Shakker
5dfcc9dd5e
test: tighten nextcloud talk send receipt assertions
2026-05-11 07:38:00 +01:00
Shakker
5751b0004b
test: tighten nextcloud talk route assertion
2026-05-11 07:28:11 +01:00
Shakker
bcb61b8ac7
test: tighten nextcloud talk setup assertions
2026-05-11 07:26:36 +01:00
Shakker
32c1ba77b6
test: tighten nextcloud doctor warning assertion
2026-05-11 00:40:01 +01:00
Shakker
33186ae9eb
test: tighten nextcloud bot preflight message assertion
2026-05-11 00:36:40 +01:00
Peter Steinberger
f3ee9e26f9
test: clear broad mock helper lint
2026-05-10 17:06:15 +01:00
Shakker
d0ef22dbda
test: clear nextcloud talk broad matchers
2026-05-10 16:28:56 +01:00
Peter Steinberger
827b0de0ce
refactor: reduce plugin sdk surface
2026-05-10 12:37:10 +01:00
Peter Steinberger
a0fb7fb045
refactor: centralize channel ingress access
2026-05-10 00:18:36 -04:00
Peter Steinberger
a4b17d65a8
refactor: consolidate message delivery API
2026-05-09 07:04:04 +01:00
Josh Avant
024528c937
fix(nextcloud-talk): detect missing bot response feature ( #79657 )
...
* fix(nextcloud-talk): detect missing bot response feature
* docs(changelog): note nextcloud talk response fix
2026-05-09 00:06:44 -05:00