skills/memstate/scripts/memstate_remember.py (2165 bytes)
1 #!/usr/bin/env python3 2 """Store a markdown summary (memstated). 3 4 Two modes: 5 - explicit: pass --keypath to write the whole content at that path. 6 - extract: omit --keypath; each `## heading` in the markdown becomes its 7 own keypath (deeper headings nest via dot segments). Use --root 8 to apply a common prefix to every extracted keypath. 9 10 --scope user writes to the reserved user scope. Only sections that land at 11 preferences.* or profile.* pass the daemon's allowlist there; host facts 12 need an explicit --keypath host.<host_slug>.env.* or .tools.*. One bad 13 section rejects the whole call, nothing is written. 14 15 Server response (both modes): { method, items: [{keypath, action, stored, superseded?}] }. 16 """ 17 import argparse 18 import sys 19 20 from _client import add_scope_args, add_write_args, check_write_target, post, resolve_project 21 22 23 def main() -> int: 24 ap = argparse.ArgumentParser(description="Save a markdown summary") 25 add_scope_args(ap) 26 add_write_args(ap) 27 ap.add_argument("--keypath", default=None, 28 help="optional — omit to extract keypaths from ## headings") 29 ap.add_argument("--content", required=True) 30 ap.add_argument("--source", default=None) 31 ap.add_argument("--root", default=None, 32 help="optional prefix applied to every extracted keypath") 33 ap.add_argument("--category", default=None, 34 help="optional label applied to every written section") 35 ap.add_argument("--topics", default=None, 36 help="comma-separated tags applied to every written section") 37 args = ap.parse_args() 38 39 project = resolve_project(args) 40 check_write_target(args, project) 41 body = { 42 "project_id": project, 43 "content": args.content, 44 } 45 if args.keypath: 46 body["keypath"] = args.keypath 47 if args.source: 48 body["source"] = args.source 49 if args.root: 50 body["root"] = args.root 51 if args.category: 52 body["category"] = args.category 53 if args.topics: 54 body["topics"] = args.topics.split(",") 55 return post("/memories/remember", body) 56 57 58 if __name__ == "__main__": 59 sys.exit(main())