Bläddra i källkod

Modify EnableLighting to set distinct effects per LED channel

Paul Klumpp 2 veckor sedan
förälder
incheckning
a3123ae9fc

+ 3 - 30
cmd/wobkey/rgb/effect.go

@@ -5,13 +5,10 @@ import (
 	"os"
 
 	"github.com/spf13/cobra"
-	intdevice "github.com/wobkey/rgb/internal/device"
 	"github.com/wobkey/rgb/internal/rgb"
 	"github.com/wobkey/rgb/internal/via"
 )
 
-var effectName string
-
 func NewEffectCmd() *cobra.Command {
 	return &cobra.Command{
 		Use:   "effect <name>",
@@ -19,34 +16,20 @@ func NewEffectCmd() *cobra.Command {
 		Long:  "Set the RGB lighting effect on the connected keyboard.",
 		Args:  cobra.ExactArgs(1),
 		Run: func(cmd *cobra.Command, args []string) {
-			proto, kb, err := OpenDevice()
+			proto, _, err := OpenDevice()
 			if err != nil {
 				fmt.Fprintf(os.Stderr, "Error: %v\n", err)
 				os.Exit(1)
 			}
 			defer proto.Close()
 
-			e, err := rgb.ParseEffect(args[0])
+			e, err := rgb.ParseImpact80Effect(args[0])
 			if err != nil {
 				fmt.Fprintf(os.Stderr, "Error: %v\n", err)
 				os.Exit(1)
 			}
 
-			availEffects := GetAvailableEffects(kb)
-			if availEffects != nil {
-				found := false
-				for _, ef := range availEffects {
-					if ef == e {
-						found = true
-						break
-					}
-				}
-				if !found {
-					fmt.Fprintf(os.Stderr, "Warning: effect %q may not be supported by %s\n", args[0], kb.Name)
-				}
-			}
-
-			if err := proto.SetValue(via.RGBLight, uint8(rgb.EffectID), uint8(e)); err != nil {
+			if err := proto.SetValue(via.RGBLight, uint8(rgb.EffectID), e); err != nil {
 				fmt.Fprintf(os.Stderr, "Error setting effect: %v\n", err)
 				os.Exit(1)
 			}
@@ -55,13 +38,3 @@ func NewEffectCmd() *cobra.Command {
 		},
 	}
 }
-
-func GetAvailableEffects(kb intdevice.Keyboard) []rgb.Effect {
-	if kb.Name == "Wobkey Impact 80" {
-		return []rgb.Effect{
-			rgb.Static, rgb.Breathing, rgb.Rainbow, rgb.RainbowWave,
-			rgb.Snake, rgb.Tail, rgb.Gradient,
-		}
-	}
-	return nil
-}

+ 1 - 1
cmd/wobkey/rgb/info.go

@@ -56,7 +56,7 @@ func NewInfoCmd() *cobra.Command {
 				Speed      uint8  `json:"speed"`
 			}{
 				Enabled:    lightingEnabled(mode, brightness),
-				Mode:       rgb.Effect(mode).String(),
+				Mode:       rgb.Impact80EffectName(mode),
 				Brightness: brightness,
 				Speed:      speed,
 			}

+ 25 - 0
graphify-out/.graphify_labels.json

@@ -0,0 +1,25 @@
+{
+  "0": "Open Issues",
+  "1": "main.go",
+  "2": "hid.go",
+  "3": "OpenDevice",
+  "4": "device.go",
+  "5": "What You Must Do When Invoked",
+  "6": "testing.T",
+  "7": "Agent Guidelines — Wobkey Impact 80 RGB CLI",
+  "9": "Protocol",
+  "10": "Wobkey RGB CLI",
+  "11": "graphify.js",
+  "12": "graphify reference: extra exports and benchmark",
+  "13": "opencode.json",
+  "14": "github.com/wobkey/rgb",
+  "15": "graphify reference: query, path, explain",
+  "16": "graphify reference: add a URL and watch a folder",
+  "17": "graphify reference: commit hook and native CLAUDE.md integration",
+  "18": "graphify reference: incremental update and cluster-only",
+  "19": "graphify reference: GitHub clone and cross-repo merge",
+  "20": "graphify reference: transcribe video and audio",
+  "21": "CLAUDE.md",
+  "22": ".claude/CLAUDE.md",
+  "23": "extraction-spec.md"
+}

+ 1 - 0
graphify-out/.graphify_labels.json.sig

@@ -0,0 +1 @@
+{"0": "b3f011abe5f8595f", "1": "9d476d09dc11ede1", "2": "831d07fa9d189e34", "3": "b2b59325c7c5edd0", "4": "1bc842929f1c6d28", "5": "62ad613386e8444e", "6": "4e8b6a4a1b68595a", "7": "572859a724f897c1", "9": "62799d9a55042111", "10": "c930363ea83f4203", "11": "d71acd1404975569", "12": "c4abf0eb38ef740d", "13": "72bfef5ec64c0453", "14": "735bb4a48c356579", "15": "75efc6457f7fce22", "16": "be62daa7d5bc336a", "17": "47c3e1a9d4bb7e67", "18": "82ff39c105ae3090", "19": "54f53e5e0cc8c385", "20": "821696b1ff49347b", "21": "6e7b82d0387bf16d", "22": "2eef246ebb269184", "23": "f5edd0761d024ff0"}

+ 1 - 0
graphify-out/.graphify_python

@@ -0,0 +1 @@
+/home/paul/.local/share/uv/tools/graphifyy/bin/python

+ 1 - 0
graphify-out/.graphify_root

@@ -0,0 +1 @@
+.

+ 157 - 0
graphify-out/GRAPH_REPORT.md

@@ -0,0 +1,157 @@
+# Graph Report - impact-80  (2026-09-25)
+
+## Corpus Check
+- 38 files · ~18,786 words
+- Verdict: corpus is large enough that graph structure adds value.
+- Unclassified: 1 file(s) not represented in the graph (top: (none) 1)
+
+## Summary
+- 231 nodes · 406 edges · 23 communities (16 shown, 7 thin omitted)
+- Extraction: 94% EXTRACTED · 6% INFERRED · 0% AMBIGUOUS · INFERRED: 25 edges (avg confidence: 0.85)
+- Token cost: 0 input · 0 output
+
+## Graph Freshness
+- Built from commit: `216e2dbe`
+- Run `git rev-parse HEAD` and compare to check if the graph is stale.
+- Run `graphify update .` after code changes (no API cost).
+
+## Community Hubs (Navigation)
+- Open Issues
+- main.go
+- hid.go
+- OpenDevice
+- device.go
+- What You Must Do When Invoked
+- testing.T
+- Agent Guidelines — Wobkey Impact 80 RGB CLI
+- Protocol
+- Wobkey RGB CLI
+- graphify.js
+- graphify reference: extra exports and benchmark
+- opencode.json
+- github.com/wobkey/rgb
+- graphify reference: query, path, explain
+- graphify reference: add a URL and watch a folder
+- graphify reference: commit hook and native CLAUDE.md integration
+- graphify reference: incremental update and cluster-only
+- graphify reference: GitHub clone and cross-repo merge
+- graphify reference: transcribe video and audio
+- CLAUDE.md
+- .claude/CLAUDE.md
+- extraction-spec.md
+
+## God Nodes (most connected - your core abstractions)
+1. `OpenDevice()` - 14 edges
+2. `What You Must Do When Invoked` - 12 edges
+3. `init()` - 10 edges
+4. `/graphify` - 10 edges
+5. `Agent Guidelines — Wobkey Impact 80 RGB CLI` - 10 edges
+6. `Keyboard` - 8 edges
+7. `Device` - 8 edges
+8. `graphify reference: extra exports and benchmark` - 8 edges
+9. `Go Development` - 8 edges
+10. `Wobkey RGB CLI` - 8 edges
+
+## Surprising Connections (you probably didn't know these)
+- `Info` --references--> `Device`  [EXTRACTED]
+  cmd/wobkey/main.go → internal/device/device.go
+- `NewColorCmd()` --calls--> `ParseHexColor()`  [EXTRACTED]
+  cmd/wobkey/rgb/color.go → internal/rgb/effects.go
+- `GetAvailableEffects()` --references--> `Keyboard`  [EXTRACTED]
+  cmd/wobkey/rgb/effect.go → internal/device/device.go
+- `OpenDevice()` --calls--> `Discover()`  [EXTRACTED]
+  cmd/wobkey/rgb/rgb.go → internal/device/device.go
+- `OpenDevice()` --references--> `Keyboard`  [EXTRACTED]
+  cmd/wobkey/rgb/rgb.go → internal/device/device.go
+
+## Import Cycles
+- None detected.
+
+## Communities (23 total, 7 thin omitted)
+
+### Community 0 - "Open Issues"
+Cohesion: 0.25
+Nodes (7): 1. Impact 80 Effect Mapping, 2. Cross-Platform HID Backends, 3. Documentation and Release Artifacts, Open Issues, Quick Commands for Next Session, Status, Wobkey RGB CLI — Implementation Plan
+
+### Community 1 - "main.go"
+Cohesion: 0.23
+Nodes (12): Execute(), main(), go_pkg_encoding_json, go_pkg_fmt, go_pkg_github_com_spf13_cobra, go_pkg_math, go_pkg_os, ParseHexColor() (+4 more)
+
+### Community 2 - "hid.go"
+Cohesion: 0.10
+Nodes (20): go_pkg_bytes, go_pkg_strings, go_pkg_syscall, go_pkg_time, go_pkg_unsafe, Device, DevicesInfo, DiscoverAll() (+12 more)
+
+### Community 3 - "OpenDevice"
+Cohesion: 0.19
+Nodes (20): init(), NewBrightnessCmd(), NewColorCmd(), NewDisableCmd(), GetAvailableEffects(), NewEffectCmd(), NewEnableCmd(), NewInfoCmd() (+12 more)
+
+### Community 4 - "device.go"
+Cohesion: 0.29
+Nodes (11): go_pkg_path_filepath, Discover(), Device, Keyboard, LoadKeyboards(), matchKeyboards(), TestLoadKeyboards(), TestLoadKeyboardsEmptyFile() (+3 more)
+
+### Community 5 - "What You Must Do When Invoked"
+Cohesion: 0.08
+Nodes (24): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+16 more)
+
+### Community 6 - "testing.T"
+Cohesion: 0.15
+Nodes (14): TestDeviceFlagIsInheritedByRGBCommands(), TestLightingEnabledRequiresActiveEffectAndBrightness(), go_pkg_testing, testing.T, TestColorToHSV(), TestQMKValueIDs(), TestDisableLightingUsesAllImpact80Channels(), TestEnableLightingUsesAllImpact80Channels() (+6 more)
+
+### Community 7 - "Agent Guidelines — Wobkey Impact 80 RGB CLI"
+Cohesion: 0.11
+Nodes (17): Agent Guidelines — Wobkey Impact 80 RGB CLI, Architecture, CLI Interface, Concurrency, Constraints, Error Handling, Go Development, graphify (+9 more)
+
+### Community 9 - "Protocol"
+Cohesion: 0.27
+Nodes (4): Protocol, LEDType, Message, transport
+
+### Community 10 - "Wobkey RGB CLI"
+Cohesion: 0.18
+Nodes (10): Architecture, CLI Reference, Installation, Linux HID Device Permissions, Option 1: Quick (Per Session), Option 2: Permanent (udev Rule), Protocol, Supported Keyboards (+2 more)
+
+### Community 11 - "graphify.js"
+Cohesion: 0.40
+Nodes (3): IMPORTANT: keep the reminder string free of backticks and $(...) constructs., ref_fs, ref_path
+
+### Community 12 - "graphify reference: extra exports and benchmark"
+Cohesion: 0.22
+Nodes (8): graphify reference: extra exports and benchmark, Step 6b - Wiki (only if --wiki flag), Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag), Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag), Step 7b - SVG export (only if --svg flag), Step 7c - GraphML export (only if --graphml flag), Step 7d - MCP server (only if --mcp flag), Step 8 - Token reduction benchmark (only if total_words > 5000)
+
+### Community 15 - "graphify reference: query, path, explain"
+Cohesion: 0.33
+Nodes (5): For /graphify explain, For /graphify path, graphify reference: query, path, explain, Step 0 — Constrained query expansion (REQUIRED before traversal), Step 1 — Traversal
+
+### Community 16 - "graphify reference: add a URL and watch a folder"
+Cohesion: 0.50
+Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder
+
+### Community 17 - "graphify reference: commit hook and native CLAUDE.md integration"
+Cohesion: 0.50
+Nodes (3): For git commit hook, For native CLAUDE.md integration, graphify reference: commit hook and native CLAUDE.md integration
+
+### Community 18 - "graphify reference: incremental update and cluster-only"
+Cohesion: 0.50
+Nodes (3): For --cluster-only, For --update (incremental re-extraction), graphify reference: incremental update and cluster-only
+
+## Knowledge Gaps
+- **75 isolated node(s):** `$schema`, `plugin`, `github.com/wobkey/rgb`, `LEDParam`, `graphify` (+70 more)
+  These have ≤1 connection - possible missing edges or undocumented components. (Counts symbols only; 110 node(s) total have ≤1 connection when file, concept and rationale nodes are included.)
+- **7 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
+
+## Suggested Questions
+_Questions this graph is uniquely positioned to answer:_
+
+- **Why does `Protocol` connect `Protocol` to `main.go`, `hid.go`, `OpenDevice`, `device.go`?**
+  _High betweenness centrality (0.026) - this node is a cross-community bridge._
+- **Why does `OpenDevice()` connect `OpenDevice` to `Protocol`, `hid.go`, `device.go`?**
+  _High betweenness centrality (0.018) - this node is a cross-community bridge._
+- **Are the 8 inferred relationships involving `OpenDevice()` (e.g. with `NewBrightnessCmd()` and `NewColorCmd()`) actually correct?**
+  _`OpenDevice()` has 8 INFERRED edges - model-reasoned connections that need verification._
+- **What connects `$schema`, `plugin`, `github.com/wobkey/rgb` to the rest of the system?**
+  _75 weakly-connected nodes found - possible documentation gaps or missing edges._
+- **Should `hid.go` be split into smaller, more focused modules?**
+  _Cohesion score 0.10052910052910052 - nodes in this community are weakly interconnected._
+- **Should `What You Must Do When Invoked` be split into smaller, more focused modules?**
+  _Cohesion score 0.08 - nodes in this community are weakly interconnected._
+- **Should `Agent Guidelines — Wobkey Impact 80 RGB CLI` be split into smaller, more focused modules?**
+  _Cohesion score 0.1111111111111111 - nodes in this community are weakly interconnected._

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 68 - 0
graphify-out/graph.html


+ 7367 - 0
graphify-out/graph.json

@@ -0,0 +1,7367 @@
+{
+  "directed": false,
+  "multigraph": false,
+  "graph": {},
+  "nodes": [
+    {
+      "id": "opencode_plugins_graphify_graphifyplugin",
+      "label": "GraphifyPlugin()",
+      "_callable": true,
+      "_origin": "ast",
+      "community": 11,
+      "community_name": "graphify.js",
+      "file_type": "code",
+      "norm_label": "graphifyplugin()",
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L12"
+    },
+    {
+      "id": "plan",
+      "label": "PLAN.md",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "plan.md",
+      "source_file": "PLAN.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "plan_1_impact_80_effect_mapping",
+      "label": "1. Impact 80 Effect Mapping",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "1. impact 80 effect mapping",
+      "source_file": "PLAN.md",
+      "source_location": "L18"
+    },
+    {
+      "id": "plan_2_cross_platform_hid_backends",
+      "label": "2. Cross-Platform HID Backends",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "2. cross-platform hid backends",
+      "source_file": "PLAN.md",
+      "source_location": "L22"
+    },
+    {
+      "id": "plan_3_documentation_and_release_artifacts",
+      "label": "3. Documentation and Release Artifacts",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "3. documentation and release artifacts",
+      "source_file": "PLAN.md",
+      "source_location": "L26"
+    },
+    {
+      "id": "plan_open_issues",
+      "label": "Open Issues",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "open issues",
+      "source_file": "PLAN.md",
+      "source_location": "L16"
+    },
+    {
+      "id": "plan_quick_commands_for_next_session",
+      "label": "Quick Commands for Next Session",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "quick commands for next session",
+      "source_file": "PLAN.md",
+      "source_location": "L30"
+    },
+    {
+      "id": "plan_status",
+      "label": "Status",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "status",
+      "source_file": "PLAN.md",
+      "source_location": "L3"
+    },
+    {
+      "id": "plan_wobkey_rgb_cli_implementation_plan",
+      "label": "Wobkey RGB CLI \u2014 Implementation Plan",
+      "_origin": "ast",
+      "community": 0,
+      "community_name": "Open Issues",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "wobkey rgb cli \u2014 implementation plan",
+      "source_file": "PLAN.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_main",
+      "label": "main.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "main.go",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_main_execute",
+      "label": "Execute()",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "execute()",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L18"
+    },
+    {
+      "id": "cmd_wobkey_main_main",
+      "label": "main()",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "main()",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L25"
+    },
+    {
+      "id": "cmd_wobkey_rgb_brightness",
+      "label": "brightness.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "brightness.go",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_color",
+      "label": "color.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "color.go",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_disable",
+      "label": "disable.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "disable.go",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_effect",
+      "label": "effect.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "effect.go",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_enable",
+      "label": "enable.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "enable.go",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_info",
+      "label": "info.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "info.go",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_mode",
+      "label": "mode.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "mode.go",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_speed",
+      "label": "speed.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "speed.go",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_rgb_effects",
+      "label": "effects.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "effects.go",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_rgb_effects_parsehexcolor",
+      "label": "ParseHexColor()",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "parsehexcolor()",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L134"
+    },
+    {
+      "id": "internal_rgb_effects_test",
+      "label": "effects_test.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "effects_test.go",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_rgb_effects_test_testparsehexcolor",
+      "label": "TestParseHexColor()",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "testparsehexcolor()",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L82"
+    },
+    {
+      "id": "internal_via_protocol",
+      "label": "protocol.go",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "protocol.go",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "rgb_color",
+      "label": "Color",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "color",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L127"
+    },
+    {
+      "id": "rgb_color_hsv",
+      "label": ".HSV()",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": ".hsv()",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L164"
+    },
+    {
+      "id": "rgb_ledparam",
+      "label": "LEDParam",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "ledparam",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L114"
+    },
+    {
+      "id": "rgb_state",
+      "label": "State",
+      "_origin": "ast",
+      "community": 1,
+      "community_name": "main.go",
+      "file_type": "code",
+      "norm_label": "state",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L155"
+    },
+    {
+      "id": "readme",
+      "label": "README.md",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "readme.md",
+      "source_file": "README.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "readme_architecture",
+      "label": "Architecture",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "architecture",
+      "source_file": "README.md",
+      "source_location": "L97"
+    },
+    {
+      "id": "readme_cli_reference",
+      "label": "CLI Reference",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "cli reference",
+      "source_file": "README.md",
+      "source_location": "L83"
+    },
+    {
+      "id": "readme_installation",
+      "label": "Installation",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "installation",
+      "source_file": "README.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "readme_linux_hid_device_permissions",
+      "label": "Linux HID Device Permissions",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "linux hid device permissions",
+      "source_file": "README.md",
+      "source_location": "L42"
+    },
+    {
+      "id": "readme_option_1_quick_per_session",
+      "label": "Option 1: Quick (Per Session)",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "option 1: quick (per session)",
+      "source_file": "README.md",
+      "source_location": "L46"
+    },
+    {
+      "id": "readme_option_2_permanent_udev_rule",
+      "label": "Option 2: Permanent (udev Rule)",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "option 2: permanent (udev rule)",
+      "source_file": "README.md",
+      "source_location": "L57"
+    },
+    {
+      "id": "readme_protocol",
+      "label": "Protocol",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "protocol",
+      "source_file": "README.md",
+      "source_location": "L108"
+    },
+    {
+      "id": "readme_supported_keyboards",
+      "label": "Supported Keyboards",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "supported keyboards",
+      "source_file": "README.md",
+      "source_location": "L74"
+    },
+    {
+      "id": "readme_usage",
+      "label": "Usage",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "usage",
+      "source_file": "README.md",
+      "source_location": "L19"
+    },
+    {
+      "id": "readme_wobkey_rgb_cli",
+      "label": "Wobkey RGB CLI",
+      "_origin": "ast",
+      "community": 10,
+      "community_name": "Wobkey RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "wobkey rgb cli",
+      "source_file": "README.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "opencode_plugins_graphify",
+      "label": "graphify.js",
+      "_origin": "ast",
+      "community": 11,
+      "community_name": "graphify.js",
+      "file_type": "code",
+      "norm_label": "graphify.js",
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L1"
+    },
+    {
+      "id": "opencode_plugins_graphify_rationale_4",
+      "label": "IMPORTANT: keep the reminder string free of backticks and $(...) constructs.",
+      "_origin": "ast",
+      "community": 11,
+      "community_name": "graphify.js",
+      "file_type": "rationale",
+      "norm_label": "important: keep the reminder string free of backticks and $(...) constructs.",
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L4"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports",
+      "label": "exports.md",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "exports.md",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "label": "graphify reference: extra exports and benchmark",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: extra exports and benchmark",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_6b_wiki_only_if_wiki_flag",
+      "label": "Step 6b - Wiki (only if --wiki flag)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 6b - wiki (only if --wiki flag)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_7_neo4j_export_only_if_neo4j_or_neo4j_push_flag",
+      "label": "Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 7 - neo4j export (only if --neo4j or --neo4j-push flag)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L15"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_7a_falkordb_export_only_if_falkordb_or_falkordb_push_flag",
+      "label": "Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 7a - falkordb export (only if --falkordb or --falkordb-push flag)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L31"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_7b_svg_export_only_if_svg_flag",
+      "label": "Step 7b - SVG export (only if --svg flag)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 7b - svg export (only if --svg flag)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L47"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_7c_graphml_export_only_if_graphml_flag",
+      "label": "Step 7c - GraphML export (only if --graphml flag)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 7c - graphml export (only if --graphml flag)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L53"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_7d_mcp_server_only_if_mcp_flag",
+      "label": "Step 7d - MCP server (only if --mcp flag)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 7d - mcp server (only if --mcp flag)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L59"
+    },
+    {
+      "id": "claude_skills_graphify_references_exports_step_8_token_reduction_benchmark_only_if_total_words_5000",
+      "label": "Step 8 - Token reduction benchmark (only if total_words > 5000)",
+      "_origin": "ast",
+      "community": 12,
+      "community_name": "graphify reference: extra exports and benchmark",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 8 - token reduction benchmark (only if total_words > 5000)",
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L79"
+    },
+    {
+      "id": "opencode_opencode",
+      "label": "opencode.json",
+      "_origin": "ast",
+      "community": 13,
+      "community_name": "opencode.json",
+      "file_type": "code",
+      "norm_label": "opencode.json",
+      "source_file": ".opencode/opencode.json",
+      "source_location": "L1"
+    },
+    {
+      "id": "opencode_opencode_plugin",
+      "label": "plugin",
+      "_origin": "ast",
+      "community": 13,
+      "community_name": "opencode.json",
+      "file_type": "code",
+      "norm_label": "plugin",
+      "source_file": ".opencode/opencode.json",
+      "source_location": "L3"
+    },
+    {
+      "id": "opencode_opencode_schema",
+      "label": "$schema",
+      "_origin": "ast",
+      "community": 13,
+      "community_name": "opencode.json",
+      "file_type": "code",
+      "norm_label": "$schema",
+      "source_file": ".opencode/opencode.json",
+      "source_location": "L2"
+    },
+    {
+      "id": "pkg_github_com_wobkey_rgb",
+      "label": "github.com/wobkey/rgb",
+      "_origin": "ast",
+      "community": 14,
+      "community_name": "github.com/wobkey/rgb",
+      "ecosystem": "go",
+      "file_type": "code",
+      "norm_label": "github.com/wobkey/rgb",
+      "source_file": "go.mod",
+      "source_location": "L1",
+      "type": "package"
+    },
+    {
+      "id": "claude_skills_graphify_references_query",
+      "label": "query.md",
+      "_origin": "ast",
+      "community": 15,
+      "community_name": "graphify reference: query, path, explain",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "query.md",
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_query_for_graphify_explain",
+      "label": "For /graphify explain",
+      "_origin": "ast",
+      "community": 15,
+      "community_name": "graphify reference: query, path, explain",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for /graphify explain",
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L254"
+    },
+    {
+      "id": "claude_skills_graphify_references_query_for_graphify_path",
+      "label": "For /graphify path",
+      "_origin": "ast",
+      "community": 15,
+      "community_name": "graphify reference: query, path, explain",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for /graphify path",
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L186"
+    },
+    {
+      "id": "claude_skills_graphify_references_query_graphify_reference_query_path_explain",
+      "label": "graphify reference: query, path, explain",
+      "_origin": "ast",
+      "community": 15,
+      "community_name": "graphify reference: query, path, explain",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: query, path, explain",
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_query_step_0_constrained_query_expansion_required_before_traversal",
+      "label": "Step 0 \u2014 Constrained query expansion (REQUIRED before traversal)",
+      "_origin": "ast",
+      "community": 15,
+      "community_name": "graphify reference: query, path, explain",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 0 \u2014 constrained query expansion (required before traversal)",
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L23"
+    },
+    {
+      "id": "claude_skills_graphify_references_query_step_1_traversal",
+      "label": "Step 1 \u2014 Traversal",
+      "_origin": "ast",
+      "community": 15,
+      "community_name": "graphify reference: query, path, explain",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 1 \u2014 traversal",
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L61"
+    },
+    {
+      "id": "claude_skills_graphify_references_add_watch",
+      "label": "add-watch.md",
+      "_origin": "ast",
+      "community": 16,
+      "community_name": "graphify reference: add a URL and watch a folder",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "add-watch.md",
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_add_watch_for_graphify_add",
+      "label": "For /graphify add",
+      "_origin": "ast",
+      "community": 16,
+      "community_name": "graphify reference: add a URL and watch a folder",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for /graphify add",
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "claude_skills_graphify_references_add_watch_for_watch",
+      "label": "For --watch",
+      "_origin": "ast",
+      "community": 16,
+      "community_name": "graphify reference: add a URL and watch a folder",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for --watch",
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L39"
+    },
+    {
+      "id": "claude_skills_graphify_references_add_watch_graphify_reference_add_a_url_and_watch_a_folder",
+      "label": "graphify reference: add a URL and watch a folder",
+      "_origin": "ast",
+      "community": 16,
+      "community_name": "graphify reference: add a URL and watch a folder",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: add a url and watch a folder",
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_hooks",
+      "label": "hooks.md",
+      "_origin": "ast",
+      "community": 17,
+      "community_name": "graphify reference: commit hook and native CLAUDE.md integration",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "hooks.md",
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_hooks_for_git_commit_hook",
+      "label": "For git commit hook",
+      "_origin": "ast",
+      "community": 17,
+      "community_name": "graphify reference: commit hook and native CLAUDE.md integration",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for git commit hook",
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "claude_skills_graphify_references_hooks_for_native_claude_md_integration",
+      "label": "For native CLAUDE.md integration",
+      "_origin": "ast",
+      "community": 17,
+      "community_name": "graphify reference: commit hook and native CLAUDE.md integration",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for native claude.md integration",
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L21"
+    },
+    {
+      "id": "claude_skills_graphify_references_hooks_graphify_reference_commit_hook_and_native_claude_md_integration",
+      "label": "graphify reference: commit hook and native CLAUDE.md integration",
+      "_origin": "ast",
+      "community": 17,
+      "community_name": "graphify reference: commit hook and native CLAUDE.md integration",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: commit hook and native claude.md integration",
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_update",
+      "label": "update.md",
+      "_origin": "ast",
+      "community": 18,
+      "community_name": "graphify reference: incremental update and cluster-only",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "update.md",
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_update_for_cluster_only",
+      "label": "For --cluster-only",
+      "_origin": "ast",
+      "community": 18,
+      "community_name": "graphify reference: incremental update and cluster-only",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for --cluster-only",
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L202"
+    },
+    {
+      "id": "claude_skills_graphify_references_update_for_update_incremental_re_extraction",
+      "label": "For --update (incremental re-extraction)",
+      "_origin": "ast",
+      "community": 18,
+      "community_name": "graphify reference: incremental update and cluster-only",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for --update (incremental re-extraction)",
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "claude_skills_graphify_references_update_graphify_reference_incremental_update_and_cluster_only",
+      "label": "graphify reference: incremental update and cluster-only",
+      "_origin": "ast",
+      "community": 18,
+      "community_name": "graphify reference: incremental update and cluster-only",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: incremental update and cluster-only",
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_github_and_merge",
+      "label": "github-and-merge.md",
+      "_origin": "ast",
+      "community": 19,
+      "community_name": "graphify reference: GitHub clone and cross-repo merge",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "github-and-merge.md",
+      "source_file": ".claude/skills/graphify/references/github-and-merge.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_github_and_merge_graphify_reference_github_clone_and_cross_repo_merge",
+      "label": "graphify reference: GitHub clone and cross-repo merge",
+      "_origin": "ast",
+      "community": 19,
+      "community_name": "graphify reference: GitHub clone and cross-repo merge",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: github clone and cross-repo merge",
+      "source_file": ".claude/skills/graphify/references/github-and-merge.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_github_and_merge_step_0_clone_github_repo_s_only_if_a_github_url_was_given",
+      "label": "Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)",
+      "_origin": "ast",
+      "community": 19,
+      "community_name": "graphify reference: GitHub clone and cross-repo merge",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 0 - clone github repo(s) (only if a github url was given)",
+      "source_file": ".claude/skills/graphify/references/github-and-merge.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "hid_device",
+      "label": "Device",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "device",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L24"
+    },
+    {
+      "id": "hid_device_close",
+      "label": ".Close()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": ".close()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L106"
+    },
+    {
+      "id": "hid_device_path",
+      "label": ".Path()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": ".path()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L60"
+    },
+    {
+      "id": "hid_device_pid",
+      "label": ".PID()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": ".pid()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L57"
+    },
+    {
+      "id": "hid_device_read",
+      "label": ".Read()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": ".read()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L79"
+    },
+    {
+      "id": "hid_device_sendreport",
+      "label": ".SendReport()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": ".sendreport()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L64"
+    },
+    {
+      "id": "hid_device_vid",
+      "label": ".VID()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": ".vid()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L54"
+    },
+    {
+      "id": "hid_devicesinfo",
+      "label": "DevicesInfo",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "devicesinfo",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L32"
+    },
+    {
+      "id": "internal_hid_hid",
+      "label": "hid.go",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "hid.go",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_hid_hid_discoverall",
+      "label": "DiscoverAll()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "discoverall()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L112"
+    },
+    {
+      "id": "internal_hid_hid_go_hid_deviceinfo",
+      "label": "DeviceInfo",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "deviceinfo",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L37"
+    },
+    {
+      "id": "internal_hid_hid_israwhiddescriptor",
+      "label": "isRawHIDDescriptor()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "israwhiddescriptor()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L158"
+    },
+    {
+      "id": "internal_hid_hid_openpath",
+      "label": "OpenPath()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "openpath()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L45"
+    },
+    {
+      "id": "internal_hid_hid_parsehex",
+      "label": "parseHex()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "parsehex()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L211"
+    },
+    {
+      "id": "internal_hid_hid_parseuevent",
+      "label": "parseUEVENT()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "parseuevent()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L170"
+    },
+    {
+      "id": "internal_hid_hid_splitlines",
+      "label": "splitLines()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "splitlines()",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L194"
+    },
+    {
+      "id": "internal_hid_hid_test",
+      "label": "hid_test.go",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "hid_test.go",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_hid_hid_test_testisrawhiddescriptor",
+      "label": "TestIsRawHIDDescriptor()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "testisrawhiddescriptor()",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L90"
+    },
+    {
+      "id": "internal_hid_hid_test_testparsehex",
+      "label": "TestParseHex()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "testparsehex()",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L27"
+    },
+    {
+      "id": "internal_hid_hid_test_testparseuevent",
+      "label": "TestParseUEVENT()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "testparseuevent()",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L111"
+    },
+    {
+      "id": "internal_hid_hid_test_testreadtimesoutwithoutresponse",
+      "label": "TestReadTimesOutWithoutResponse()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "testreadtimesoutwithoutresponse()",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L9"
+    },
+    {
+      "id": "internal_hid_hid_test_testsplitlines",
+      "label": "TestSplitLines()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "testsplitlines()",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L65"
+    },
+    {
+      "id": "internal_via_protocol_new",
+      "label": "New()",
+      "_origin": "ast",
+      "community": 2,
+      "community_name": "hid.go",
+      "file_type": "code",
+      "norm_label": "new()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L23"
+    },
+    {
+      "id": "claude_skills_graphify_references_transcribe",
+      "label": "transcribe.md",
+      "_origin": "ast",
+      "community": 20,
+      "community_name": "graphify reference: transcribe video and audio",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "transcribe.md",
+      "source_file": ".claude/skills/graphify/references/transcribe.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_transcribe_graphify_reference_transcribe_video_and_audio",
+      "label": "graphify reference: transcribe video and audio",
+      "_origin": "ast",
+      "community": 20,
+      "community_name": "graphify reference: transcribe video and audio",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: transcribe video and audio",
+      "source_file": ".claude/skills/graphify/references/transcribe.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_transcribe_step_2_5_transcribe_video_audio_files_only_if_video_files_detected",
+      "label": "Step 2.5 - Transcribe video / audio files (only if video files detected)",
+      "_origin": "ast",
+      "community": 20,
+      "community_name": "graphify reference: transcribe video and audio",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 2.5 - transcribe video / audio files (only if video files detected)",
+      "source_file": ".claude/skills/graphify/references/transcribe.md",
+      "source_location": "L5"
+    },
+    {
+      "id": "claude",
+      "label": "CLAUDE.md",
+      "_origin": "ast",
+      "community": 21,
+      "community_name": "CLAUDE.md",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "claude.md",
+      "source_file": "CLAUDE.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_graphify",
+      "label": "graphify",
+      "_origin": "ast",
+      "community": 21,
+      "community_name": "CLAUDE.md",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify",
+      "source_file": "CLAUDE.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_claude",
+      "label": ".claude/CLAUDE.md",
+      "_origin": "ast",
+      "community": 22,
+      "community_name": ".claude/CLAUDE.md",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": ".claude/claude.md",
+      "source_file": ".claude/CLAUDE.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_claude_graphify",
+      "label": "graphify",
+      "_origin": "ast",
+      "community": 22,
+      "community_name": ".claude/CLAUDE.md",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify",
+      "source_file": ".claude/CLAUDE.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_extraction_spec",
+      "label": "extraction-spec.md",
+      "_origin": "ast",
+      "community": 23,
+      "community_name": "extraction-spec.md",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "extraction-spec.md",
+      "source_file": ".claude/skills/graphify/references/extraction-spec.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_references_extraction_spec_graphify_reference_extraction_subagent_prompt",
+      "label": "graphify reference: extraction subagent prompt",
+      "_origin": "ast",
+      "community": 23,
+      "community_name": "extraction-spec.md",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify reference: extraction subagent prompt",
+      "source_file": ".claude/skills/graphify/references/extraction-spec.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_main_init",
+      "label": "init()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "init()",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L66"
+    },
+    {
+      "id": "cmd_wobkey_rgb_brightness_newbrightnesscmd",
+      "label": "NewBrightnessCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newbrightnesscmd()",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L12"
+    },
+    {
+      "id": "cmd_wobkey_rgb_color_newcolorcmd",
+      "label": "NewColorCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newcolorcmd()",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L12"
+    },
+    {
+      "id": "cmd_wobkey_rgb_disable_newdisablecmd",
+      "label": "NewDisableCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newdisablecmd()",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L10"
+    },
+    {
+      "id": "cmd_wobkey_rgb_effect_getavailableeffects",
+      "label": "GetAvailableEffects()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "getavailableeffects()",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L59"
+    },
+    {
+      "id": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "label": "NewEffectCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "neweffectcmd()",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L15"
+    },
+    {
+      "id": "cmd_wobkey_rgb_enable_newenablecmd",
+      "label": "NewEnableCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newenablecmd()",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L10"
+    },
+    {
+      "id": "cmd_wobkey_rgb_info_newinfocmd",
+      "label": "NewInfoCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newinfocmd()",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L13"
+    },
+    {
+      "id": "cmd_wobkey_rgb_mode_newmodecmd",
+      "label": "NewModeCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newmodecmd()",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L12"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb",
+      "label": "rgb.go",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "rgb.go",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_init",
+      "label": "Init()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "init()",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L66"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_lightingenabled",
+      "label": "lightingEnabled()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "lightingenabled()",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L54"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_opendevice",
+      "label": "OpenDevice()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "opendevice()",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L14"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_parseuint8",
+      "label": "ParseUint8()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "parseuint8()",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L58"
+    },
+    {
+      "id": "cmd_wobkey_rgb_speed_newspeedcmd",
+      "label": "NewSpeedCmd()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "newspeedcmd()",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L12"
+    },
+    {
+      "id": "go_type_github_com_spf13_cobra_command",
+      "label": "github.com/spf13/cobra.Command",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "github.com/spf13/cobra.command",
+      "source_file": "",
+      "source_location": ""
+    },
+    {
+      "id": "internal_rgb_effects_go_rgb_effect",
+      "label": "Effect",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "effect",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L10"
+    },
+    {
+      "id": "internal_rgb_effects_parseeffect",
+      "label": "ParseEffect()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "parseeffect()",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L66"
+    },
+    {
+      "id": "internal_rgb_effects_test_testeffectstring",
+      "label": "TestEffectString()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "testeffectstring()",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L60"
+    },
+    {
+      "id": "internal_rgb_effects_test_testparseeffect",
+      "label": "TestParseEffect()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": "testparseeffect()",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L22"
+    },
+    {
+      "id": "rgb_effect_string",
+      "label": ".String()",
+      "_origin": "ast",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "file_type": "code",
+      "norm_label": ".string()",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L36"
+    },
+    {
+      "id": "internal_device_device",
+      "label": "device.go",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "device.go",
+      "source_file": "internal/device/device.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_device_device_discover",
+      "label": "Discover()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "discover()",
+      "source_file": "internal/device/device.go",
+      "source_location": "L75"
+    },
+    {
+      "id": "internal_device_device_go_device_device",
+      "label": "Device",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "device",
+      "source_file": "internal/device/device.go",
+      "source_location": "L23"
+    },
+    {
+      "id": "internal_device_device_go_device_keyboard",
+      "label": "Keyboard",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "keyboard",
+      "source_file": "internal/device/device.go",
+      "source_location": "L13"
+    },
+    {
+      "id": "internal_device_device_loadkeyboards",
+      "label": "LoadKeyboards()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "loadkeyboards()",
+      "source_file": "internal/device/device.go",
+      "source_location": "L29"
+    },
+    {
+      "id": "internal_device_device_matchkeyboards",
+      "label": "matchKeyboards()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "matchkeyboards()",
+      "source_file": "internal/device/device.go",
+      "source_location": "L92"
+    },
+    {
+      "id": "internal_device_device_test",
+      "label": "device_test.go",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "device_test.go",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_device_device_test_testloadkeyboards",
+      "label": "TestLoadKeyboards()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "testloadkeyboards()",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L11"
+    },
+    {
+      "id": "internal_device_device_test_testloadkeyboardsemptyfile",
+      "label": "TestLoadKeyboardsEmptyFile()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "testloadkeyboardsemptyfile()",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L98"
+    },
+    {
+      "id": "internal_device_device_test_testloadkeyboardsinvalid",
+      "label": "TestLoadKeyboardsInvalid()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "testloadkeyboardsinvalid()",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L54"
+    },
+    {
+      "id": "internal_device_device_test_testmatchkeyboardsselectsrawhidinterface",
+      "label": "TestMatchKeyboardsSelectsRawHIDInterface()",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "testmatchkeyboardsselectsrawhidinterface()",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L77"
+    },
+    {
+      "id": "wobkey_info",
+      "label": "Info",
+      "_origin": "ast",
+      "community": 4,
+      "community_name": "device.go",
+      "file_type": "code",
+      "norm_label": "info",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L56"
+    },
+    {
+      "id": "claude_skills_graphify_skill",
+      "label": "SKILL.md",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "frontmatter": {
+        "name": "graphify",
+        "description": "Use for any question about a codebase, its architecture, file relationships, or project content \u2014 especially when graphify-out/ exists, where the question should be treated as a graphify query first. Turns any input (code, docs, papers, images, videos) into a persistent knowledge graph with god nodes, community detection, and query/path/explain tools."
+      },
+      "node_kind": "page",
+      "norm_label": "skill.md",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "claude_skills_graphify_skill_for_graphify_add_and_watch",
+      "label": "For /graphify add and --watch",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for /graphify add and --watch",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L695"
+    },
+    {
+      "id": "claude_skills_graphify_skill_for_graphify_query",
+      "label": "For /graphify query",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for /graphify query",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L683"
+    },
+    {
+      "id": "claude_skills_graphify_skill_for_the_commit_hook_and_native_claude_md_integration",
+      "label": "For the commit hook and native CLAUDE.md integration",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for the commit hook and native claude.md integration",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L701"
+    },
+    {
+      "id": "claude_skills_graphify_skill_for_update_and_cluster_only",
+      "label": "For --update and --cluster-only",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "for --update and --cluster-only",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L677"
+    },
+    {
+      "id": "claude_skills_graphify_skill_graphify",
+      "label": "/graphify",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "/graphify",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L6"
+    },
+    {
+      "id": "claude_skills_graphify_skill_honesty_rules",
+      "label": "Honesty Rules",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "honesty rules",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L707"
+    },
+    {
+      "id": "claude_skills_graphify_skill_interpreter_guard_for_subcommands",
+      "label": "Interpreter guard for subcommands",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "interpreter guard for subcommands",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L659"
+    },
+    {
+      "id": "claude_skills_graphify_skill_part_a_structural_extraction_for_code_files",
+      "label": "Part A - Structural extraction for code files",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "part a - structural extraction for code files",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L170"
+    },
+    {
+      "id": "claude_skills_graphify_skill_part_b_semantic_extraction_parallel_subagents",
+      "label": "Part B - Semantic extraction (parallel subagents)",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "part b - semantic extraction (parallel subagents)",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L196"
+    },
+    {
+      "id": "claude_skills_graphify_skill_part_c_merge_ast_semantic_into_final_extraction",
+      "label": "Part C - Merge AST + semantic into final extraction",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "part c - merge ast + semantic into final extraction",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L359"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_0_github_repos_and_multi_path_merge_only_if_a_url_or_several_paths",
+      "label": "Step 0 - GitHub repos and multi-path merge (only if a URL or several paths)",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 0 - github repos and multi-path merge (only if a url or several paths)",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L61"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_1_ensure_graphify_is_installed",
+      "label": "Step 1 - Ensure graphify is installed",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 1 - ensure graphify is installed",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L65"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_2_5_video_and_audio_only_if_video_files_detected",
+      "label": "Step 2.5 - Video and audio (only if video files detected)",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 2.5 - video and audio (only if video files detected)",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L147"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_2_detect_files",
+      "label": "Step 2 - Detect files",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 2 - detect files",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L107"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_3_extract_entities_and_relationships",
+      "label": "Step 3 - Extract entities and relationships",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 3 - extract entities and relationships",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L151"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_4_5_graph_health_check_read_only_integrity_gate",
+      "label": "Step 4.5 - Graph health check (read-only integrity gate)",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 4.5 - graph health check (read-only integrity gate)",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L456"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_4_build_graph_cluster_analyze_generate_outputs",
+      "label": "Step 4 - Build graph, cluster, analyze, generate outputs",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 4 - build graph, cluster, analyze, generate outputs",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L393"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_5_label_communities",
+      "label": "Step 5 - Label communities",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 5 - label communities",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L482"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_6_generate_obsidian_vault_opt_in_html",
+      "label": "Step 6 - Generate Obsidian vault (opt-in) + HTML",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 6 - generate obsidian vault (opt-in) + html",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L531"
+    },
+    {
+      "id": "claude_skills_graphify_skill_step_9_save_manifest_update_cost_tracker_clean_up_and_report",
+      "label": "Step 9 - Save manifest, update cost tracker, clean up, and report",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "step 9 - save manifest, update cost tracker, clean up, and report",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L557"
+    },
+    {
+      "id": "claude_skills_graphify_skill_steps_6b_8_wiki_neo4j_falkordb_svg_graphml_mcp_benchmark_only_on_their_flags",
+      "label": "Steps 6b-8 - Wiki, Neo4j, FalkorDB, SVG, GraphML, MCP, benchmark (only on their flags)",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "steps 6b-8 - wiki, neo4j, falkordb, svg, graphml, mcp, benchmark (only on their flags)",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L551"
+    },
+    {
+      "id": "claude_skills_graphify_skill_usage",
+      "label": "Usage",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "usage",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L10"
+    },
+    {
+      "id": "claude_skills_graphify_skill_what_graphify_is_for",
+      "label": "What graphify is for",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "what graphify is for",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L45"
+    },
+    {
+      "id": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "label": "What You Must Do When Invoked",
+      "_origin": "ast",
+      "community": 5,
+      "community_name": "What You Must Do When Invoked",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "what you must do when invoked",
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L49"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_test",
+      "label": "rgb_test.go",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "rgb_test.go",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_test_testdeviceflagisinheritedbyrgbcommands",
+      "label": "TestDeviceFlagIsInheritedByRGBCommands()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testdeviceflagisinheritedbyrgbcommands()",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L31"
+    },
+    {
+      "id": "cmd_wobkey_rgb_rgb_test_testlightingenabledrequiresactiveeffectandbrightness",
+      "label": "TestLightingEnabledRequiresActiveEffectAndBrightness()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testlightingenabledrequiresactiveeffectandbrightness()",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L9"
+    },
+    {
+      "id": "go_type_testing_t",
+      "label": "testing.T",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testing.t",
+      "source_file": "",
+      "source_location": ""
+    },
+    {
+      "id": "internal_rgb_effects_test_testcolortohsv",
+      "label": "TestColorToHSV()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testcolortohsv()",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L122"
+    },
+    {
+      "id": "internal_rgb_effects_test_testqmkvalueids",
+      "label": "TestQMKValueIDs()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testqmkvalueids()",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L7"
+    },
+    {
+      "id": "internal_via_protocol_test",
+      "label": "protocol_test.go",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "protocol_test.go",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L1"
+    },
+    {
+      "id": "internal_via_protocol_test_testdisablelightingusesallimpact80channels",
+      "label": "TestDisableLightingUsesAllImpact80Channels()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testdisablelightingusesallimpact80channels()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L96"
+    },
+    {
+      "id": "internal_via_protocol_test_testenablelightingusesallimpact80channels",
+      "label": "TestEnableLightingUsesAllImpact80Channels()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testenablelightingusesallimpact80channels()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L120"
+    },
+    {
+      "id": "internal_via_protocol_test_testgetvaluerejectsunhandledresponse",
+      "label": "TestGetValueRejectsUnhandledResponse()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testgetvaluerejectsunhandledresponse()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L170"
+    },
+    {
+      "id": "internal_via_protocol_test_testgetvaluereturnsqmkvaluedata",
+      "label": "TestGetValueReturnsQMKValueData()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testgetvaluereturnsqmkvaluedata()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L144"
+    },
+    {
+      "id": "internal_via_protocol_test_testsetcolorusesqmkcolorvalue",
+      "label": "TestSetColorUsesQMKColorValue()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testsetcolorusesqmkcolorvalue()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L76"
+    },
+    {
+      "id": "internal_via_protocol_test_testsetvalueconsumesqmkresponse",
+      "label": "TestSetValueConsumesQMKResponse()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testsetvalueconsumesqmkresponse()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L59"
+    },
+    {
+      "id": "internal_via_protocol_test_testsetvalueusesqmkrgblightpayload",
+      "label": "TestSetValueUsesQMKRGBLightPayload()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "testsetvalueusesqmkrgblightpayload()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L34"
+    },
+    {
+      "id": "via_faketransport",
+      "label": "fakeTransport",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": "faketransport",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L8"
+    },
+    {
+      "id": "via_faketransport_close",
+      "label": ".Close()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": ".close()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L32"
+    },
+    {
+      "id": "via_faketransport_read",
+      "label": ".Read()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": ".read()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L21"
+    },
+    {
+      "id": "via_faketransport_sendreport",
+      "label": ".SendReport()",
+      "_origin": "ast",
+      "community": 6,
+      "community_name": "testing.T",
+      "file_type": "code",
+      "norm_label": ".sendreport()",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L15"
+    },
+    {
+      "id": "agents",
+      "label": "AGENTS.md",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "page",
+      "norm_label": "agents.md",
+      "source_file": "AGENTS.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "label": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "agent guidelines \u2014 wobkey impact 80 rgb cli",
+      "source_file": "AGENTS.md",
+      "source_location": "L1"
+    },
+    {
+      "id": "agents_architecture",
+      "label": "Architecture",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "architecture",
+      "source_file": "AGENTS.md",
+      "source_location": "L6"
+    },
+    {
+      "id": "agents_cli_interface",
+      "label": "CLI Interface",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "cli interface",
+      "source_file": "AGENTS.md",
+      "source_location": "L16"
+    },
+    {
+      "id": "agents_concurrency",
+      "label": "Concurrency",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "concurrency",
+      "source_file": "AGENTS.md",
+      "source_location": "L100"
+    },
+    {
+      "id": "agents_constraints",
+      "label": "Constraints",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "constraints",
+      "source_file": "AGENTS.md",
+      "source_location": "L55"
+    },
+    {
+      "id": "agents_error_handling",
+      "label": "Error Handling",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "error handling",
+      "source_file": "AGENTS.md",
+      "source_location": "L80"
+    },
+    {
+      "id": "agents_go_development",
+      "label": "Go Development",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "go development",
+      "source_file": "AGENTS.md",
+      "source_location": "L61"
+    },
+    {
+      "id": "agents_graphify",
+      "label": "graphify",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "graphify",
+      "source_file": "AGENTS.md",
+      "source_location": "L119"
+    },
+    {
+      "id": "agents_interfaces_types",
+      "label": "Interfaces & Types",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "interfaces & types",
+      "source_file": "AGENTS.md",
+      "source_location": "L93"
+    },
+    {
+      "id": "agents_keyboards_known_wobkey_vid_pid",
+      "label": "Keyboards (Known Wobkey VID/PID)",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "keyboards (known wobkey vid/pid)",
+      "source_file": "AGENTS.md",
+      "source_location": "L40"
+    },
+    {
+      "id": "agents_modules_packages",
+      "label": "Modules & Packages",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "modules & packages",
+      "source_file": "AGENTS.md",
+      "source_location": "L113"
+    },
+    {
+      "id": "agents_objective",
+      "label": "Objective",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "objective",
+      "source_file": "AGENTS.md",
+      "source_location": "L3"
+    },
+    {
+      "id": "agents_stack",
+      "label": "Stack",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "stack",
+      "source_file": "AGENTS.md",
+      "source_location": "L49"
+    },
+    {
+      "id": "agents_style_effective_go_code_review_comments",
+      "label": "Style (Effective Go + Code Review Comments)",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "style (effective go + code review comments)",
+      "source_file": "AGENTS.md",
+      "source_location": "L72"
+    },
+    {
+      "id": "agents_testing",
+      "label": "Testing",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "testing",
+      "source_file": "AGENTS.md",
+      "source_location": "L106"
+    },
+    {
+      "id": "agents_tooling",
+      "label": "Tooling",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "tooling",
+      "source_file": "AGENTS.md",
+      "source_location": "L63"
+    },
+    {
+      "id": "agents_via_protocol_essentials",
+      "label": "VIA Protocol Essentials",
+      "_origin": "ast",
+      "community": 7,
+      "community_name": "Agent Guidelines \u2014 Wobkey Impact 80 RGB CLI",
+      "file_type": "document",
+      "node_kind": "heading",
+      "norm_label": "via protocol essentials",
+      "source_file": "AGENTS.md",
+      "source_location": "L30"
+    },
+    {
+      "id": "internal_via_protocol_go_via_protocol",
+      "label": "Protocol",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": "protocol",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L17"
+    },
+    {
+      "id": "via_ledtype",
+      "label": "LEDType",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": "ledtype",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L53"
+    },
+    {
+      "id": "via_message",
+      "label": "Message",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": "message",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L44"
+    },
+    {
+      "id": "via_protocol_close",
+      "label": ".Close()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".close()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L36"
+    },
+    {
+      "id": "via_protocol_disablelighting",
+      "label": ".DisableLighting()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".disablelighting()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L76"
+    },
+    {
+      "id": "via_protocol_enablelighting",
+      "label": ".EnableLighting()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".enablelighting()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L88"
+    },
+    {
+      "id": "via_protocol_getvalue",
+      "label": ".GetValue()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".getvalue()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L116"
+    },
+    {
+      "id": "via_protocol_readresponse",
+      "label": ".readResponse()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".readresponse()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L139"
+    },
+    {
+      "id": "via_protocol_setcolor",
+      "label": ".SetColor()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".setcolor()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L100"
+    },
+    {
+      "id": "via_protocol_setvalue",
+      "label": ".SetValue()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".setvalue()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L62"
+    },
+    {
+      "id": "via_transport",
+      "label": "transport",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": "transport",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L10"
+    },
+    {
+      "id": "via_transport_close",
+      "label": ".Close()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".close()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L13"
+    },
+    {
+      "id": "via_transport_read",
+      "label": ".Read()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".read()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L12"
+    },
+    {
+      "id": "via_transport_sendreport",
+      "label": ".SendReport()",
+      "_origin": "ast",
+      "community": 9,
+      "community_name": "Protocol",
+      "file_type": "code",
+      "norm_label": ".sendreport()",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L11"
+    },
+    {
+      "id": "go_pkg_encoding_json",
+      "label": "go_pkg_encoding_json",
+      "_origin": "semantic",
+      "community": 1,
+      "community_name": "main.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_encoding_json",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_fmt",
+      "label": "go_pkg_fmt",
+      "_origin": "semantic",
+      "community": 1,
+      "community_name": "main.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_fmt",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_github_com_spf13_cobra",
+      "label": "go_pkg_github_com_spf13_cobra",
+      "_origin": "semantic",
+      "community": 1,
+      "community_name": "main.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_github_com_spf13_cobra",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_math",
+      "label": "go_pkg_math",
+      "_origin": "semantic",
+      "community": 1,
+      "community_name": "main.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_math",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_os",
+      "label": "go_pkg_os",
+      "_origin": "semantic",
+      "community": 1,
+      "community_name": "main.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_os",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "ref_fs",
+      "label": "ref_fs",
+      "_origin": "semantic",
+      "community": 11,
+      "community_name": "graphify.js",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "ref_fs",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "ref_path",
+      "label": "ref_path",
+      "_origin": "semantic",
+      "community": 11,
+      "community_name": "graphify.js",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "ref_path",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_bytes",
+      "label": "go_pkg_bytes",
+      "_origin": "semantic",
+      "community": 2,
+      "community_name": "hid.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_bytes",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_strings",
+      "label": "go_pkg_strings",
+      "_origin": "semantic",
+      "community": 2,
+      "community_name": "hid.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_strings",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_syscall",
+      "label": "go_pkg_syscall",
+      "_origin": "semantic",
+      "community": 2,
+      "community_name": "hid.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_syscall",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_unsafe",
+      "label": "go_pkg_unsafe",
+      "_origin": "semantic",
+      "community": 2,
+      "community_name": "hid.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_unsafe",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_strconv",
+      "label": "go_pkg_strconv",
+      "_origin": "semantic",
+      "community": 3,
+      "community_name": "OpenDevice",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_strconv",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_path_filepath",
+      "label": "go_pkg_path_filepath",
+      "_origin": "semantic",
+      "community": 4,
+      "community_name": "device.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_path_filepath",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_testing",
+      "label": "go_pkg_testing",
+      "_origin": "semantic",
+      "community": 6,
+      "community_name": "testing.T",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_testing",
+      "source_file": "",
+      "type": "external"
+    },
+    {
+      "id": "go_pkg_time",
+      "label": "go_pkg_time",
+      "community": 2,
+      "community_name": "hid.go",
+      "external": true,
+      "file_type": "concept",
+      "norm_label": "go_pkg_time",
+      "source_file": "",
+      "type": "external"
+    }
+  ],
+  "links": [
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_rgb_init",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L69",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L71",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_brightness_newbrightnesscmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L72",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_speed_newspeedcmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L73",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_color_newcolorcmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L74",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_mode_newmodecmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L75",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_enable_newenablecmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L76",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_disable_newdisablecmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L77",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_init",
+      "target": "cmd_wobkey_rgb_info_newinfocmd",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L78",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main_main",
+      "target": "cmd_wobkey_main_execute",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L26",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color_newcolorcmd",
+      "target": "internal_rgb_effects_parsehexcolor",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L19",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "target": "internal_rgb_effects_parseeffect",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L29",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "target": "cmd_wobkey_rgb_effect_getavailableeffects",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L35",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info_newinfocmd",
+      "target": "internal_rgb_effects_go_rgb_effect",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_opendevice",
+      "target": "internal_device_device_loadkeyboards",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_opendevice",
+      "target": "internal_device_device_discover",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L20",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_opendevice",
+      "target": "internal_via_protocol_new",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L46",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_discover",
+      "target": "internal_hid_hid_discoverall",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/device/device.go",
+      "source_location": "L76",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_discover",
+      "target": "internal_device_device_matchkeyboards",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/device/device.go",
+      "source_location": "L89",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_discoverall",
+      "target": "internal_hid_hid_parseuevent",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L134",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_discoverall",
+      "target": "internal_hid_hid_israwhiddescriptor",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L150",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_parseuevent",
+      "target": "internal_hid_hid_splitlines",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L171",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_parseuevent",
+      "target": "internal_hid_hid_parsehex",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L182",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_new",
+      "target": "internal_hid_hid_openpath",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L24",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_disablelighting",
+      "target": "via_protocol_setvalue",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L78",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_enablelighting",
+      "target": "via_protocol_setvalue",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L90",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_getvalue",
+      "target": "via_transport_sendreport",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L122",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_getvalue",
+      "target": "via_protocol_readresponse",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L127",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_readresponse",
+      "target": "via_transport_read",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L141",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_setcolor",
+      "target": "via_transport_sendreport",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L108",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_setcolor",
+      "target": "via_protocol_readresponse",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L111",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_setvalue",
+      "target": "via_transport_sendreport",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L69",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_setvalue",
+      "target": "via_protocol_readresponse",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "call",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L72",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_devicesinfo",
+      "target": "internal_hid_hid_go_hid_deviceinfo",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "field",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L33",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_transport",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "field",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L18",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "field",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L19",
+      "weight": 1.0
+    },
+    {
+      "source": "rgb_state",
+      "target": "internal_rgb_effects_go_rgb_effect",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "field",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L157",
+      "weight": 1.0
+    },
+    {
+      "source": "rgb_state",
+      "target": "rgb_color",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "field",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L160",
+      "weight": 1.0
+    },
+    {
+      "source": "wobkey_info",
+      "target": "internal_device_device_go_device_device",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "field",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L57",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "internal_device_device",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "internal_device_device_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "go_pkg_encoding_json",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_brightness",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_color",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_disable",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_effect",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_enable",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_info",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_mode",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_rgb",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_rgb_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_rgb_speed",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "internal_rgb_effects",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "internal_rgb_effects_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "internal_rgb_effects",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "internal_rgb_effects_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_disable",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_disable",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_disable",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "internal_device_device",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "internal_device_device_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "internal_rgb_effects",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "internal_rgb_effects_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_enable",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_enable",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_enable",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "go_pkg_encoding_json",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "internal_rgb_effects",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "internal_rgb_effects_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "internal_rgb_effects",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "internal_rgb_effects_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "go_pkg_strconv",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "internal_device_device",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "internal_device_device_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test",
+      "target": "go_pkg_testing",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "go_pkg_github_com_spf13_cobra",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "internal_rgb_effects",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "internal_rgb_effects_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "internal_via_protocol",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "internal_via_protocol_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "go_pkg_encoding_json",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "go_pkg_path_filepath",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_hid_hid",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_hid_hid_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "go_pkg_path_filepath",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "go_pkg_testing",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "internal_hid_hid",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "internal_hid_hid_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_unsafe",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_bytes",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_strings",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_syscall",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "go_pkg_time",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "go_pkg_os",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "go_pkg_testing",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "go_pkg_time",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "go_pkg_math",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "go_pkg_strconv",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test",
+      "target": "go_pkg_testing",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "go_pkg_fmt",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "internal_device_device",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "internal_device_device_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "internal_hid_hid",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "internal_hid_hid_test",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "go_pkg_bytes",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "go_pkg_testing",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "opencode_plugins_graphify",
+      "target": "ref_path",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "opencode_plugins_graphify",
+      "target": "ref_fs",
+      "relation": "imports_from",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "import",
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect_getavailableeffects",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test_testdeviceflagisinheritedbyrgbcommands",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L31",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test_testlightingenabledrequiresactiveeffectandbrightness",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_discover",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device.go",
+      "source_location": "L75",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_matchkeyboards",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device.go",
+      "source_location": "L92",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_matchkeyboards",
+      "target": "internal_hid_hid_go_hid_deviceinfo",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device.go",
+      "source_location": "L92",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testloadkeyboards",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L11",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testloadkeyboardsemptyfile",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L98",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testloadkeyboardsinvalid",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L54",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testmatchkeyboardsselectsrawhidinterface",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L77",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testisrawhiddescriptor",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L90",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testparsehex",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L27",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testparseuevent",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L111",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testreadtimesoutwithoutresponse",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testsplitlines",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L65",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testcolortohsv",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L122",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testeffectstring",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L60",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testparseeffect",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L22",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testparsehexcolor",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L82",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testqmkvalueids",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_new",
+      "target": "internal_device_device_go_device_device",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L23",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testdisablelightingusesallimpact80channels",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L96",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testenablelightingusesallimpact80channels",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L120",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testgetvaluerejectsunhandledresponse",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L170",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testgetvaluereturnsqmkvaluedata",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L144",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testsetcolorusesqmkcolorvalue",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L76",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testsetvalueconsumesqmkresponse",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test_testsetvalueusesqmkrgblightpayload",
+      "target": "go_type_testing_t",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L34",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_getvalue",
+      "target": "via_ledtype",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L116",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_readresponse",
+      "target": "via_ledtype",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L139",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_readresponse",
+      "target": "via_message",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L139",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_setcolor",
+      "target": "via_ledtype",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L100",
+      "weight": 1.0
+    },
+    {
+      "source": "via_protocol_setvalue",
+      "target": "via_ledtype",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "parameter_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L62",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness_newbrightnesscmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color_newcolorcmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_disable_newdisablecmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect_getavailableeffects",
+      "target": "internal_rgb_effects_go_rgb_effect",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_enable_newenablecmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info_newinfocmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L13",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode_newmodecmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_init",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L66",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_opendevice",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L14",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_opendevice",
+      "target": "internal_via_protocol_go_via_protocol",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L14",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed_newspeedcmd",
+      "target": "go_type_github_com_spf13_cobra_command",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_discover",
+      "target": "internal_device_device_go_device_device",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/device/device.go",
+      "source_location": "L75",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_loadkeyboards",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/device/device.go",
+      "source_location": "L29",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_matchkeyboards",
+      "target": "internal_device_device_go_device_device",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/device/device.go",
+      "source_location": "L92",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_discoverall",
+      "target": "internal_hid_hid_go_hid_deviceinfo",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L112",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_openpath",
+      "target": "hid_device",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L45",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_parseeffect",
+      "target": "internal_rgb_effects_go_rgb_effect",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L66",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_parsehexcolor",
+      "target": "rgb_color",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L134",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_new",
+      "target": "internal_via_protocol_go_via_protocol",
+      "relation": "references",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "context": "return_type",
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L23",
+      "weight": 1.0
+    },
+    {
+      "source": "agents",
+      "target": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_graphify",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L119",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_cli_interface",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L16",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_objective",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L3",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_via_protocol_essentials",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L30",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_keyboards_known_wobkey_vid_pid",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L40",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_stack",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L49",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_constraints",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L55",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_architecture",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_agent_guidelines_wobkey_impact_80_rgb_cli",
+      "target": "agents_go_development",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L61",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_concurrency",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L100",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_testing",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L106",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_modules_packages",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L113",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_tooling",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L63",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_style_effective_go_code_review_comments",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L72",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_error_handling",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L80",
+      "weight": 1.0
+    },
+    {
+      "source": "agents_go_development",
+      "target": "agents_interfaces_types",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "AGENTS.md",
+      "source_location": "L93",
+      "weight": 1.0
+    },
+    {
+      "source": "claude",
+      "target": "claude_graphify",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "CLAUDE.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_claude",
+      "target": "claude_claude_graphify",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/CLAUDE.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_add_watch",
+      "target": "claude_skills_graphify_references_add_watch_graphify_reference_add_a_url_and_watch_a_folder",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_add_watch_graphify_reference_add_a_url_and_watch_a_folder",
+      "target": "claude_skills_graphify_references_add_watch_for_watch",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L39",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_add_watch_graphify_reference_add_a_url_and_watch_a_folder",
+      "target": "claude_skills_graphify_references_add_watch_for_graphify_add",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/add-watch.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports",
+      "target": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_7_neo4j_export_only_if_neo4j_or_neo4j_push_flag",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_7a_falkordb_export_only_if_falkordb_or_falkordb_push_flag",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L31",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_7b_svg_export_only_if_svg_flag",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L47",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_6b_wiki_only_if_wiki_flag",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_7c_graphml_export_only_if_graphml_flag",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L53",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_7d_mcp_server_only_if_mcp_flag",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_exports_graphify_reference_extra_exports_and_benchmark",
+      "target": "claude_skills_graphify_references_exports_step_8_token_reduction_benchmark_only_if_total_words_5000",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/exports.md",
+      "source_location": "L79",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_extraction_spec",
+      "target": "claude_skills_graphify_references_extraction_spec_graphify_reference_extraction_subagent_prompt",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/extraction-spec.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_github_and_merge",
+      "target": "claude_skills_graphify_references_github_and_merge_graphify_reference_github_clone_and_cross_repo_merge",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/github-and-merge.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_github_and_merge_graphify_reference_github_clone_and_cross_repo_merge",
+      "target": "claude_skills_graphify_references_github_and_merge_step_0_clone_github_repo_s_only_if_a_github_url_was_given",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/github-and-merge.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_hooks",
+      "target": "claude_skills_graphify_references_hooks_graphify_reference_commit_hook_and_native_claude_md_integration",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_hooks_graphify_reference_commit_hook_and_native_claude_md_integration",
+      "target": "claude_skills_graphify_references_hooks_for_native_claude_md_integration",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L21",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_hooks_graphify_reference_commit_hook_and_native_claude_md_integration",
+      "target": "claude_skills_graphify_references_hooks_for_git_commit_hook",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/hooks.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_query",
+      "target": "claude_skills_graphify_references_query_graphify_reference_query_path_explain",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_query_graphify_reference_query_path_explain",
+      "target": "claude_skills_graphify_references_query_for_graphify_path",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L186",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_query_graphify_reference_query_path_explain",
+      "target": "claude_skills_graphify_references_query_step_0_constrained_query_expansion_required_before_traversal",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L23",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_query_graphify_reference_query_path_explain",
+      "target": "claude_skills_graphify_references_query_for_graphify_explain",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L254",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_query_graphify_reference_query_path_explain",
+      "target": "claude_skills_graphify_references_query_step_1_traversal",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/query.md",
+      "source_location": "L61",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_transcribe",
+      "target": "claude_skills_graphify_references_transcribe_graphify_reference_transcribe_video_and_audio",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/transcribe.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_transcribe_graphify_reference_transcribe_video_and_audio",
+      "target": "claude_skills_graphify_references_transcribe_step_2_5_transcribe_video_audio_files_only_if_video_files_detected",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/transcribe.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_update",
+      "target": "claude_skills_graphify_references_update_graphify_reference_incremental_update_and_cluster_only",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_update_graphify_reference_incremental_update_and_cluster_only",
+      "target": "claude_skills_graphify_references_update_for_cluster_only",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L202",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_references_update_graphify_reference_incremental_update_and_cluster_only",
+      "target": "claude_skills_graphify_references_update_for_update_incremental_re_extraction",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/references/update.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill",
+      "target": "claude_skills_graphify_skill_graphify",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L6",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_usage",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_what_graphify_is_for",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L45",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L49",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_interpreter_guard_for_subcommands",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L659",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_for_update_and_cluster_only",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L677",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_for_graphify_query",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L683",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_for_graphify_add_and_watch",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L695",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_for_the_commit_hook_and_native_claude_md_integration",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L701",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_graphify",
+      "target": "claude_skills_graphify_skill_honesty_rules",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L707",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_step_3_extract_entities_and_relationships",
+      "target": "claude_skills_graphify_skill_part_a_structural_extraction_for_code_files",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L170",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_step_3_extract_entities_and_relationships",
+      "target": "claude_skills_graphify_skill_part_b_semantic_extraction_parallel_subagents",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L196",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_step_3_extract_entities_and_relationships",
+      "target": "claude_skills_graphify_skill_part_c_merge_ast_semantic_into_final_extraction",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L359",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_2_detect_files",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L107",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_2_5_video_and_audio_only_if_video_files_detected",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L147",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_3_extract_entities_and_relationships",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L151",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_4_build_graph_cluster_analyze_generate_outputs",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L393",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_4_5_graph_health_check_read_only_integrity_gate",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L456",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_5_label_communities",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L482",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_6_generate_obsidian_vault_opt_in_html",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L531",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_steps_6b_8_wiki_neo4j_falkordb_svg_graphml_mcp_benchmark_only_on_their_flags",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L551",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_9_save_manifest_update_cost_tracker_clean_up_and_report",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L557",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_0_github_repos_and_multi_path_merge_only_if_a_url_or_several_paths",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L61",
+      "weight": 1.0
+    },
+    {
+      "source": "claude_skills_graphify_skill_what_you_must_do_when_invoked",
+      "target": "claude_skills_graphify_skill_step_1_ensure_graphify_is_installed",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".claude/skills/graphify/SKILL.md",
+      "source_location": "L65",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_main_execute",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L18",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_main_main",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L25",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "wobkey_info",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L56",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_main",
+      "target": "cmd_wobkey_main_init",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/main.go",
+      "source_location": "L66",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness",
+      "target": "cmd_wobkey_rgb_brightness_newbrightnesscmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color",
+      "target": "cmd_wobkey_rgb_color_newcolorcmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_disable",
+      "target": "cmd_wobkey_rgb_disable_newdisablecmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect",
+      "target": "cmd_wobkey_rgb_effect_getavailableeffects",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_enable",
+      "target": "cmd_wobkey_rgb_enable_newenablecmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info",
+      "target": "cmd_wobkey_rgb_info_newinfocmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L13",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode",
+      "target": "cmd_wobkey_rgb_mode_newmodecmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L14",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "cmd_wobkey_rgb_rgb_lightingenabled",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L54",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "cmd_wobkey_rgb_rgb_parseuint8",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L58",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb",
+      "target": "cmd_wobkey_rgb_rgb_init",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/rgb.go",
+      "source_location": "L66",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test",
+      "target": "cmd_wobkey_rgb_rgb_test_testdeviceflagisinheritedbyrgbcommands",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L31",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test",
+      "target": "cmd_wobkey_rgb_rgb_test_testlightingenabledrequiresactiveeffectandbrightness",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed",
+      "target": "cmd_wobkey_rgb_speed_newspeedcmd",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device.go",
+      "source_location": "L13",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_device_device_go_device_device",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device.go",
+      "source_location": "L23",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_device_device_loadkeyboards",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device.go",
+      "source_location": "L29",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_device_device_discover",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device.go",
+      "source_location": "L75",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device",
+      "target": "internal_device_device_matchkeyboards",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device.go",
+      "source_location": "L92",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "internal_device_device_test_testloadkeyboards",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L11",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "internal_device_device_test_testloadkeyboardsinvalid",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L54",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "internal_device_device_test_testmatchkeyboardsselectsrawhidinterface",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L77",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test",
+      "target": "internal_device_device_test_testloadkeyboardsemptyfile",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L98",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_discoverall",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L112",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_israwhiddescriptor",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L158",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_parseuevent",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L170",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_splitlines",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L194",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_parsehex",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L211",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "hid_device",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L24",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "hid_devicesinfo",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L32",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_go_hid_deviceinfo",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L37",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid",
+      "target": "internal_hid_hid_openpath",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L45",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "internal_hid_hid_test_testparseuevent",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L111",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "internal_hid_hid_test_testparsehex",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L27",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "internal_hid_hid_test_testsplitlines",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L65",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "internal_hid_hid_test_testreadtimesoutwithoutresponse",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L9",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test",
+      "target": "internal_hid_hid_test_testisrawhiddescriptor",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L90",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "internal_rgb_effects_go_rgb_effect",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "rgb_ledparam",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L114",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "rgb_color",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L127",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "internal_rgb_effects_parsehexcolor",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L134",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "rgb_state",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L155",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects",
+      "target": "internal_rgb_effects_parseeffect",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L66",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test",
+      "target": "internal_rgb_effects_test_testcolortohsv",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L122",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test",
+      "target": "internal_rgb_effects_test_testparseeffect",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L22",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test",
+      "target": "internal_rgb_effects_test_testeffectstring",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L60",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test",
+      "target": "internal_rgb_effects_test_testqmkvalueids",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L7",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test",
+      "target": "internal_rgb_effects_test_testparsehexcolor",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L82",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "via_transport",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L10",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "internal_via_protocol_go_via_protocol",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L17",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "internal_via_protocol_new",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L23",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "via_message",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L44",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol",
+      "target": "via_ledtype",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L53",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testenablelightingusesallimpact80channels",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L120",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testgetvaluereturnsqmkvaluedata",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L144",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testgetvaluerejectsunhandledresponse",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L170",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testsetvalueusesqmkrgblightpayload",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L34",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testsetvalueconsumesqmkresponse",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L59",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testsetcolorusesqmkcolorvalue",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L76",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "via_faketransport",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L8",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_test",
+      "target": "internal_via_protocol_test_testdisablelightingusesallimpact80channels",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L96",
+      "weight": 1.0
+    },
+    {
+      "source": "opencode_opencode",
+      "target": "opencode_opencode_schema",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".opencode/opencode.json",
+      "source_location": "L2",
+      "weight": 1.0
+    },
+    {
+      "source": "opencode_opencode",
+      "target": "opencode_opencode_plugin",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".opencode/opencode.json",
+      "source_location": "L3",
+      "weight": 1.0
+    },
+    {
+      "source": "opencode_plugins_graphify",
+      "target": "opencode_plugins_graphify_graphifyplugin",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "plan",
+      "target": "plan_wobkey_rgb_cli_implementation_plan",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "plan_open_issues",
+      "target": "plan_1_impact_80_effect_mapping",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L18",
+      "weight": 1.0
+    },
+    {
+      "source": "plan_open_issues",
+      "target": "plan_2_cross_platform_hid_backends",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L22",
+      "weight": 1.0
+    },
+    {
+      "source": "plan_open_issues",
+      "target": "plan_3_documentation_and_release_artifacts",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L26",
+      "weight": 1.0
+    },
+    {
+      "source": "plan_wobkey_rgb_cli_implementation_plan",
+      "target": "plan_open_issues",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L16",
+      "weight": 1.0
+    },
+    {
+      "source": "plan_wobkey_rgb_cli_implementation_plan",
+      "target": "plan_status",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L3",
+      "weight": 1.0
+    },
+    {
+      "source": "plan_wobkey_rgb_cli_implementation_plan",
+      "target": "plan_quick_commands_for_next_session",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "PLAN.md",
+      "source_location": "L30",
+      "weight": 1.0
+    },
+    {
+      "source": "readme",
+      "target": "readme_wobkey_rgb_cli",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L1",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_linux_hid_device_permissions",
+      "target": "readme_option_1_quick_per_session",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L46",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_linux_hid_device_permissions",
+      "target": "readme_option_2_permanent_udev_rule",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L57",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_protocol",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L108",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_usage",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L19",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_linux_hid_device_permissions",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L42",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_installation",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L5",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_supported_keyboards",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L74",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_cli_reference",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L83",
+      "weight": 1.0
+    },
+    {
+      "source": "readme_wobkey_rgb_cli",
+      "target": "readme_architecture",
+      "relation": "contains",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "README.md",
+      "source_location": "L97",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_go_device_device",
+      "target": "internal_device_device_go_device_keyboard",
+      "relation": "embeds",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/device/device.go",
+      "source_location": "L24",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_device",
+      "target": "hid_device_close",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L106",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_device",
+      "target": "hid_device_vid",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L54",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_device",
+      "target": "hid_device_pid",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L57",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_device",
+      "target": "hid_device_path",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L60",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_device",
+      "target": "hid_device_sendreport",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L64",
+      "weight": 1.0
+    },
+    {
+      "source": "hid_device",
+      "target": "hid_device_read",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/hid/hid.go",
+      "source_location": "L79",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_go_rgb_effect",
+      "target": "rgb_effect_string",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L36",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_setcolor",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L100",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_getvalue",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L116",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_readresponse",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L139",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_close",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L36",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_setvalue",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L62",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_disablelighting",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L76",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_via_protocol_go_via_protocol",
+      "target": "via_protocol_enablelighting",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L88",
+      "weight": 1.0
+    },
+    {
+      "source": "rgb_color",
+      "target": "rgb_color_hsv",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/rgb/effects.go",
+      "source_location": "L164",
+      "weight": 1.0
+    },
+    {
+      "source": "via_faketransport",
+      "target": "via_faketransport_sendreport",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "via_faketransport",
+      "target": "via_faketransport_read",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L21",
+      "weight": 1.0
+    },
+    {
+      "source": "via_faketransport",
+      "target": "via_faketransport_close",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol_test.go",
+      "source_location": "L32",
+      "weight": 1.0
+    },
+    {
+      "source": "via_transport",
+      "target": "via_transport_sendreport",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L11",
+      "weight": 1.0
+    },
+    {
+      "source": "via_transport",
+      "target": "via_transport_read",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L12",
+      "weight": 1.0
+    },
+    {
+      "source": "via_transport",
+      "target": "via_transport_close",
+      "relation": "method",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": "internal/via/protocol.go",
+      "source_location": "L13",
+      "weight": 1.0
+    },
+    {
+      "source": "opencode_plugins_graphify_rationale_4",
+      "target": "opencode_plugins_graphify",
+      "relation": "rationale_for",
+      "_origin": "ast",
+      "confidence": "EXTRACTED",
+      "confidence_score": 1.0,
+      "source_file": ".opencode/plugins/graphify.js",
+      "source_location": "L4",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness_newbrightnesscmd",
+      "target": "cmd_wobkey_rgb_rgb_parseuint8",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L19",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_brightness_newbrightnesscmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/brightness.go",
+      "source_location": "L25",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_color_newcolorcmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/color.go",
+      "source_location": "L25",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_disable_newdisablecmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/disable.go",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_effect_neweffectcmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/effect.go",
+      "source_location": "L22",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_enable_newenablecmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/enable.go",
+      "source_location": "L15",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info_newinfocmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L18",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_info_newinfocmd",
+      "target": "cmd_wobkey_rgb_rgb_lightingenabled",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/info.go",
+      "source_location": "L58",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode_newmodecmd",
+      "target": "cmd_wobkey_rgb_rgb_parseuint8",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L19",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_mode_newmodecmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/mode.go",
+      "source_location": "L25",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test_testdeviceflagisinheritedbyrgbcommands",
+      "target": "cmd_wobkey_rgb_rgb_init",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L38",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_rgb_test_testlightingenabledrequiresactiveeffectandbrightness",
+      "target": "cmd_wobkey_rgb_rgb_lightingenabled",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/rgb_test.go",
+      "source_location": "L24",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed_newspeedcmd",
+      "target": "cmd_wobkey_rgb_rgb_parseuint8",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L19",
+      "weight": 1.0
+    },
+    {
+      "source": "cmd_wobkey_rgb_speed_newspeedcmd",
+      "target": "cmd_wobkey_rgb_rgb_opendevice",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "cmd/wobkey/rgb/speed.go",
+      "source_location": "L25",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testloadkeyboards",
+      "target": "internal_device_device_loadkeyboards",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L32",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testloadkeyboardsemptyfile",
+      "target": "internal_device_device_loadkeyboards",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L112",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testloadkeyboardsinvalid",
+      "target": "internal_device_device_loadkeyboards",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L71",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_device_device_test_testmatchkeyboardsselectsrawhidinterface",
+      "target": "internal_device_device_matchkeyboards",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/device/device_test.go",
+      "source_location": "L89",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testisrawhiddescriptor",
+      "target": "internal_hid_hid_israwhiddescriptor",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L103",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testparsehex",
+      "target": "internal_hid_hid_parsehex",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L47",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testparseuevent",
+      "target": "internal_hid_hid_parseuevent",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L120",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_hid_hid_test_testsplitlines",
+      "target": "internal_hid_hid_splitlines",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/hid/hid_test.go",
+      "source_location": "L82",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testeffectstring",
+      "target": "internal_rgb_effects_go_rgb_effect",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L69",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testparseeffect",
+      "target": "internal_rgb_effects_parseeffect",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L42",
+      "weight": 1.0
+    },
+    {
+      "source": "internal_rgb_effects_test_testparsehexcolor",
+      "target": "internal_rgb_effects_parsehexcolor",
+      "relation": "calls",
+      "_origin": "ast",
+      "confidence": "INFERRED",
+      "confidence_score": 0.85,
+      "context": "call",
+      "source_file": "internal/rgb/effects_test.go",
+      "source_location": "L104",
+      "weight": 1.0
+    }
+  ],
+  "hyperedges": [],
+  "built_at_commit": "216e2dbe4c0b4533a09a8a82ec5354a099beaa86"
+}

+ 230 - 0
graphify-out/manifest.json

@@ -0,0 +1,230 @@
+{
+  ".claude/settings.json": {
+    "mtime": 1790285586.8965995,
+    "seen": 1790288349.8046486,
+    "ast_hash": "3b541b9935fcf0831355da956f897645",
+    "semantic_hash": "3b541b9935fcf0831355da956f897645"
+  },
+  ".opencode/opencode.json": {
+    "mtime": 1790285662.1466324,
+    "seen": 1790288349.8046505,
+    "ast_hash": "e5f74d14a81702b55bdf53b33ec991d7",
+    "semantic_hash": "e5f74d14a81702b55bdf53b33ec991d7"
+  },
+  ".opencode/plugins/graphify.js": {
+    "mtime": 1790285634.0050278,
+    "seen": 1790288349.8046517,
+    "ast_hash": "3ea725724bc8ebe483c9f13d6aa1124f",
+    "semantic_hash": "3ea725724bc8ebe483c9f13d6aa1124f"
+  },
+  "cmd/wobkey/main.go": {
+    "mtime": 1790286312.6441693,
+    "seen": 1790288349.8046525,
+    "ast_hash": "39a98ca066c7e2f57ed2bb2aa64d3872",
+    "semantic_hash": "39a98ca066c7e2f57ed2bb2aa64d3872"
+  },
+  "cmd/wobkey/rgb/brightness.go": {
+    "mtime": 1790288931.9611642,
+    "seen": 1790289317.709677,
+    "ast_hash": "4ee082de48e4b79209f3f315fd95d0e9",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/color.go": {
+    "mtime": 1790288914.9880402,
+    "seen": 1790289317.709678,
+    "ast_hash": "3188f52925752853e159789c51e65590",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/disable.go": {
+    "mtime": 1790289223.6960397,
+    "seen": 1790289317.7096784,
+    "ast_hash": "93e8d81e01bb8fd78484ffc8640f3c5c",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/effect.go": {
+    "mtime": 1790288951.2403028,
+    "seen": 1790289317.709679,
+    "ast_hash": "27a9939fa944b596786dc61de2eb570a",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/enable.go": {
+    "mtime": 1790289302.5594819,
+    "seen": 1790289317.7096794,
+    "ast_hash": "45e9311bea409d1354f6bfacb3263d67",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/info.go": {
+    "mtime": 1790289267.0142853,
+    "seen": 1790289317.70968,
+    "ast_hash": "21687602d73579d14e8f1d33c2921b20",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/mode.go": {
+    "mtime": 1790288942.9182434,
+    "seen": 1790289317.7096806,
+    "ast_hash": "215b8471971922b6300d15b11e4decbd",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/rgb.go": {
+    "mtime": 1790289263.6842666,
+    "seen": 1790289317.709681,
+    "ast_hash": "bb6d9c5eeb5c60b137968ca220f4be0e",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/rgb_test.go": {
+    "mtime": 1790289257.1982303,
+    "seen": 1790289317.7096817,
+    "ast_hash": "12b2ec74de8523746384a4d522fc7922",
+    "semantic_hash": ""
+  },
+  "cmd/wobkey/rgb/speed.go": {
+    "mtime": 1790288937.3662033,
+    "seen": 1790289317.7096822,
+    "ast_hash": "715af2ff74f1c6ddd3873c82e8651be8",
+    "semantic_hash": ""
+  },
+  "go.mod": {
+    "mtime": 1790284436.9532418,
+    "seen": 1790288349.804667,
+    "ast_hash": "e76d002cc769732fd202e6a64def62a5",
+    "semantic_hash": "e76d002cc769732fd202e6a64def62a5"
+  },
+  "internal/device/device.go": {
+    "mtime": 1790290128.4753065,
+    "seen": 1790290149.8498783,
+    "ast_hash": "1bb2e2fa6811b8b0abafb6ed17c6d420",
+    "semantic_hash": ""
+  },
+  "internal/device/device_test.go": {
+    "mtime": 1790288761.3898182,
+    "seen": 1790289317.7096844,
+    "ast_hash": "33f4fc213035a4a9d6e725f831e40194",
+    "semantic_hash": ""
+  },
+  "internal/hid/hid.go": {
+    "mtime": 1790290112.2172391,
+    "seen": 1790290149.8498797,
+    "ast_hash": "d554e68dd1a143c03bf32db34e855d91",
+    "semantic_hash": ""
+  },
+  "internal/hid/hid_test.go": {
+    "mtime": 1790289990.0587273,
+    "seen": 1790290149.8498802,
+    "ast_hash": "732214d69c8b1cc35e628f8486e3ec7c",
+    "semantic_hash": ""
+  },
+  "internal/rgb/effects.go": {
+    "mtime": 1790290065.0020428,
+    "seen": 1790290149.849881,
+    "ast_hash": "c6e74c01b12f2fdf579ee18ced5c110e",
+    "semantic_hash": ""
+  },
+  "internal/rgb/effects_test.go": {
+    "mtime": 1790290050.5749824,
+    "seen": 1790290149.8498816,
+    "ast_hash": "c858a795e2c6c048163863ae3d966a28",
+    "semantic_hash": ""
+  },
+  "internal/via/protocol.go": {
+    "mtime": 1790289965.4096227,
+    "seen": 1790290149.8498821,
+    "ast_hash": "7a73e4e6e8e2a18d06cd878212743d28",
+    "semantic_hash": ""
+  },
+  "keyboards.json": {
+    "mtime": 1790287714.2654066,
+    "seen": 1790288349.804672,
+    "ast_hash": "ca7f6e2644c991a791601d720d1cabc5",
+    "semantic_hash": "ca7f6e2644c991a791601d720d1cabc5"
+  },
+  ".claude/CLAUDE.md": {
+    "mtime": 1790285586.896331,
+    "seen": 1790288349.8046727,
+    "ast_hash": "9b31786b637be3c13978bec4c2330752",
+    "semantic_hash": "9b31786b637be3c13978bec4c2330752"
+  },
+  ".claude/skills/graphify/SKILL.md": {
+    "mtime": 1790285586.8961809,
+    "seen": 1790288349.8046732,
+    "ast_hash": "1656a8a8e4a05bbe69f32cd15de81e87",
+    "semantic_hash": "1656a8a8e4a05bbe69f32cd15de81e87"
+  },
+  ".claude/skills/graphify/references/add-watch.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.8046741,
+    "ast_hash": "d59d027fe449f06aa03905a01184e779",
+    "semantic_hash": "d59d027fe449f06aa03905a01184e779"
+  },
+  ".claude/skills/graphify/references/exports.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.8046746,
+    "ast_hash": "9da2a2152e60a22f07f05fed5158f287",
+    "semantic_hash": "9da2a2152e60a22f07f05fed5158f287"
+  },
+  ".claude/skills/graphify/references/extraction-spec.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.804675,
+    "ast_hash": "42fef56a01698118f7fd722acdadea34",
+    "semantic_hash": "42fef56a01698118f7fd722acdadea34"
+  },
+  ".claude/skills/graphify/references/github-and-merge.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.8046758,
+    "ast_hash": "cde13df085e4c492aeb7ba298a996d0d",
+    "semantic_hash": "cde13df085e4c492aeb7ba298a996d0d"
+  },
+  ".claude/skills/graphify/references/hooks.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.8046763,
+    "ast_hash": "3f545db6ce646650bb9de588f5512a27",
+    "semantic_hash": "3f545db6ce646650bb9de588f5512a27"
+  },
+  ".claude/skills/graphify/references/query.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.8046768,
+    "ast_hash": "3c46f8ad006874260614ed8657d02307",
+    "semantic_hash": "3c46f8ad006874260614ed8657d02307"
+  },
+  ".claude/skills/graphify/references/transcribe.md": {
+    "mtime": 1790285543.9953458,
+    "seen": 1790288349.8046777,
+    "ast_hash": "67b6a5fa6c0974e18f60db9f8932fbd8",
+    "semantic_hash": "67b6a5fa6c0974e18f60db9f8932fbd8"
+  },
+  ".claude/skills/graphify/references/update.md": {
+    "mtime": 1790285544.0013459,
+    "seen": 1790288349.8046782,
+    "ast_hash": "9378bd03d56baaf78bd738ab3848f142",
+    "semantic_hash": "9378bd03d56baaf78bd738ab3848f142"
+  },
+  "AGENTS.md": {
+    "mtime": 1790290089.1921434,
+    "seen": 1790290149.8498905,
+    "ast_hash": "31147fb72b6d08bf2351c49df6446076",
+    "semantic_hash": ""
+  },
+  "CLAUDE.md": {
+    "mtime": 1790285586.8964708,
+    "seen": 1790288349.8046794,
+    "ast_hash": "82efb97a359f5c7290bf2513d14686be",
+    "semantic_hash": "82efb97a359f5c7290bf2513d14686be"
+  },
+  "PLAN.md": {
+    "mtime": 1790290107.5442197,
+    "seen": 1790290149.849892,
+    "ast_hash": "ee0fcd921bf4a65c17d8f72d5e2eb7bd",
+    "semantic_hash": ""
+  },
+  "README.md": {
+    "mtime": 1790290080.1261058,
+    "seen": 1790290149.8498924,
+    "ast_hash": "669d70c4b6be539f745beacd0e053877",
+    "semantic_hash": ""
+  },
+  "internal/via/protocol_test.go": {
+    "mtime": 1790289947.3375454,
+    "seen": 1790290149.8498826,
+    "ast_hash": "3ae5b45b25bf80dfde46fe3c4c916436",
+    "semantic_hash": ""
+  }
+}

+ 42 - 0
internal/rgb/effects.go

@@ -110,6 +110,48 @@ func ParseEffect(name string) (Effect, error) {
 	}
 }
 
+func Impact80EffectName(value uint8) string {
+	switch value {
+	case 0:
+		return "none"
+	case 1:
+		return "wave"
+	case 2:
+		return "fixed_wave"
+	case 3:
+		return "spectrum"
+	case 4:
+		return "breathing"
+	case 5:
+		return "light"
+	case 6:
+		return "shutdown"
+	default:
+		return "unknown"
+	}
+}
+
+func ParseImpact80Effect(name string) (uint8, error) {
+	switch name {
+	case "none", "off":
+		return 0, nil
+	case "wave", "rainbow_wave":
+		return 1, nil
+	case "fixed_wave":
+		return 2, nil
+	case "spectrum", "rainbow":
+		return 3, nil
+	case "breathing", "breathe":
+		return 4, nil
+	case "light", "static", "solid":
+		return 5, nil
+	case "shutdown":
+		return 6, nil
+	default:
+		return 0, fmt.Errorf("unknown Impact 80 effect: %s", name)
+	}
+}
+
 // LEDParam defines QMK rgblight parameter indices.
 type LEDParam uint8
 

+ 50 - 0
internal/rgb/effects_test.go

@@ -4,6 +4,56 @@ import (
 	"testing"
 )
 
+func TestImpact80EffectName(t *testing.T) {
+	cases := []struct {
+		value uint8
+		want  string
+	}{
+		{0, "none"},
+		{1, "wave"},
+		{2, "fixed_wave"},
+		{3, "spectrum"},
+		{4, "breathing"},
+		{5, "light"},
+		{6, "shutdown"},
+		{7, "unknown"},
+	}
+
+	for _, tc := range cases {
+		if got := Impact80EffectName(tc.value); got != tc.want {
+			t.Errorf("Impact80EffectName(%d) = %q, want %q", tc.value, got, tc.want)
+		}
+	}
+}
+
+func TestParseImpact80Effect(t *testing.T) {
+	cases := []struct {
+		input string
+		want  uint8
+	}{
+		{"none", 0},
+		{"wave", 1},
+		{"fixed_wave", 2},
+		{"spectrum", 3},
+		{"breathing", 4},
+		{"light", 5},
+		{"shutdown", 6},
+		{"rainbow", 3},
+		{"static", 5},
+	}
+
+	for _, tc := range cases {
+		got, err := ParseImpact80Effect(tc.input)
+		if err != nil {
+			t.Errorf("ParseImpact80Effect(%q) unexpected error: %v", tc.input, err)
+			continue
+		}
+		if got != tc.want {
+			t.Errorf("ParseImpact80Effect(%q) = %d, want %d", tc.input, got, tc.want)
+		}
+	}
+}
+
 func TestQMKValueIDs(t *testing.T) {
 	if Brightness != 1 {
 		t.Errorf("Brightness = %d, want 1", Brightness)

+ 11 - 3
internal/via/protocol.go

@@ -86,11 +86,19 @@ func (p *Protocol) DisableLighting() error {
 }
 
 func (p *Protocol) EnableLighting() error {
-	for _, channel := range []LEDType{RGBLight, RGBMatrix, SideLight} {
-		if err := p.SetValue(channel, 0x02, 0x01); err != nil {
+	channels := []struct {
+		channel LEDType
+		effect  uint8
+	}{
+		{RGBLight, 0x04},
+		{RGBMatrix, 0x05},
+		{SideLight, 0x04},
+	}
+	for _, channel := range channels {
+		if err := p.SetValue(channel.channel, 0x02, channel.effect); err != nil {
 			return err
 		}
-		if err := p.SetValue(channel, 0x01, 160); err != nil {
+		if err := p.SetValue(channel.channel, 0x01, 160); err != nil {
 			return err
 		}
 	}

+ 3 - 2
internal/via/protocol_test.go

@@ -129,11 +129,12 @@ func TestEnableLightingUsesAllImpact80Channels(t *testing.T) {
 		t.Fatalf("SendReport() calls = %d, want 6", len(transport.reports))
 	}
 	wantChannels := []byte{0x02, 0x03, 0x04}
+	wantEffects := []byte{0x04, 0x05, 0x04}
 	for i, channel := range wantChannels {
 		effect := transport.reports[i*2]
 		brightness := transport.reports[i*2+1]
-		if effect[1] != channel || effect[2] != 0x02 || effect[3] != 0x01 {
-			t.Errorf("effect report %d = %v, want channel 0x%02x effect 1", i, effect, channel)
+		if effect[1] != channel || effect[2] != 0x02 || effect[3] != wantEffects[i] {
+			t.Errorf("effect report %d = %v, want channel 0x%02x effect %d", i, effect, channel, wantEffects[i])
 		}
 		if brightness[1] != channel || brightness[2] != 0x01 || brightness[3] != 160 {
 			t.Errorf("brightness report %d = %v, want channel 0x%02x brightness 160", i, brightness, channel)

Vissa filer visades inte eftersom för många filer har ändrats