P3: store group — kv_* + file_* tools (agent memory)

RegisterStore(reg, StoreDeps) registers the persistent-memory tools over the
host's KV and/or File backends:
- kv_get/set/list/delete (KVStorage seam)
- file_save/get/get_text/get_metadata/list/delete (FileStorage seam), plus
  file_search (FileSearcher) and create_file_url (FileTokenMinter) when wired.

Near-zero-config: Quota defaults to a generous static cap (staticQuota), the
per-value/per-file caps default, and the kv vs file groups register
independently (a host can take just one). Seams moved clean (interface-only):
kv_storage.go, quota_provider.go, file_descendant_grant.go. The default
in-memory KV/File backends come with contrib/store at P4.

Core go.sum still free of gorm/redis/discordgo/sqlite.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-26 22:06:46 -04:00
parent 1e201550b3
commit 78e6858751
17 changed files with 1565 additions and 5 deletions
+6 -5
View File
@@ -60,11 +60,12 @@ CORE (majordomo + stdlib):
compact/ context compactor (WithCompactor hook) [P2 ✓]
tools/ generic tool library: Register (think/now/ [P3 wip]
cite, zero-config) + RegisterMeta (classify/
extract_entities/summarize); seams in
research_providers.go/file_storage.go;
in-memory budget default. End-to-end "agent
calls a tool" test green. Remaining: web/net/
store/compose groups + their backends [P3]
extract_entities/summarize) + RegisterStore
(kv_*/file_*, default static quota); seams in
research_providers.go/file_storage.go/
kv_storage.go/quota_provider.go. End-to-end
"agent calls a tool" test green. Remaining:
web/net/compose groups + default backends [P3]
BATTERIES (opt-in siblings, each nil-safe + a default):
persona/ Agent noun + AgentStore seam + yml loader [P4]