openclaw/config
Josh Lehman a9f675839a
feat(memory): resolve the memory audience in the host (#162176)
* feat(memory): resolve the memory audience in the host

Memory providers had to re-derive whether a caller acts for the agent
owner privately or for one conversation, walking spawn lineage through
session lookups.

When the memory slot owner registers providerRuntime, the host mints a
MemoryAudience (owner-private, or one exact conversation) from the
admitted turn entry and, for spawned children, the exact parent key,
session ID, lifecycle revision (or its recorded absence), and captured
owner bit of every hop. Memory Core and other legacy owners resolve no
audience: their turns take no session leases, read no lineage, and log
nothing new. Native, ACP, and realtime voice consult children record the trusted
spawning sender's owner status and parent incarnation so that lineage
survives session creation, reset, and rollover. The receipt stores the
parent session id as spawnedBySessionId, so navigation's parentSessionId
and sessions.list stay unchanged; a child of a parent without a lifecycle revision,
such as a channel-created group row, records that absence. Incomplete or
stale lineage yields no audience; only a spawned row without the owner
receipt predates the lineage receipts, and it logs a respawn
instruction. A parent without a stored row spawns as before. Spawn rechecks
a stored parent on the session read worker immediately before the child
commits. Parent rows are read on the session read worker, and every captured hop holds
a session generation lease, so currency checks stay synchronous and
read-free. Audiences are bound to their session, released when the
owning attempt or run ends, and delegated to same-agent children bound
to the child's current incarnation. The host checks currency before and
after opening a provider and around every provider call, and the guard
it passes to a provider includes audience currency. The memory slot
owner's own tools, Active Memory, and project recall also recheck it
before their effects; other plugin tools reach memory only through the
provider guard and do not fail on a stale audience.

Session authority, plugin tool contexts, hook contexts, and Codex
dynamic tools carry the audience. Native consumers cut over to it:
Active Memory trigger, deep, and summary recall (caches keyed by
audience; default deep-recall tools from the slot owner's
recallToolNames; trigger recall runs only while tool policy allows every
recall tool the provider declares), project recall, Memory Wiki,
post-compaction provider refresh, doctor memory status and recall/search
checks, and the status scan, which report provider health instead of
legacy index counters. Legacy owners keep their trigger-recall gate,
doctor and status ordering, and post-compaction sync without loading or
calling the slot plugin to decide.

* test(memory): consolidate memory audience tests

Fold the real session-owner audience test into the shared real-lineage
fixture, drop the spawn lineage unit test that the real-SQLite spawn tests
already cover, share spawn parameters, and remove cases that only mirrored
implementation (log text, mock passthrough, per-kind passthrough).

* test(talk): expect lineage receipts on consult children
2026-10-02 15:19:58 -07:00
..
oxlint feat(lint): enforce no-chained-type-assertions (#124119) 2026-08-15 02:13:37 -07:00
tsconfig perf(lint): narrow source project discovery (#160311) 2026-09-28 22:00:36 +07:00
assertion-safety-baseline.txt fix(discord): scope active thread lists to allowed channel (#160629) 2026-10-02 15:10:57 -07:00
ci-test-timings.json chore(ci): record measured hosted release shard costs (#163437) 2026-10-02 06:06:49 -05:00
control-ui-startup-budget-baseline.json feat(macos): show web composer badges and session actions in the sidebar (#163193) 2026-10-01 23:14:58 -05:00
env-var-count-budget.txt fix(ci): restore the OPENCLAW_* env-var budget 2026-10-02 08:29:14 -07:00
knip.all-exports.config.ts build(apps): generate native protocol models at build time (#162251) 2026-10-01 11:43:36 -07:00
knip.config.ts test(gateway): add sustained heap retention diagnostics (#163764) 2026-10-02 20:50:09 +00:00
knip.scripts-exports.config.ts build(apps): generate native protocol models at build time (#162251) 2026-10-01 11:43:36 -07:00
markdownlint-cli2.jsonc
markdownlint-templates.jsonc fix(tooling): run markdownlint on workspace templates (#91160) (#117166) 2026-08-28 12:21:13 -07:00
max-lines-baseline.txt feat(memory): resolve the memory audience in the host (#162176) 2026-10-02 15:19:58 -07:00
shellcheckrc
stylelint.config.mjs perf(ui): stop Web Awesome's page rule from restyling html and body on every insertion (#160833) 2026-09-28 17:48:58 -07:00
swiftformat chore(deps): refresh macOS and iOS app dependencies (#135592) 2026-09-01 16:31:14 -07:00
swiftlint.yml feat(macos): add a --no-activate launch flag for background automation (#163758) 2026-10-02 20:38:09 +00:00
test-timeout-race-baseline.txt test(gateway,plugins,state): remove low-value tests (batch d149) (#163502) 2026-10-02 12:30:15 +00:00