3.3 KiB
.growmos/ file format
All files are UTF-8, deterministic (sorted keys, sorted rows) and safe to commit. JSONL rows are one JSON object per line.
sources.jsonl
{"id":"src_b33563055168","ref":"README.md","kind":"file","sha256":"…","title":"README.md",
"status":"extracted","added":"2026-08-17T10:00:00Z","updated":"…","extracted_at":"…",
"schema_version":1,"stats":{"entities":8,"relations":6}}
kind ∈ file (repo-relative path) · url · text (stdin/foreign file; body cached under cache/) · note (provenance label such as session:2026-08-17).
status ∈ pending · extracted · note · missing.
mentions.jsonl (append-only)
{"source":"src_…","chunk":0,"name":"A. Chen","type":"PERSON","description":"Approved ADR-001.","ts":"…","schema_version":1}
entities.jsonl
{"id":"person/alice-chen","name":"Alice Chen","type":"PERSON","description":"Owner of the Scheduler component.",
"sources":["src_a","src_b"],"mentions":2,"provisional":false,"created":"…","updated":"…","schema_version":1}
Ids are stable (<type>/<slug-of-first-seen-name>); name is the canonical display form and may change on resolution.
aliases.jsonl
{"alias":"A. Chen","type":"PERSON","entity":"person/alice-chen"}
relations.jsonl
{"id":"r_4e1920f801f6","source":"dependency/postgres","predicate":"replaces","target":"dependency/redis",
"sources":["src_a","src_b"],"confidence":2,"created":"…","updated":"…","schema_version":1,
"when":{"start":"2026-08","end":"ongoing"}}
id = hash of (source, normalized predicate, target). confidence = number of distinct sources (cross-document corroboration). when is optional.
profiles/.json
{"entity":"component/scheduler","summary":"…","key_facts":["…"],"time_range":{"start":"unknown","end":"ongoing"},
"sources_hash":"ab12cd34ef56","ts":"…"}
sources_hash is the hash of the entity's source set at write time; a mismatch marks the profile stale.
schema.json
{"version":1,"entity_types":["PERSON","ORGANIZATION","LOCATION","EVENT","ARTIFACT","COMPONENT",…],
"predicate_hints":["depends on","calls",…],"history":[{"version":1,"ts":"…","note":"init with preset 'software'"}]}
config.json
{"preset":"software","include":["README.md","docs/**/*.md",…],"exclude":["node_modules/**",…],
"max_docs_per_run":50,"max_entities_per_doc":40,"chunk_chars":6000,"profile_min_degree":3,
"resolve_batch_size":80,"gold_min":2,"review_days":7,"provider":{"name":"","extract_model":"","reason_model":""}}
state.json
Runs (last 200), pending_resummarize, open_packets (names handed out in the last resolution packet per type), last_sample, last_eval, counters.
eval/
gold/<doc>.json — {"source": "<ref>", "entities": [{"name","type"}], "relations": [{"source","target"}]} ·
aliases.json — {"<canonical form>": "<gold name>"} · last_report.json.
Packet payloads (what agents return)
Extraction: {"entities":[{"name","type","description"}],"relations":[{"source","predicate","target"}]}
Resolution: {"clusters":[{"canonical","aliases":[…]}]} (optionally "input_names":[…])
Profile: {"summary","key_facts":[…],"time_range":{"start","end"}}
The strict JSON schemas (for structured-output APIs) are in growmos.schema.