Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
539 commits
Select commit Hold shift + click to select a range
4f85249
chore(release): bump version to 0.18.1
linhdmn Jul 16, 2026
58f1d0d
chore(release): v0.18.2 Docker INT8 embed + HNSW-safe MCP
linhdmn Jul 16, 2026
e6d77ea
feat(docker): one-command setup with index + embed + MCP
linhdmn Jul 16, 2026
baf4877
update documents
linhdmn Jul 17, 2026
09f7980
feat: Optimized Local-First Vector Graph Engine (v3.7 P0) (#79)
linhdmn Jul 17, 2026
e31f225
chore(release): bump version to 0.19.0
linhdmn Jul 17, 2026
c4d5f35
feat(vector-engine): close P0 quality gate with A/B evidence (#80)
linhdmn Jul 17, 2026
78cacb4
chore(release): bump version to 0.19.1
linhdmn Jul 17, 2026
689b83a
feat(embed): day-2 resume — skip fresh, HNSW no-op, hash-aware stale …
linhdmn Jul 18, 2026
a4eb09c
feat(mcp): tool surface rationalization (FR-SURF-01..03) (#82)
linhdmn Jul 19, 2026
1cc531b
feat(lsp): hybrid typed resolve Go/TS + SURF soft-deprecate (#83)
linhdmn Jul 19, 2026
efaaddd
fix(mcp): restore search availability on mega-graph boot (#85)
linhdmn Jul 19, 2026
747f0e3
feat(graph): US-GF-03 query_graph NL scoped subgraph (#84)
linhdmn Jul 19, 2026
23dfb6b
feat(mcp): embed_control idle resume + full tool redundancy audit (#86)
linhdmn Jul 20, 2026
9b25fcb
fix: mega HNSW semantic_search OOM (FR-SEM-07 / REL-054) (#87)
linhdmn Jul 20, 2026
57ef9e8
fix: mega-safe concept_search, query_graph, get_clusters (REL-055) (#88)
linhdmn Jul 20, 2026
c7b3149
chore(mcp): hard-remove find_clones and leankg clones
linhdmn Jul 20, 2026
d6e93dc
feat(ui): LeanKG UI v2 graph shell (Phase 1) (#89)
linhdmn Jul 20, 2026
ede82a2
feat(ui): embed UI v2 for serve, Docker, and onrender (#90)
linhdmn Jul 20, 2026
aa999c1
chore(release): bump version to 0.19.2
linhdmn Jul 20, 2026
c28231f
docs: align agent skill/install with HTTP gate + prefer-order (#91)
linhdmn Jul 20, 2026
36ce9f1
fix(ui-v2): Service/Folder replace-graph; gate /api/file
linhdmn Jul 20, 2026
d6fcccc
fix(ui-v2): stale double-click handlers; rebake Render embed
linhdmn Jul 20, 2026
8163167
docs: credit GitNexus UI shell for ui-v2
linhdmn Jul 20, 2026
2b67a93
fix(web): resolve /api/file across LEANKG_PROJECT_DIRS
linhdmn Jul 20, 2026
6bc6688
fix(serve): open LeanKG /workspace, not MCP multi-repo cwd
linhdmn Jul 20, 2026
53cc71f
fix(ui-v2): re-switch project before container double-click expand
linhdmn Jul 21, 2026
cc5dc20
feat: procedural ontology auto-update while serving (#93)
linhdmn Jul 21, 2026
94bed69
feat(ui-v2): expand load-more pagination and folder sidebar
linhdmn Jul 21, 2026
2150d06
merge: origin/main into feature/ui-v2-service-expand
linhdmn Jul 21, 2026
155c504
fix(onrender): rebake ui-v2 embed and bust stale Docker UI cache
linhdmn Jul 21, 2026
79dc5cd
Merge pull request #92 from FreePeak/feature/ui-v2-service-expand
linhdmn Jul 21, 2026
4e58006
Update ui v2 on the render server
linhdmn Jul 21, 2026
992c68e
fix(onrender): multi-stage Docker build to stay under 8GB RAM
linhdmn Jul 21, 2026
0d60416
feat: hard-delete wake_up and search_by_environment
linhdmn Jul 21, 2026
1aaa621
Merge pull request #96 from FreePeak/feature/mcp-surf-hard-delete
linhdmn Jul 21, 2026
3511991
docs: capture graph-engineering curriculum gaps in PRD
linhdmn Jul 21, 2026
a0418ae
fix(onrender): bake demo index at /app and reject project=/
linhdmn Jul 21, 2026
5505666
feat: resolve markdown doc-code joins
linhdmn Jul 21, 2026
43325fd
Merge pull request #97 from FreePeak/feature/doc-join-quality
linhdmn Jul 21, 2026
6de4075
feat: honest edge provenance and company adoption waves
linhdmn Jul 22, 2026
6bd7cda
docs: prefer semantic_search before query_graph for NL
linhdmn Jul 22, 2026
52b28cd
Merge pull request #98 from FreePeak/feature/honest-edges
linhdmn Jul 22, 2026
62a6477
fix(ui-v2): replace invalid Sigma defaultDrawEdgeHover for Render build
linhdmn Jul 22, 2026
d84f9bb
Merge pull request #99 from FreePeak/fix/render-ui-tsc-edge-hover
linhdmn Jul 22, 2026
3f9f93e
v3.7.15 embed-doc-inventory
linhdmn Jul 23, 2026
c5cb0c6
fix: clear PR-introduced clippy warning; re-run unit + live tests
linhdmn Jul 23, 2026
8c81046
Merge pull request #100 from FreePeak/feat/v3.7.15embed-doc-inventory
linhdmn Jul 23, 2026
5989af2
feat(benchmark): add codegraph-style cross-tool agent A/B harness
linhdmn Jul 23, 2026
1a166f3
ci(release): automate semantic-version release pipeline
linhdmn Jul 23, 2026
66e4945
Merge pull request #102 from FreePeak/feature/ci-semantic-release
linhdmn Jul 23, 2026
2a41c57
ci(release): migrate Release Please to v4 config and manifest
linhdmn Jul 23, 2026
7070c8c
Merge pull request #103 from FreePeak/fix/release-please-v4-config
linhdmn Jul 23, 2026
3afda37
ci(release): set manifest.json value to the package version string
linhdmn Jul 23, 2026
8cb24e2
ci(release): set manifest.json value to the package version string
linhdmn Jul 23, 2026
19c4a3f
ci(release): add temporary dry-run test job
linhdmn Jul 23, 2026
dfdf3e3
ci(release): relax dry-run verify to allow empty version
linhdmn Jul 23, 2026
66a396f
ci(release): point dry-run target branch at the run branch
linhdmn Jul 23, 2026
181520d
ci(release): dry-run opens throwaway PR but skips release
linhdmn Jul 23, 2026
acb4d74
ci(release): put release-type alongside version in manifest.json
linhdmn Jul 23, 2026
3151a55
ci(release): use 'rust' release-type instead of 'cargo'
linhdmn Jul 23, 2026
1e0fa55
ci(release): use object manifest with release-type 'rust' and version
linhdmn Jul 23, 2026
200b4ef
fix(benchmark): wire MCP server correctly + audit attachment per run
linhdmn Jul 23, 2026
3b14445
ci(release): restore flat-string manifest now that release-type is rust
linhdmn Jul 23, 2026
0b2062f
ci(release): grant dry-run job write perms + auto-close its PR
linhdmn Jul 23, 2026
75b26c2
ci(release): also delete dry-run release branch after the run
linhdmn Jul 23, 2026
2287b39
ci(release): tolerate PR-create blocked by repo branch protection
linhdmn Jul 23, 2026
58604c9
Merge pull request #104 from FreePeak/fix/release-please-manifest-ver…
linhdmn Jul 23, 2026
cd94c95
Merge pull request #105 from FreePeak/test/release-please-dry-run
linhdmn Jul 23, 2026
68c4620
chore(main): release 0.19.5
github-actions[bot] Jul 23, 2026
43d0112
Merge pull request #106 from FreePeak/release-please--branches--main-…
linhdmn Jul 23, 2026
ef62ff7
Merge pull request #101 from FreePeak/feature/cross-tool-benchmark
linhdmn Jul 23, 2026
3f89fb1
fix: use html_url instead of url in release-please verify step
linhdmn Jul 23, 2026
019ce80
Merge pull request #109 from FreePeak/fix/release-url-output
linhdmn Jul 23, 2026
31cf126
chore(main): release 0.19.6
github-actions[bot] Jul 23, 2026
503ae7f
Merge pull request #108 from FreePeak/release-please--branches--main-…
linhdmn Jul 23, 2026
207256c
feat: dynamic ontology CRUD for agent memory
linhdmn Jul 24, 2026
686d84b
chore(main): release 0.19.7 (#114)
github-actions[bot] Jul 24, 2026
da8dcd7
feat(sources): add remote source indexing (GCP, git, local) (#111)
linhdmn Jul 25, 2026
3486ed1
feat: Docker reload without image rebuild (#115)
linhdmn Jul 25, 2026
7aa018d
feat(mcp): make semantic_search discoverable for AI agents (#113)
linhdmn Jul 25, 2026
ae5fd3d
chore(main): release 0.19.8 (#116)
github-actions[bot] Jul 25, 2026
78137dd
feat: PRD-in-KG pipeline with feature-flow mapping (#110)
linhdmn Jul 25, 2026
a6e625c
fix: remove gcs-e2e job from CI pipeline (#119)
linhdmn Jul 25, 2026
9b15f2a
chore(main): release 0.19.9 (#120)
github-actions[bot] Jul 25, 2026
5dab32d
feat: auto GRAPH_REPORT.md on index (US-GF-06 / FR-GF-13) (#122)
linhdmn Jul 25, 2026
4de3823
chore(main): release 0.19.10 (#123)
github-actions[bot] Jul 26, 2026
2f54ca3
feat: html export with dedupe, edge filter, and RCA fixes (FR-W2C-01.…
linhdmn Jul 26, 2026
e84697c
feat: live A/B benchmark for doc indexing + embedding (#121)
linhdmn Jul 26, 2026
e0effa9
chore(main): release 0.19.11 (#125)
github-actions[bot] Jul 26, 2026
e405841
feat: remote source indexing + hot-reload + doc semantic refresh (#126)
linhdmn Jul 27, 2026
3f094b4
chore(main): release 0.19.12 (#128)
github-actions[bot] Jul 27, 2026
bb94b5c
fix: asset-aware install.sh, release.yml annotated-tag + dispatch, ve…
linhdmn Jul 27, 2026
b422488
chore(main): release 0.19.13 (#129)
github-actions[bot] Jul 27, 2026
811d22f
fix: move tag-annotation step to release-please.yml (correct workflow)
linhdmn Jul 27, 2026
74a84f8
chore(main): release 0.19.14 (#130)
github-actions[bot] Jul 27, 2026
e72f798
fix: dispatch release.yml from release-please.yml
linhdmn Jul 27, 2026
ec1413d
chore(main): release 0.19.15 (#131)
github-actions[bot] Jul 27, 2026
33964fa
fix: replace softprops with gh release upload in release.yml
linhdmn Jul 27, 2026
f5e726e
fix: force bash shell for gh release upload step
linhdmn Jul 27, 2026
04ed867
ci: stop publish-crates from failing release.yml runs
Jul 27, 2026
2ffe891
ci: checkout the actual tag in release.yml
Jul 27, 2026
317bfdc
chore(main): release 0.19.16 (#132)
github-actions[bot] Jul 27, 2026
3e6b263
ci: fix release-please dispatch + crates.io User-Agent
Jul 27, 2026
f57267d
ci: create release page in release.yml upload step
Jul 27, 2026
080ebcd
ci: patch Cargo.toml version in publish-crates to match tag
Jul 27, 2026
a3b5590
feat: Swift Objective-C indexer wiring + Alamofire 10Q agent benchmar…
linhdmn Jul 28, 2026
d0712d5
chore(main): release 0.19.17 (#134)
github-actions[bot] Jul 28, 2026
f93f667
fix: trigger 0.19.18 after orphaned v0.19.17 tag collision
linhdmn Jul 28, 2026
4879e3a
chore(main): release 0.19.18 (#135)
github-actions[bot] Jul 28, 2026
0574d7d
ci: grant actions:write so release-please can dispatch release.yml
linhdmn Jul 28, 2026
8bb295e
ci: skip duplicate CI and graph update on release merges (#136)
linhdmn Jul 28, 2026
96ad5cc
fix: trigger 0.19.19 after ci-only commits since v0.19.18
linhdmn Jul 28, 2026
db1738d
chore(main): release 0.19.19 (#137)
github-actions[bot] Jul 28, 2026
3d9aa3f
fix: offline ARM64 embed under 5 min for mega-graphs (#139)
linhdmn Jul 28, 2026
23d3135
Add MCP Toplist rank badge (#138)
chrstphe Jul 28, 2026
8fdc27e
chore(main): release 0.19.20 (#140)
github-actions[bot] Jul 28, 2026
93969be
fix(mcp): keep HTTP MCP responsive during background embed (#141)
linhdmn Jul 28, 2026
0a053c2
Feat/semantic search ontology traversal (#127)
thientu Jul 28, 2026
9307e1e
chore(retrieval): revert unrelated style churn from #127 (#144)
linhdmn Jul 29, 2026
57dc76e
fix(embed): emit per-symbol references edges for FR-SEM-08 traversal …
linhdmn Jul 29, 2026
0778d7d
chore(main): release 0.19.21 (#142)
github-actions[bot] Jul 29, 2026
52868e0
docs(reports): PR #127 review-fix acceptance A/B on v0.19.21
linhdmn Jul 29, 2026
31faad6
feat(enterprise-docker): separate rocksdb into cozoserver sidecar (#143)
linhdmn Jul 29, 2026
954cde6
chore(main): release 0.19.22 (#148)
github-actions[bot] Jul 29, 2026
7012578
update readme
linhdmn Jul 29, 2026
3933401
update readme again LOL
linhdmn Jul 29, 2026
e2e2c61
chore(main): release 0.19.23 (#150)
github-actions[bot] Jul 29, 2026
24db52b
perf(indexer + embed): 5-min auto-index SLA + mark_stale bridge + 4x …
linhdmn Jul 30, 2026
61dbf68
chore(main): release 0.19.24 (#152)
github-actions[bot] Jul 30, 2026
3a2c069
chore(main): release 0.19.25 (#154)
github-actions[bot] Jul 30, 2026
249609b
fix(embed): break resume deadlock when state outlives vectors (P0) (#…
linhdmn Jul 31, 2026
aae085d
chore(main): release 0.19.26 (#156)
github-actions[bot] Jul 31, 2026
9d8ba94
feat: full Swift and Objective-C language support (#158)
linhdmn Aug 1, 2026
0d34a40
docs: add Cursor Cloud dev environment setup notes to AGENTS.md (#157)
linhdmn Aug 1, 2026
2c6ff37
chore(main): release 0.19.27 (#159)
github-actions[bot] Aug 1, 2026
f4dfe4b
feat(ui-v2): Wave 3 NL Query FAB + fix OnRender embeddings exit 101 (…
linhdmn Aug 1, 2026
d69aa35
chore(main): release 0.19.28 (#161)
github-actions[bot] Aug 1, 2026
6a820cd
feat(mcp): Wave 1b hard-delete load_layer + get_doc_structure
linhdmn Aug 1, 2026
b2de854
chore(main): release 0.19.29 (#162)
github-actions[bot] Aug 1, 2026
6822626
chore(tracker): reconcile stale PRD rows + re-sync JSON (Wave 0) (#163)
linhdmn Aug 1, 2026
cc401a4
feat(web): wave4 single-repo expand closeout — integration tests + li…
linhdmn Aug 1, 2026
d2a935e
test(sources): remote-source + refresh live closeouts (REL-SRC-01 / R…
linhdmn Aug 1, 2026
7e16271
chore(main): release 0.19.30 (#167)
github-actions[bot] Aug 1, 2026
df0f920
feat(ui-v2): cluster legend filters + incidents/env/conflicts panels …
linhdmn Aug 1, 2026
daed497
chore(tracker): mark US-UI2-08/09, FR-UI2-10/11 DONE (PR-11)
linhdmn Aug 1, 2026
f679a35
ci(release): embeddings build gate on release path (F2)
linhdmn Aug 1, 2026
a5acbbe
Merge pull request #168 from FreePeak/prd/ui2-cluster-ops-panels
linhdmn Aug 1, 2026
84624b8
test(cbm): ontology+routing smoke gates + run_raw_query recipes (FR-A…
linhdmn Aug 1, 2026
ee8c911
feat(indexer): wire .vue/.svelte/.sql files into index walk (REL-032 …
linhdmn Aug 1, 2026
25477df
feat(session): memory offload to .leankg/sessions + session_recall (U…
linhdmn Aug 1, 2026
f1c5eaa
Merge pull request #170 from FreePeak/prd/wire-vue-svelte-sql
linhdmn Aug 1, 2026
3886cb7
Merge pull request #173 from FreePeak/prd/cbm-a-smoke-polish
linhdmn Aug 1, 2026
86cb84b
Merge pull request #174 from FreePeak/prd/session-offload
linhdmn Aug 1, 2026
3efb79d
feat(mining): mine-conversations CLI for Claude/ChatGPT/Slack exports…
linhdmn Aug 1, 2026
60ec4b1
feat(docjoin): unique file::symbol upgrade when unique (FR-DOCJOIN-06)
linhdmn Aug 1, 2026
0316066
ci: trigger workflows on rebased head
linhdmn Aug 1, 2026
1a5ee68
Merge pull request #175 from FreePeak/prd/conversation-mining
linhdmn Aug 1, 2026
dcaf923
Merge pull request #172 from FreePeak/prd/docjoin-symbol-upgrade
linhdmn Aug 1, 2026
b4df133
chore(tracker): re-sync merged campaign PRs to DONE (PR-11/12/14/15/2…
linhdmn Aug 1, 2026
deaf808
chore(tracker): FR-E10..E14 DONE (PR-50 layout3d merged)
linhdmn Aug 1, 2026
7ada833
feat(session): opt-in auto-recall into get_overview_context (US-SM-02…
linhdmn Aug 1, 2026
b687637
feat(ge): graph-aware planner goal→MCP DAG (US-GE-02)
linhdmn Aug 1, 2026
6d96363
Merge pull request #176 from FreePeak/prd/session-auto-recall
linhdmn Aug 1, 2026
1ad5fd4
Merge pull request #178 from FreePeak/prd/ge-planner
linhdmn Aug 1, 2026
f009e28
chore(tracker): campaign closeout — re-sync 128 rows to DONE after wa…
linhdmn Aug 1, 2026
0fc3315
chore(main): release 0.19.31
github-actions[bot] Aug 1, 2026
bbdb98e
Merge pull request #193 from FreePeak/release-please--branches--main-…
linhdmn Aug 2, 2026
9838db8
fix(web+mcp): annotation DELETE route+handler, cozo :rm syntax, MCP r…
linhdmn Aug 2, 2026
165cb52
doc: update current documents
linhdmn Aug 2, 2026
7976cd0
fix(embed): serving containers default LEANKG_EMBED_AUTO_ARM=0 (FR-P0…
linhdmn Aug 2, 2026
05f162a
Merge pull request #200 from FreePeak/fix/p0-embed-lock
linhdmn Aug 2, 2026
676fcce
docs(tracker): mark P0 MCP root-cause fixes + embed-lock DONE (FR-P0-…
linhdmn Aug 2, 2026
2bc9b2d
docs(reports): P0 root-cause + embed-lock live smoke evidence, REL it…
linhdmn Aug 2, 2026
e7e1726
docs(reports): A/B re-run evidence — post-fix semantic_search + lock …
linhdmn Aug 2, 2026
bde19c5
Merge pull request #201 from FreePeak/docs/p0-mcp-fix-tracker
linhdmn Aug 2, 2026
21e7ac4
docs(tracker): flip remaining P0 detailed rows to DONE (consistency w…
linhdmn Aug 2, 2026
9f533c3
docs: add embedding operational guide + workspace-be validation report
linhdmn Aug 3, 2026
420f220
docs(planning): next-step TDD plan (cold-embed 15min, 2 tool bugs, 5 …
linhdmn Aug 3, 2026
c4999fd
perf(embed): 8 workers, 14g mem_limit, 12000MB cap; add chunked-upser…
linhdmn Aug 3, 2026
8da076f
docs(validation): cross-reference user mega-graph overview fix report
linhdmn Aug 3, 2026
57f40b8
docs(validation): live-verify overview fix (18ms warm) + get_god_node…
linhdmn Aug 3, 2026
d525827
perf(embed): vendor cozo for RocksDB bulk-load mode (FR-EMBED-PERF-1000)
linhdmn Aug 3, 2026
69b4d75
docs(planning): bulk-load proof (1250 v/s), index-hang blocker for be
linhdmn Aug 3, 2026
7422be7
feat(doc): honor LEANKG_DOC_MAX_CODE_REFS=0 to skip doc code-ref reso…
linhdmn Aug 3, 2026
f83ce7d
Merge pull request #204 from FreePeak/perf/index-embed-10min
linhdmn Aug 4, 2026
206c11d
feat(indexer): support 113 programming languages across all ecosystem…
linhdmn Aug 4, 2026
57e8afc
chore(main): release 0.19.32 (#194)
github-actions[bot] Aug 4, 2026
1d62e59
fix(competitive): review fixes for PR #197 (BLAKE3, pack determinism,…
linhdmn Aug 4, 2026
96dfc4b
chore(main): release 0.19.33 (#206)
github-actions[bot] Aug 4, 2026
de7c0bf
feat(pg): migrate CozoDB → PostgreSQL 18 + pgvector (v0.20.0) (#207)
linhdmn Aug 5, 2026
0798396
chore(main): release 0.19.34 (#209)
github-actions[bot] Aug 5, 2026
22bec1a
chore(main): release 0.20.0
linhdmn Aug 5, 2026
aca8dc4
chore(main): release 0.20.1 (#210)
github-actions[bot] Aug 5, 2026
9f64225
feat(mcp): add mcp_embed tool for one-call index + embed chain
linhdmn Aug 6, 2026
ed3692d
chore(main): release 0.20.2 (#211)
github-actions[bot] Aug 6, 2026
a07557f
feat(config): add db: block to leankg.yaml for Postgres defaults (#212)
linhdmn Aug 6, 2026
47b9f86
chore(main): release 0.20.3 (#214)
github-actions[bot] Aug 6, 2026
20b9c5b
fix(embed): PG pool reconnect, incremental dirty-collect, cold-first-…
linhdmn Aug 6, 2026
c4b3321
chore(main): release 0.20.4 (#216)
github-actions[bot] Aug 6, 2026
d27d450
fix(pg): parameterized embedding writes + cozo→SQL hardening (#217)
linhdmn Aug 6, 2026
089bf5c
chore(main): release 0.20.5 (#218)
github-actions[bot] Aug 6, 2026
4c9a034
Improve formatting of full set section in README
linhdmn Aug 6, 2026
c464434
remove redundant files
linhdmn Aug 6, 2026
ecb549b
Merge branch 'main' of github-personal:FreePeak/LeanKG
linhdmn Aug 6, 2026
a1dc37c
fix(index): wipe project rows before full reindex to stop duplicate a…
linhdmn Aug 6, 2026
3912f6d
chore(main): release 0.20.6 (#220)
github-actions[bot] Aug 6, 2026
dd6c3d5
feat(ci): replace release-please with semantic release workflow (#222)
linhdmn Aug 7, 2026
2e7203a
docs: tighten README for enterprise install and drop junk artifacts
linhdmn Aug 7, 2026
6614572
fix(ci): use Conventional Commits for semantic release bumps
linhdmn Aug 7, 2026
a95de6a
release: v0.21.0 (#227)
github-actions[bot] Aug 7, 2026
caf7833
feat(setup): add server-side 'leankg setup' pipeline (clone->index->e…
linhdmn Aug 7, 2026
3a2eb3c
release: v0.22.0 (#228)
github-actions[bot] Aug 7, 2026
7fc5ae6
fix(ci): set git identity when tagging in semver release
linhdmn Aug 7, 2026
d072b70
release: v0.23.0 (#229)
github-actions[bot] Aug 7, 2026
1a85b33
feat(split): sync query-only MCP + worker split (#230)
linhdmn Aug 10, 2026
5bcd57e
fix(docker): ship leankg-worker + embeddings, pgvector HNSW ef_constr…
linhdmn Aug 10, 2026
031b769
feat(embed): multi-model embedding registry with table-per-model coll…
linhdmn Aug 12, 2026
6da8866
release: v0.24.0 (#235)
github-actions[bot] Aug 12, 2026
0bf9e88
feat(embeddings): add GraphRAG-style summary-primary embedding (#234)
thientu Aug 14, 2026
fa3f627
release: v0.25.0 (#236)
github-actions[bot] Aug 14, 2026
13fd7d7
ci(update-graph): add Postgres service — leankg index is Postgres-onl…
linhdmn Aug 17, 2026
115bac8
release: v0.26.0 (#240)
github-actions[bot] Aug 17, 2026
f37d9a7
cleanup(mcp): remove 11 redundant/thin-wrapper MCP tools (91→80) (#241)
linhdmn Aug 19, 2026
e1dda82
refactor: purge CozoDB remnants (matrix test fix, doc truth, dead cod…
linhdmn Aug 21, 2026
5605031
docs: tracker — waves 1-2 merged via PR #242/#243, hackathon charter …
linhdmn Aug 21, 2026
199db2e
release: v0.26.1 (#245)
github-actions[bot] Aug 22, 2026
efe1822
docs: tracker — hackathon cycle 1 complete (7 fixes, 6 features), PR …
linhdmn Aug 22, 2026
9e0c80d
hackathon: cycle 1+2 — live-sweep fixes, ENT-1 audit log, PLG feature…
linhdmn Aug 23, 2026
910d01a
hackathon cycle 3: tool contract+guard, README refresh, provenance la…
linhdmn Aug 23, 2026
35aa4d8
docs: tracker — cycles 2-3 banked (#247/#249), C4 queue (#250)
linhdmn Aug 23, 2026
95a6a95
hackathon cycle 4: usage dashboard (PLG-8) + perf regression gate (CO…
linhdmn Aug 23, 2026
435055d
docs: tracker — cycle 4 banked (#251), C5 targets W8 SQL-first seam (…
linhdmn Aug 23, 2026
5d4fd29
hackathon cycle 5: W8 SQL-first seam + wave-1a Datalog conversion (#253)
linhdmn Aug 23, 2026
26f7054
refactor: purge residual legacy-engine and vendor references (Postgre…
linhdmn Sep 1, 2026
f7d896d
W8 wave-2: SQL-first code_elements reads via typed backend seam (#258)
linhdmn Sep 1, 2026
9f2be7d
chore: bump version to 0.27.0 (#260)
linhdmn Sep 1, 2026
81e7f6f
docs: prd v3.8.8 — session-memory audit vs omp Hindsight (US-SMA/FR-S…
linhdmn Sep 3, 2026
96136e5
security: dependency vuln remediation + secrets hygiene (#264)
linhdmn Sep 4, 2026
1505b60
docs: PRD v4.2.0 measured-simplicity + v4.3.0 one-tool ladder + setup…
linhdmn Sep 5, 2026
bb2ed34
docs(prd): FR-ZCP-04 onboarding contract — install --target writers, …
linhdmn Sep 5, 2026
67d5fad
docs(prd): FR-ZCP-04 — describe clause-2 roots/list and leankg add as…
linhdmn Sep 5, 2026
c4115ca
docs(prd): FR-ZCP-04 — drop hand-typed env count from §3.4 (#271)
linhdmn Sep 5, 2026
7e63825
feat: v4.4.0 — SQLite backend + 3-tool surface (set/get/status) + v4.…
linhdmn Sep 7, 2026
c1ff26a
docs(prd) v4.4.1 + bench: leankg-vs-rg comparison, issues #286-#294 (…
linhdmn Sep 7, 2026
a0b502b
docs(tracker): sync 2026-09-08 — PR queue status, #308/#309 open bugs…
linhdmn Sep 8, 2026
75899c6
docs(prd): v4.4.2-harden-and-validate — 8 PRs merged + live validatio…
linhdmn Sep 8, 2026
ea1f735
bench: post-merge delta recorded (main @ a0b502b0) (#314)
linhdmn Sep 8, 2026
7ee012d
chore!: sqlite is the default and only CI-tested storage engine — rem…
linhdmn Sep 9, 2026
f28c6cf
chore(deps-dev): bump js-yaml from 4.3.0 to 4.3.2 in /ui-v2
dependabot[bot] Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 19 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# LeanKG Build Configuration
# Limit local release-build CPU and RAM usage on macOS.

[build]
jobs = 2

[profile.dev]
opt-level = 0
debug = false
codegen-units = 16

[profile.release]
opt-level = 3
# codegen-units=1 avoids a rustc 1.95 linker bug (`core::error::Error::cause`
# undefined) that appears in the lib-test binary once enough grammars are
# linked. The release binary also benefits from the smaller single-CGU object.
lto = "off"
codegen-units = 1
incremental = true
68 changes: 68 additions & 0 deletions .claude-plugin/INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Installing LeanKG for Claude Code

## Prerequisites

- [Claude Code](https://claude.ai/code) installed

## Installation

Superpowers is available via the official Claude plugin marketplace:

```
/plugin install leankg@claude-plugins-official
```

Or register the marketplace first:

```
/plugin marketplace add FreePeak/leankg-marketplace
/plugin install leankg@leankg-marketplace
```

## What It Does

The plugin automatically injects LeanKG knowledge graph tools into your agent context:

- **Impact Analysis** - Calculate blast radius before making changes
- **Code Search** - Find functions, files, dependencies instantly
- **Test Coverage** - Know what tests cover any code element
- **Call Graphs** - Understand function call chains
- **Context Generation** - Get AI-optimized context for any file

## Quick Usage

```
# Check if LeanKG is ready
mcp_status leankg

# Initialize for your project
mcp_init leankg { path: "/path/to/your/project/.leankg" }

# Ask questions like:
# "What breaks if I change auth.rs?"
# "Where is the login function?"
# "What tests cover the payment module?"
```

## Updating

LeanKG updates automatically when you update the plugin:

```
/plugin update leankg
```

## Manual Installation

If marketplace doesn't work, add to `~/.config/claude/settings.json`:

```json
{
"mcpServers": {
"leankg": {
"command": "leankg",
"args": ["mcp-stdio", "--watch"]
}
}
}
```
27 changes: 27 additions & 0 deletions .claude-plugin/hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"description": "LeanKG hooks - enforces LeanKG usage for code search",
"hooks": {
"PreToolUse": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/leankg-pretooluse.mjs\""
}
]
}
],
"PostToolUse": [
{
"matcher": "mcp__leankg__*",
"hooks": [
{
"type": "command",
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/leankg-posttooluse.mjs\""
}
]
}
]
}
}
77 changes: 77 additions & 0 deletions .claude-plugin/hooks/leankg-posttooluse.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/usr/bin/env node
/**
* LeanKG PostToolUse Hook
* Logs tool usage for analytics and can provide follow-up LeanKG suggestions.
*/

import { readFileSync, appendFileSync, existsSync, mkdirSync } from "node:fs";
import { resolve, dirname } from "node:path";
import { fileURLToPath } from "node:url";
import { homedir } from "node:os";

// ─── Configuration ───
const LOG_DIR = resolve(homedir(), ".cache", "leankg-hooks");
const LOG_FILE = resolve(LOG_DIR, "posttooluse.log");

// ─── Read stdin ───
function readStdin() {
return new Promise((resolve, reject) => {
let data = "";
process.stdin.on("readable", () => {
let chunk;
while ((chunk = process.stdin.read()) !== null) {
data += chunk;
}
});
process.stdin.on("end", () => resolve(data));
process.stdin.on("error", reject);
});
}

// ─── Log tool usage ───
function logToolUsage(toolName, toolInput, toolResult, durationMs) {
try {
if (!existsSync(LOG_DIR)) {
mkdirSync(LOG_DIR, { recursive: true });
}

const entry = {
timestamp: new Date().toISOString(),
tool: toolName,
input: toolInput,
durationMs,
hadResult: !!toolResult,
resultLength: toolResult ? JSON.stringify(toolResult).length : 0,
};

appendFileSync(LOG_FILE, JSON.stringify(entry) + "\n");
} catch {
// Silently ignore logging errors
}
}

// ─── Main ───
async function main() {
try {
const raw = await readStdin();
if (!raw.trim()) {
process.exit(0);
}

const input = JSON.parse(raw);
const toolName = input.tool_name || "";
const toolInput = input.tool_input || {};
const toolResult = input.result || null;
const durationMs = input.duration_ms || 0;

// Log for analytics
logToolUsage(toolName, toolInput, toolResult, durationMs);

process.exit(0);
} catch {
// Graceful degradation
process.exit(0);
}
}

main();
119 changes: 119 additions & 0 deletions .claude-plugin/hooks/leankg-pretooluse.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#!/usr/bin/env node
/**
* LeanKG PreToolUse Hook
* Provides LeanKG context when code search is detected.
* Only blocks Bash commands that use raw grep/find.
*/
import { spawnSync } from "node:child_process";

// ─── LeanKG Tools Mapping ───
const LEANKG_TOOLS = {
search_code: "Search code by name/type",
find_function: "Locate function definitions",
query_file: "Find files by name/pattern",
get_impact_radius: "Calculate blast radius",
get_dependencies: "Get direct imports",
get_dependents: "Get files depending on target",
get_context: "Get AI-optimized file context",
get_tested_by: "Get test coverage",
get_call_graph: "Get function call graph",
get_callers: "Get who calls a function",
};

// ─── Read stdin ───
function readStdin() {
return new Promise((resolve, reject) => {
let data = "";
process.stdin.on("readable", () => {
let chunk;
while ((chunk = process.stdin.read()) !== null) {
data += chunk;
}
});
process.stdin.on("end", () => resolve(data));
process.stdin.on("error", reject);
});
}

// ─── Check if LeanKG is available ───
function isLeanKGMCPReady() {
try {
const result = spawnSync("cargo", ["run", "--release", "--", "status"], {
cwd: process.cwd(),
timeout: 5000,
});
return result.status === 0;
} catch {
return false;
}
}

// ─── Only block Bash with grep/find - allow other tools ───
function shouldBlockTool(toolName, toolInput) {
if (toolName !== "Bash") return false;

const cmd = (toolInput.command || "").toLowerCase();

// Build commands always allowed
const isBuildCmd = /^(cargo|npm|pnpm|yarn|go|make|cmake|rustc)/.test(cmd);
if (isBuildCmd) return false;

// Only block if using raw grep/find in bash
const hasRawSearch = /\b(grep|rg|ag|ack|find|fd|fzf)\b/.test(cmd);
const isLeankgCmd = cmd.includes("leankg");

return hasRawSearch && !isLeankgCmd;
}

function buildGuidance(toolInput) {
const cmd = toolInput.command || "";
const match = cmd.match(/['"]([^'"]+)['"]/);
const query = match ? match[1] : "";

const toolsList = Object.entries(LEANKG_TOOLS)
.map(([name, desc]) => ` - mcp__leankg__${name}: ${desc}`)
.join("\n");

return `LEANKG ENFORCEMENT: Raw search via Bash is blocked.

Use LeanKG MCP tools instead:
${toolsList}

REQUIRED WORKFLOW:
1. mcp__leankg__mcp_status → confirm LeanKG is ready
2. For code search: mcp__leankg__search_code("${query}") or mcp__leankg__find_function("${query}")

The original tool call: Bash(${JSON.stringify(toolInput)})`;
}

async function main() {
try {
const raw = await readStdin();
if (!raw.trim()) process.exit(0);

const input = JSON.parse(raw);
const toolName = input.tool_name || "";
const toolInput = input.tool_input || {};

if (!shouldBlockTool(toolName, toolInput)) {
process.exit(0);
}

const leanKGReady = isLeanKGMCPReady();
if (!leanKGReady) process.exit(0);

// LeanKG ready - block Bash search commands
console.log(JSON.stringify({
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: buildGuidance(toolInput),
},
}) + "\n");
process.exit(0);
} catch {
process.exit(0);
}
}

main();
44 changes: 44 additions & 0 deletions .claude-plugin/hooks/run-hook.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
@echo off
REM Cross-platform polyglot wrapper for hook scripts.
REM On Windows: cmd.exe runs the batch portion, which finds and calls bash.
REM On Unix: the shell interprets this as a script (: is a no-op in bash).
REM
REM Hook scripts use extensionless filenames (e.g. "session-start" not
REM "session-start.sh") so Claude Code's Windows auto-detection -- which
REM prepends "bash" to any command containing .sh -- doesn't interfere.
REM
REM Usage: run-hook.cmd <script-name> [args...]

if "%~1"=="" (
echo run-hook.cmd: missing script name >&2
exit /b 1
)

set "HOOK_DIR=%~dp0"

REM Try Git for Windows bash in standard locations
if exist "C:\Program Files\Git\bin\bash.exe" (
"C:\Program Files\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
exit /b %ERRORLEVEL%
)
if exist "C:\Program Files (x86)\Git\bin\bash.exe" (
"C:\Program Files (x86)\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
exit /b %ERRORLEVEL%
)

REM Try bash on PATH (e.g. user-installed Git Bash, MSYS2, Cygwin)
where bash >nul 2>nul
if %ERRORLEVEL% equ 0 (
bash "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
exit /b %ERRORLEVEL%
)

REM No bash found - exit silently rather than error
REM (plugin still works, just without SessionStart context injection)
exit /b 0

# Unix: run the named script directly
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SCRIPT_NAME="$1"
shift
exec bash "${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
30 changes: 30 additions & 0 deletions .claude-plugin/hooks/session-start
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"

escape_for_json() {
local s="$1"
s="${s//\\/\\\\}"
s="${s//\"/\\\"}"
s="${s//$'\n'/\\n}"
s="${s//$'\r'/\\r}"
s="${s//$'\t'/\\t}"
printf '%s' "$s"
}

bootstrap_content=$(cat "${PLUGIN_ROOT}/leankg-bootstrap.md" 2>&1 || echo "Error reading leankg-bootstrap.md")
bootstrap_escaped=$(escape_for_json "$bootstrap_content")

session_context="<EXTREMELY_IMPORTANT>\n\n**LeanKG is a lightweight knowledge graph for codebase understanding.**\n\n${bootstrap_escaped}\n</EXTREMELY_IMPORTANT>"

if [ -n "${CURSOR_PLUGIN_ROOT:-}" ]; then
printf '{\n "additional_context": "%s"\n}\n' "$session_context"
elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ]; then
printf '{\n "hookSpecificOutput": {\n "hookEventName": "SessionStart",\n "additionalContext": "%s"\n }\n}\n' "$session_context"
else
printf '{\n "additional_context": "%s"\n}\n' "$session_context"
fi

exit 0
Loading
Loading