From a31a056f61ba5b599511783153c7c9df81062c8a Mon Sep 17 00:00:00 2001 From: Parfii-bot Date: Sat, 2 May 2026 13:07:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(graph):=20live=20runtime=20DNA=20viewer=20?= =?UTF-8?q?=E2=80=94=20kei-graph-export=20+=20lbm-graph-viz=20adapter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User pushback: "можно нашего Кейси подключить к обсидиан? будет в онлайне строить граф из всех наших агентов?" Closer-to-question architecture: don't build new Obsidian plugin — re-use the legacy `~/Projects/lbm-graph-viz/` D3 viewer (lineage: keicode → living-graph → lbm → lbm-graph-viz → keisei-graph). Strip its Hebbian/co-change edges, replace with DNA-derived edges from the kei-registry + kei-ledger. Open in any browser, file://...index.html. NEW Rust crate `_primitives/_rust/kei-graph-export/` (~440 LOC, 5 files) Reads: ~/.claude/registry.sqlite (730 active blocks) ~/.claude/agents/ledger.sqlite (6 agents post-cleanup) _manifests/*.toml (38 agent manifests) Emits 581-node, 291-edge graph. Edge types: block_dep 171 manifest → atom (blocks=[]) path_ref 99 manifest → atom (path:NAME refs) branch_lineage 11 parent_branch → branch agent_uses_manifest 10 agent → manifest (slug from branch name) Output formats: --format spaces-fragment → `window.RUNTIME_SPACE = {...}` JS file --format json → raw {nodes, links} for downstream tools Block-name lookup is multi-resolution: each block is registered under display name + lowercased + file-stem slug (from path basename) so manifest references like `blocks = ["baseline"]` resolve to a registry row whose `name` column holds "BASELINE — inherit from Main Claude". Without this fix the graph had 0 block_dep edges; with it, 171. NEW background updater `hooks/graph-export-watcher.sh` + launchd plist template `_primitives/templates/io.keisei.graph-export.plist` 5-second loop: while true; do kei-graph-export --format spaces-fragment --output /data-runtime.js.tmp mv /data-runtime.js.tmp /data-runtime.js # atomic sleep 5 done launchd plist substitutes `HOME_DIR` and `HOOKS_DIR` placeholders at install time. RunAtLoad=true, KeepAlive=true. Logs to ~/.claude/memory/graph-export.log. Bypass: GRAPH_EXPORT_BYPASS=1. Loaded into user-side launchd (PID 16474 confirmed running). File mtime advances every 5s — live updates verified. PATCH `~/Projects/lbm-graph-viz/index.html` (outside kit, surgical) Three changes: 1. Add `