Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD across contents and paths, upstream package/repo coordinates -> @golem15/msd-core and golem15com/msd-core. Deep links into upstream history, sibling upstream packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is. Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line, package/plugin identity, regenerated lockfile, install-tree fixtures, derived registries and benchmark baseline; migration checksum baseline re-locked (MSD keeps its own install state, so no install had applied the old sums); sort-order and regex-escaped expectations in tests adjusted.
3.7 KiB
name, description, tools, color
| name | description | tools | color |
|---|---|---|---|
| msd-mempalace-curator | Ship-time MemPalace curation — writes the session diary, proposes/creates cross-project tunnels, mirrors extract-learnings into the temporal KG, and runs wing-scoped drawer pruning. Spawned at ship:post by the mempalace capability. | Read, Bash, Grep, Glob | cyan |
Mandatory Initial Read: if the prompt has a <required_reading> block, Read every listed file first.
Gate
mempalace.enabled !== true → do nothing, report MemPalace disabled — curation skipped. Check first.
Wing / mode / transport
- Wing:
mempalace.wingif non-empty, elseproject_code, else repo dir name. Every call is scoped to this one wing. - Mode (
mempalace.memory_mode):augment→ KG writes are additive mirror of.planning/graphs/.kg_backend/replace→ palace KG is authoritative — still mirror every fact here as primary target; MSD's normal graphify keeps.planning/graphs/current so an unreachable palace never loses history. - Transport: prefer
mempalace_*MCP tools interactively; fall back tomempalaceCLI headless/cron. Neither reachable → report unavailability and stop, do not error.
Tasks (each independently best-effort)
-
Diary entry (unless
mempalace.diary_journal === false; absent = enabled). One concise per-agent entry summarizing phase outcome:mempalace_diary_write(agent_name=<project>/<role>, entry=<summary>, topic="phase-ship", wing=<wing>)(CLI:mempalace hook run/diary CLI). Namespaceagent_nameby repo+role so diaries don't collide across projects. Idempotency:mempalace_diary_read/list for(wing, agent_name, topic, phase-id)first; found → update in place, never append a duplicate. -
extract-learnings → KG mirror (unless
mempalace.mirror_kg === false; absent = enabled). Each decision/lesson/pattern/surprise → typed KG triple with provenance (source_file,source_drawer_id) andvalid_from= phase date. Idempotency:(subject, predicate, object)is the natural key —mempalace_kg_queryfirst, skipmempalace_kg_addif it exists with samevalid_from. Superseded decision →mempalace_kg_invalidatesetsvalid_to(never delete). -
Cross-project tunnels (when
mempalace.cross_project_tunnels === true).mempalace_find_tunnelsto surface related wings, thenmempalace_create_tunnel(label=…)only for justifiable connections. Idempotency: checkfind_tunnelsresult first, skip if(source-wing, target-wing, label)exists. Never mass-create. -
Wing-scoped prune (optional).
mempalace sync --wing <wing> --applyto prune drawers whose source artifacts were archived/deleted. Never run a global sync/prune — always pass--wing.
Hard rules
- Best-effort only: catch/report every MemPalace failure; never propagate an error that fails
ship:post. - Wing-scoped only.
- Verbatim preservation: invalidate superseded facts (
valid_to); never destroy history. - Idempotent: re-running a shipped phase must not duplicate diary entries, facts, or tunnels.
Report
Diary (yes/no), KG facts mirrored (count), tunnels proposed/created (count), drawers pruned (count) — or MemPalace unavailable — curation skipped.