open-multi-agent/docs
Jack Chen 4fefaa8a78
feat: expose custom MemoryStore via TeamConfig.sharedMemoryStore (#157)
* feat: expose custom MemoryStore via TeamConfig.sharedMemoryStore (#156)

The MemoryStore interface was already public, and SharedMemory / TeamInfo
already used the interface internally. This adds the final user-config wire
so integrators can attach custom backends (Redis, Postgres, Engram, etc.)
without hacking SharedMemory private fields.

Priority: sharedMemoryStore > sharedMemory: true > no memory.
Fully backward-compatible: existing sharedMemory: true users see no change.
SDK-only: the CLI cannot pass runtime objects through JSON config.

Closes #156.

* fix: validate sharedMemoryStore shape and reject from CLI JSON

Addresses Codex P2 review on #157. Plain objects from untrusted JSON could
previously reach `new SharedMemory(plainObject)` and crash later on the first
`.set`/`.list` call with a cryptic TypeError.

Defense-in-depth:
- SharedMemory constructor performs a runtime shape check and throws a clear
  TypeError if the provided store does not implement get/set/list/delete/clear.
- CLI `asTeamConfig` explicitly rejects `sharedMemoryStore` in JSON with a
  message pointing to the SDK path, since this field is documented SDK-only.

Adds 4 tests covering malformed stores (plain object, partial interface,
null, Team constructor path).

* fix: route falsy-but-present sharedMemoryStore through shape check

Addresses Codex finding 2 on #157. The truthy gate silently skipped falsy
values (null, 0, ''), letting config bugs downgrade to the default in-memory
store or no memory instead of failing fast.

Switched to `!== undefined` so any present value reaches SharedMemory's
runtime shape check and throws a clear TypeError. Adds 2 tests: null as a
bogus store throws; omitting the field still honors `sharedMemory: true`.
2026-04-23 18:45:48 +08:00
..
cli.md feat: expose custom MemoryStore via TeamConfig.sharedMemoryStore (#157) 2026-04-23 18:45:48 +08:00