-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Comparing changes
Open a pull request
base repository: colbymchenry/codegraph
base: main
head repository: dhigby/codegraph
compare: main
- 12 commits
- 15 files changed
- 2 contributors
Commits on Jun 5, 2026
-
feat(extraction): add Keyman keyboard (.kmn) language support
Keyman has no tree-sitter grammar anywhere, so it gets a standalone line-based extractor (the Liquid/Vue/Svelte/DFM pattern): - groups -> function nodes (callable units, span to next group) - user stores -> variable, &system stores -> constant (&NAME -> docstring) - use(g) -> calls edges (group->group, file->group for `begin`) - outs/any/notany/index/call/set/if/save/reset -> references edges, resolved intra-file (group->store, store->store) Wiring: .kmn in EXTENSION_MAP, 'keyman' in LANGUAGES, grammars.ts special-cases (no WASM), and a route to KeymanExtractor in extractFromSource. +8 extraction tests. Validated on real .kmn from keymanapp/keyboards across small/medium/large (2/251/1029 files): linear scaling, no node explosion, and 17776/17776 calls+references edges resolved intra-file (zero spurious cross-file edges). Co-Authored-By: Claude Opus 4.8 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 0777b6b - Browse repository at this point
Copy the full SHA 0777b6bView commit details -
docs(readme): add fork notice describing Keyman (.kmn) support
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 9e61bf4 - Browse repository at this point
Copy the full SHA 9e61bf4View commit details -
docs: add Keyman extractor roadmap (candidate file formats)
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 7027049 - Browse repository at this point
Copy the full SHA 7027049View commit details -
feat(extraction): connect Keyman keyboards into a cross-file subgraph
Adds the connected-subgraph trio from the Keyman extractor roadmap so a keyboard's files stop being isolated islands: - .kmn: emit cross-file `references` from the &LAYOUTFILE / &VISUALKEYBOARD system stores to their named companion files (resolved against the .kmn's own directory so the resolver's file-path matcher links them). - .keyman-touch-layout (new extractor): a `component` node per layer (scoped by platform) + `references` layer->layer for every `nextlayer` switch, including subkeys/flicks/multitaps. Keys are not nodes (avoids graph blow-up). - .kps (new extractor): package manifest -> file node with the display name as docstring, plus cross-file `references` to each <Keyboard><ID>'s .kmn and any shipped keyboard-source companion. Build outputs, fonts, and docs are skipped. All three share the existing `keyman` language token, dispatched by extension in tree-sitter.ts. Validated end-to-end on khmer_angkor and baybayin: .kps -> .kmn -> touch-layout all resolve, with per-platform layer transitions. Tests cover detection, both new extractors, and the .kmn companion links.
Configuration menu - View commit details
-
Copy full SHA for 9b9e3b1 - Browse repository at this point
Copy the full SHA 9b9e3b1View commit details -
feat(extraction): add Keyman visual-keyboard (.kvks) extractor
Step 4 of the Keyman roadmap. Indexes on-screen (desktop) visual keyboard files: a file node (docstring = <kbdname>) plus a `component` node per layer, scoped by encoding and decoded modifier state (shift="RA" -> rightalt, "SRA" -> shift+rightalt). Desktop layers have no programmatic switches, so no inter-layer edges; keys stay data, not nodes (avoids graph blow-up). Indexing .kvks also lets the &VISUALKEYBOARD reference the .kmn extractor already emits resolve — validated end-to-end on khmer_angkor and baybayin (.kmn -> .kvks now resolves alongside .kmn -> .keyman-touch-layout). With this, the four core Keyman source formats (.kmn / .keyman-touch-layout / .kps / .kvks) are covered.
Configuration menu - View commit details
-
Copy full SHA for 681d07b - Browse repository at this point
Copy the full SHA 681d07bView commit details -
feat(extraction): capture Keyman language coverage across .kps and .k…
…eyboard_info Makes "which keyboards support language X" queryable uniformly across the whole repo, regardless of a keyboard's lineage: - .kps extractor now emits a `constant` node per supported language from <Keyboards><Keyboard><Languages><Language ID="...">DisplayName</Language>, with the tag as the node name and the display name in the (full-text-indexed) signature, plus a contains edge file -> language. This is the release/experimental source of language metadata. - New .keyboard_info extractor (keyman-keyboard-info-extractor.ts) does the same from the JSON `languages` map. This file is a build artifact for release keyboards (generated from the .kps) but is committed for legacy binary-only keyboards, which have no .kps — so indexing it gives them the same coverage. - Both build identical-shaped language nodes via a shared helper (keyman-shared.ts), so one search (e.g. "Tagalog") returns matches from both .kps (release) and .keyboard_info (legacy) at once. Validated end-to-end on a mixed sample (khmer_angkor/baybayin .kps + legacy european2/blackfoot .keyboard_info): language nodes resolve and FTS search by display name finds them across both lineages. All five Keyman source formats in the repo are now covered.
Configuration menu - View commit details
-
Copy full SHA for 895c074 - Browse repository at this point
Copy the full SHA 895c074View commit details -
feat(extraction): link Keyman packages to their related packages
The .kps <RelatedPackages><RelatedPackage ID="..."> entries link one package to another (usually the legacy keyboard a newer one deprecates/replaces). The target lives in a different directory, but a package id equals its file's basename stem, so each related id is emitted as a cross-file `references` to both `<id>.kps` (release/experimental) and `<id>.keyboard_info` (legacy, which has no .kps). Whichever exists resolves by exact-name; external ids and the unused arm drop harmlessly. A self-referential related id is skipped. Most related targets (433 of ~611 in the repo) are legacy keyboards, so the .keyboard_info arm is what makes the bulk of these links resolve. Validated end-to-end: khmer_angkor.kps resolves to both basic_kbdkni.kps (release) and khmer10.keyboard_info (legacy), plus the reciprocal link back from basic_kbdkni. All 24 Keyman extraction tests pass.
Configuration menu - View commit details
-
Copy full SHA for b5d1e47 - Browse repository at this point
Copy the full SHA b5d1e47View commit details -
Configuration menu - View commit details
-
Copy full SHA for 06a4373 - Browse repository at this point
Copy the full SHA 06a4373View commit details -
Merge Keyman companion-format extractors (.kps, .kvks, .keyboard_info…
…, touch-layout) + cross-file linking Brings in the roadmap work built in Claude Code web: - connect Keyman keyboards into a cross-file subgraph - visual-keyboard (.kvks) extractor - language coverage across .kps and .keyboard_info - link Keyman packages to their related packages Co-Authored-By: Claude Opus 4.8 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 174af3c - Browse repository at this point
Copy the full SHA 174af3cView commit details -
docs: document full Keyman ecosystem support (.kps/.kvks/.keyboard_in…
…fo/touch-layout + cross-file linking) Co-Authored-By: Claude Opus 4.8 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for c9ed648 - Browse repository at this point
Copy the full SHA c9ed648View commit details -
docs: rewrite install instructions for from-source fork install
The README inherited upstream's install flow (curl install.sh / npm i -g @colbymchenry/codegraph), neither of which works for this fork — it isn't published to npm or as a GitHub Release. Rewrite Get Started, Quick Start, Manual Setup, and Library Usage to clone + build + npm link from the fork, fix the misleading npm/bundled badges, repoint the reinstall + Report Bug links, and add a fork-installs-from-source note. https://claude.ai/code/session_01YNaG1JupGkefkdP52Wo33e
Configuration menu - View commit details
-
Copy full SHA for 5854d84 - Browse repository at this point
Copy the full SHA 5854d84View commit details -
Merge pull request #1 from dhigby/claude/elegant-edison-LTInA
docs: rewrite install instructions for from-source fork install
Configuration menu - View commit details
-
Copy full SHA for c90d65c - Browse repository at this point
Copy the full SHA c90d65cView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff main...main