codebeacon 0.5.0__tar.gz → 0.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. codebeacon-0.6.1/.cursorrules +74 -0
  2. codebeacon-0.6.1/AGENTS.md +74 -0
  3. codebeacon-0.6.1/CLAUDE.md +79 -0
  4. codebeacon-0.5.0/README.md → codebeacon-0.6.1/PKG-INFO +139 -2
  5. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.de.md +46 -2
  6. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.es.md +46 -2
  7. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.fr.md +46 -2
  8. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.ja.md +46 -2
  9. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.ko.md +46 -2
  10. codebeacon-0.5.0/PKG-INFO → codebeacon-0.6.1/README.md +46 -45
  11. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.pt-BR.md +46 -2
  12. {codebeacon-0.5.0 → codebeacon-0.6.1}/README.zh-CN.md +46 -2
  13. codebeacon-0.6.1/codebeacon/__init__.py +1 -0
  14. codebeacon-0.6.1/codebeacon/affected.py +199 -0
  15. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/cache.py +57 -6
  16. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/cli.py +210 -486
  17. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/common/safety.py +5 -0
  18. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/contextmap/generator.py +24 -1
  19. codebeacon-0.6.1/codebeacon/diagnostics.py +131 -0
  20. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/discover/detector.py +5 -5
  21. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/discover/ignore.py +88 -22
  22. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/discover/scanner.py +45 -15
  23. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/hooks.py +48 -4
  24. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/mcp.py +97 -9
  25. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/obsidian.py +22 -10
  26. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/base.py +7 -1
  27. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/dependencies.py +97 -8
  28. codebeacon-0.6.1/codebeacon/extract/dotnet.py +167 -0
  29. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/actix.scm +16 -6
  30. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/angular.scm +40 -2
  31. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/aspnet.scm +18 -11
  32. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/ktor.scm +11 -6
  33. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/laravel.scm +6 -6
  34. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/vapor.scm +13 -13
  35. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/routes.py +26 -9
  36. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/services.py +69 -36
  37. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/graph/build.py +147 -14
  38. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/graph/cluster.py +8 -1
  39. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/graph/write.py +61 -2
  40. codebeacon-0.6.1/codebeacon/pipeline.py +580 -0
  41. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/semantic_pipeline.py +142 -6
  42. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/skill/SKILL.md +13 -0
  43. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/wave.py +56 -12
  44. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/wiki/generator.py +106 -0
  45. codebeacon-0.6.1/pyproject.toml +120 -0
  46. {codebeacon-0.5.0 → codebeacon-0.6.1}/skill/install.py +31 -9
  47. codebeacon-0.6.1/tests/fixtures/integration_workspace/api-python/pyproject.toml +4 -0
  48. codebeacon-0.6.1/tests/fixtures/integration_workspace/api-python/src/__init__.py +0 -0
  49. codebeacon-0.6.1/tests/fixtures/integration_workspace/api-python/src/main.py +17 -0
  50. codebeacon-0.6.1/tests/fixtures/integration_workspace/api-python/src/services.py +11 -0
  51. codebeacon-0.6.1/tests/fixtures/integration_workspace/web/package.json +7 -0
  52. codebeacon-0.6.1/tests/fixtures/integration_workspace/web/src/UserPage.tsx +14 -0
  53. codebeacon-0.6.1/tests/integration/__init__.py +0 -0
  54. codebeacon-0.6.1/tests/integration/test_full_pipeline.py +230 -0
  55. codebeacon-0.6.1/tests/test_affected.py +113 -0
  56. codebeacon-0.6.1/tests/test_affected_wiki.py +182 -0
  57. codebeacon-0.6.1/tests/test_audit_bugfixes.py +338 -0
  58. codebeacon-0.6.1/tests/test_cli_dispatch.py +76 -0
  59. codebeacon-0.6.1/tests/test_contextmap_paths.py +33 -0
  60. codebeacon-0.6.1/tests/test_dependencies.py +93 -0
  61. codebeacon-0.6.1/tests/test_diagnostics.py +169 -0
  62. codebeacon-0.6.1/tests/test_discover.py +293 -0
  63. codebeacon-0.6.1/tests/test_dotnet.py +164 -0
  64. codebeacon-0.6.1/tests/test_graph.py +334 -0
  65. codebeacon-0.6.1/tests/test_known_bugs.py +340 -0
  66. codebeacon-0.6.1/tests/test_mcp_and_semantic.py +134 -0
  67. codebeacon-0.6.1/tests/test_optional_grammars.py +132 -0
  68. codebeacon-0.6.1/tests/test_pipeline_module.py +125 -0
  69. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_safety_and_writes.py +85 -0
  70. codebeacon-0.6.1/tests/test_semantic_stats.py +210 -0
  71. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_wiki.py +55 -0
  72. codebeacon-0.5.0/.cursorrules +0 -61
  73. codebeacon-0.5.0/AGENTS.md +0 -61
  74. codebeacon-0.5.0/CLAUDE.md +0 -71
  75. codebeacon-0.5.0/codebeacon/__init__.py +0 -1
  76. codebeacon-0.5.0/pyproject.toml +0 -63
  77. codebeacon-0.5.0/tests/test_cli_dispatch.py +0 -43
  78. codebeacon-0.5.0/tests/test_discover.py +0 -147
  79. codebeacon-0.5.0/tests/test_graph.py +0 -167
  80. {codebeacon-0.5.0 → codebeacon-0.6.1}/.github/CODEOWNERS +0 -0
  81. {codebeacon-0.5.0 → codebeacon-0.6.1}/.github/dependabot.yml +0 -0
  82. {codebeacon-0.5.0 → codebeacon-0.6.1}/.github/workflows/ci.yml +0 -0
  83. {codebeacon-0.5.0 → codebeacon-0.6.1}/.github/workflows/release.yml +0 -0
  84. {codebeacon-0.5.0 → codebeacon-0.6.1}/.gitignore +0 -0
  85. {codebeacon-0.5.0 → codebeacon-0.6.1}/LICENSE +0 -0
  86. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/__main__.py +0 -0
  87. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/common/__init__.py +0 -0
  88. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/common/filters.py +0 -0
  89. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/common/symbols.py +0 -0
  90. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/common/types.py +0 -0
  91. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/config.py +0 -0
  92. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/contextmap/__init__.py +0 -0
  93. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/discover/__init__.py +0 -0
  94. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/__init__.py +0 -0
  95. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/callflow_html.py +0 -0
  96. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/merge.py +0 -0
  97. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/export/tree_html.py +0 -0
  98. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/__init__.py +0 -0
  99. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/components.py +0 -0
  100. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/entities.py +0 -0
  101. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/README.md +0 -0
  102. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/django.scm +0 -0
  103. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/express.scm +0 -0
  104. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/fastapi.scm +0 -0
  105. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/flask.scm +0 -0
  106. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/gin.scm +0 -0
  107. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/nestjs.scm +0 -0
  108. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/rails.scm +0 -0
  109. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/react.scm +0 -0
  110. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/spring_boot.scm +0 -0
  111. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/svelte.scm +0 -0
  112. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/tauri.scm +0 -0
  113. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/queries/vue.scm +0 -0
  114. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/extract/semantic.py +0 -0
  115. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/graph/__init__.py +0 -0
  116. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/graph/analyze.py +0 -0
  117. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/graph/enrich.py +0 -0
  118. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/knowledge/__init__.py +0 -0
  119. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/knowledge/generator.py +0 -0
  120. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/plugins/__init__.py +0 -0
  121. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/plugins/githooks.py +0 -0
  122. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/plugins/skills.py +0 -0
  123. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/wiki/__init__.py +0 -0
  124. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/wiki/index.py +0 -0
  125. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon/wiki/templates.py +0 -0
  126. {codebeacon-0.5.0 → codebeacon-0.6.1}/codebeacon.yaml.example +0 -0
  127. {codebeacon-0.5.0 → codebeacon-0.6.1}/docs/TRANSLATION_STATUS.md +0 -0
  128. {codebeacon-0.5.0 → codebeacon-0.6.1}/public-plan.md +0 -0
  129. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/__init__.py +0 -0
  130. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/conftest.py +0 -0
  131. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/actix/main.rs +0 -0
  132. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/angular/app.component.ts +0 -0
  133. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/aspnet/UserController.cs +0 -0
  134. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/django/views.py +0 -0
  135. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/express/userRouter.js +0 -0
  136. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/fastapi/main.py +0 -0
  137. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/flask/app.py +0 -0
  138. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/gin/main.go +0 -0
  139. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/ktor/UserRoutes.kt +0 -0
  140. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/laravel/UserController.php +0 -0
  141. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/nestjs/user.controller.ts +0 -0
  142. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/rails/users_controller.rb +0 -0
  143. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/react/UserPage.tsx +0 -0
  144. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/spring_boot/UserController.java +0 -0
  145. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/sveltekit/+page.svelte +0 -0
  146. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/vapor/routes.swift +0 -0
  147. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/fixtures/vue/UserList.vue +0 -0
  148. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_entities.py +0 -0
  149. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_filters.py +0 -0
  150. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_knowledge.py +0 -0
  151. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_plugins.py +0 -0
  152. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_resolve.py +0 -0
  153. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_routes.py +0 -0
  154. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_scanner_sensitive.py +0 -0
  155. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_semantic.py +0 -0
  156. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_semantic_hardening.py +0 -0
  157. {codebeacon-0.5.0 → codebeacon-0.6.1}/tests/test_services.py +0 -0
@@ -0,0 +1,74 @@
1
+ <!-- codebeacon:start -->
2
+ # Project Context
3
+
4
+ ## Lookup strategy
5
+
6
+ > A pre-built index lives in `.codebeacon/`. Use the 3-step lookup below
7
+ > before reaching for Glob or Grep.
8
+
9
+ > **Repo type:** `single` — Single-project repo.
10
+
11
+ ### Step 1 — codebeacon wiki
12
+ Routes, controllers, services, entities.
13
+ ```
14
+ .codebeacon/wiki/index.md ← global index
15
+ .codebeacon/wiki/{project}/controllers/{Name}.md ← controller logic
16
+ .codebeacon/wiki/{project}/services/{Name}.md ← service methods
17
+ .codebeacon/wiki/{project}/entities/{Name}.md ← data models
18
+ .codebeacon/wiki/routes.md ← all API routes across projects
19
+ ```
20
+
21
+ ### Step 2 — obsidian notes
22
+ Class-level detail (methods, fields, incoming/outgoing edges) the wiki omits.
23
+ Look up by class name — replace `{project}` with the relevant folder:
24
+ ```
25
+ .codebeacon/obsidian/{project}/{ClassName}.md
26
+ ```
27
+
28
+ | Project | Notes | Example |
29
+ | --- | --- | --- |
30
+ | codebeacon | 398 services, 3 entities | `affected_from_paths.py.md` |
31
+
32
+ ### Step 3 — source file
33
+ Open the paths surfaced by Steps 1–2.
34
+
35
+ ---
36
+
37
+ ## Projects
38
+
39
+ | Project | Framework | Routes | Services | Entities | Components |
40
+ | --- | --- | --- | --- | --- | --- |
41
+ | codebeacon | python | 5 | 398 | 3 | 0 |
42
+
43
+ ---
44
+
45
+ ## Common Commands
46
+
47
+ ### codebeacon (python)
48
+ ```bash
49
+ # see project README # build
50
+ # see project README # run
51
+ # see project README # all tests
52
+ ```
53
+
54
+ ---
55
+
56
+ ## Architecture
57
+
58
+ **codebeacon**: **python** · python
59
+ Routes: 5 | Services: 398 | Entities: 3 | Components: 0
60
+
61
+ ## High-Impact Files
62
+
63
+ Changes here affect many other files:
64
+
65
+ - `codebeacon/semantic_pipeline.py` (imported by 56 files)
66
+ - `codebeacon/pipeline.py` (imported by 12 files)
67
+ - `tests/test_graph.py` (imported by 6 files)
68
+ - `tests/integration/test_full_pipeline.py` (imported by 3 files)
69
+ - `tests/test_known_bugs.py` (imported by 2 files)
70
+
71
+ ---
72
+
73
+ _Generated by [codebeacon](https://github.com/codebeacon/codebeacon) · 2026-05-31_
74
+ <!-- codebeacon:end -->
@@ -0,0 +1,74 @@
1
+ <!-- codebeacon:start -->
2
+ # AGENTS.md
3
+
4
+ ## Lookup strategy
5
+
6
+ > A pre-built index lives in `.codebeacon/`. Follow the 3-step lookup below
7
+ > so parallel agents converge on the same answer.
8
+
9
+ > **Repo type:** `single` — Single-project repo.
10
+
11
+ ### Step 1 — codebeacon wiki
12
+ Routes, controllers, services, entities.
13
+ ```
14
+ .codebeacon/wiki/index.md ← global index
15
+ .codebeacon/wiki/{project}/controllers/{Name}.md ← controller logic
16
+ .codebeacon/wiki/{project}/services/{Name}.md ← service methods
17
+ .codebeacon/wiki/{project}/entities/{Name}.md ← data models
18
+ .codebeacon/wiki/routes.md ← all API routes across projects
19
+ ```
20
+
21
+ ### Step 2 — obsidian notes
22
+ Class-level detail (methods, fields, incoming/outgoing edges) the wiki omits.
23
+ Look up by class name — replace `{project}` with the relevant folder:
24
+ ```
25
+ .codebeacon/obsidian/{project}/{ClassName}.md
26
+ ```
27
+
28
+ | Project | Notes | Example |
29
+ | --- | --- | --- |
30
+ | codebeacon | 398 services, 3 entities | `affected_from_paths.py.md` |
31
+
32
+ ### Step 3 — source file
33
+ Open the paths surfaced by Steps 1–2.
34
+
35
+ ---
36
+
37
+ ## Projects
38
+
39
+ | Project | Framework | Routes | Services | Entities | Components |
40
+ | --- | --- | --- | --- | --- | --- |
41
+ | codebeacon | python | 5 | 398 | 3 | 0 |
42
+
43
+ ---
44
+
45
+ ## Common Commands
46
+
47
+ ### codebeacon (python)
48
+ ```bash
49
+ # see project README # build
50
+ # see project README # run
51
+ # see project README # all tests
52
+ ```
53
+
54
+ ---
55
+
56
+ ## Architecture
57
+
58
+ **codebeacon**: **python** · python
59
+ Routes: 5 | Services: 398 | Entities: 3 | Components: 0
60
+
61
+ ## High-Impact Files
62
+
63
+ Changes here affect many other files:
64
+
65
+ - `codebeacon/semantic_pipeline.py` (imported by 56 files)
66
+ - `codebeacon/pipeline.py` (imported by 12 files)
67
+ - `tests/test_graph.py` (imported by 6 files)
68
+ - `tests/integration/test_full_pipeline.py` (imported by 3 files)
69
+ - `tests/test_known_bugs.py` (imported by 2 files)
70
+
71
+ ---
72
+
73
+ _Generated by [codebeacon](https://github.com/codebeacon/codebeacon) · 2026-05-31_
74
+ <!-- codebeacon:end -->
@@ -0,0 +1,79 @@
1
+ <!-- codebeacon:start -->
2
+ # CLAUDE.md
3
+
4
+ ## Lookup strategy
5
+
6
+ > This repo ships a pre-built index in `.codebeacon/`. Check it first —
7
+ > most "where is X" questions resolve in one read without a full-repo search.
8
+
9
+ > **Repo type:** `single` — Single-project repo.
10
+
11
+ ### Step 1 — codebeacon wiki
12
+ Routes, controllers, services, entities.
13
+ ```
14
+ .codebeacon/wiki/index.md ← global index
15
+ .codebeacon/wiki/{project}/controllers/{Name}.md ← controller logic
16
+ .codebeacon/wiki/{project}/services/{Name}.md ← service methods
17
+ .codebeacon/wiki/{project}/entities/{Name}.md ← data models
18
+ .codebeacon/wiki/routes.md ← all API routes across projects
19
+ ```
20
+
21
+ ### Step 2 — obsidian notes
22
+ Class-level detail (methods, fields, incoming/outgoing edges) the wiki omits.
23
+ Look up by class name — replace `{project}` with the relevant folder:
24
+ ```
25
+ .codebeacon/obsidian/{project}/{ClassName}.md
26
+ ```
27
+
28
+ | Project | Notes | Example |
29
+ | --- | --- | --- |
30
+ | codebeacon | 398 services, 3 entities | `affected_from_paths.py.md` |
31
+
32
+ ### Step 3 — source file
33
+ Open the paths surfaced by Steps 1–2.
34
+
35
+ ### Fall back to direct search
36
+ Reach for Glob, Grep, or the Explore agent when the index does not cover
37
+ what you need — new files, deep implementation details, or cross-cutting
38
+ searches that span projects.
39
+
40
+ ---
41
+
42
+ ## Projects
43
+
44
+ | Project | Framework | Routes | Services | Entities | Components |
45
+ | --- | --- | --- | --- | --- | --- |
46
+ | codebeacon | python | 5 | 398 | 3 | 0 |
47
+
48
+ ---
49
+
50
+ ## Common Commands
51
+
52
+ ### codebeacon (python)
53
+ ```bash
54
+ # see project README # build
55
+ # see project README # run
56
+ # see project README # all tests
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Architecture
62
+
63
+ **codebeacon**: **python** · python
64
+ Routes: 5 | Services: 398 | Entities: 3 | Components: 0
65
+
66
+ ## High-Impact Files
67
+
68
+ Changes here affect many other files:
69
+
70
+ - `codebeacon/semantic_pipeline.py` (imported by 56 files)
71
+ - `codebeacon/pipeline.py` (imported by 12 files)
72
+ - `tests/test_graph.py` (imported by 6 files)
73
+ - `tests/integration/test_full_pipeline.py` (imported by 3 files)
74
+ - `tests/test_known_bugs.py` (imported by 2 files)
75
+
76
+ ---
77
+
78
+ _Generated by [codebeacon](https://github.com/codebeacon/codebeacon) · 2026-05-31_
79
+ <!-- codebeacon:end -->
@@ -1,3 +1,96 @@
1
+ Metadata-Version: 2.4
2
+ Name: codebeacon
3
+ Version: 0.6.1
4
+ Summary: Source code AST analysis tool for AI context generation — unified multi-framework knowledge graph
5
+ Project-URL: Homepage, https://github.com/codebeacon/codebeacon
6
+ Project-URL: Repository, https://github.com/codebeacon/codebeacon
7
+ Project-URL: Issues, https://github.com/codebeacon/codebeacon/issues
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: ai-context,ast,claude,codebase,knowledge-graph,mcp
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Software Development :: Build Tools
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: networkx>=3.0
22
+ Requires-Dist: pyyaml>=6.0
23
+ Requires-Dist: tree-sitter-javascript>=0.23
24
+ Requires-Dist: tree-sitter-python>=0.23
25
+ Requires-Dist: tree-sitter-typescript>=0.23
26
+ Requires-Dist: tree-sitter>=0.23
27
+ Provides-Extra: backend
28
+ Requires-Dist: tree-sitter-c-sharp>=0.23; extra == 'backend'
29
+ Requires-Dist: tree-sitter-go>=0.23; extra == 'backend'
30
+ Requires-Dist: tree-sitter-java>=0.23; extra == 'backend'
31
+ Requires-Dist: tree-sitter-kotlin>=0.23; extra == 'backend'
32
+ Requires-Dist: tree-sitter-php>=0.23; extra == 'backend'
33
+ Requires-Dist: tree-sitter-ruby>=0.23; extra == 'backend'
34
+ Requires-Dist: tree-sitter-rust>=0.23; extra == 'backend'
35
+ Provides-Extra: cluster
36
+ Requires-Dist: graspologic>=1.0; extra == 'cluster'
37
+ Provides-Extra: csharp
38
+ Requires-Dist: tree-sitter-c-sharp>=0.23; extra == 'csharp'
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest-cov>=4.0; extra == 'dev'
41
+ Requires-Dist: pytest>=7.0; extra == 'dev'
42
+ Requires-Dist: tree-sitter-c-sharp>=0.23; extra == 'dev'
43
+ Requires-Dist: tree-sitter-go>=0.23; extra == 'dev'
44
+ Requires-Dist: tree-sitter-html>=0.23; extra == 'dev'
45
+ Requires-Dist: tree-sitter-java>=0.23; extra == 'dev'
46
+ Requires-Dist: tree-sitter-kotlin>=0.23; extra == 'dev'
47
+ Requires-Dist: tree-sitter-php>=0.23; extra == 'dev'
48
+ Requires-Dist: tree-sitter-ruby>=0.23; extra == 'dev'
49
+ Requires-Dist: tree-sitter-rust>=0.23; extra == 'dev'
50
+ Requires-Dist: tree-sitter-svelte>=0.23; extra == 'dev'
51
+ Requires-Dist: tree-sitter-swift>=0.0.1; extra == 'dev'
52
+ Provides-Extra: dotnet
53
+ Requires-Dist: tree-sitter-c-sharp>=0.23; extra == 'dotnet'
54
+ Provides-Extra: full
55
+ Requires-Dist: tree-sitter-c-sharp>=0.23; extra == 'full'
56
+ Requires-Dist: tree-sitter-go>=0.23; extra == 'full'
57
+ Requires-Dist: tree-sitter-html>=0.23; extra == 'full'
58
+ Requires-Dist: tree-sitter-java>=0.23; extra == 'full'
59
+ Requires-Dist: tree-sitter-kotlin>=0.23; extra == 'full'
60
+ Requires-Dist: tree-sitter-php>=0.23; extra == 'full'
61
+ Requires-Dist: tree-sitter-ruby>=0.23; extra == 'full'
62
+ Requires-Dist: tree-sitter-rust>=0.23; extra == 'full'
63
+ Requires-Dist: tree-sitter-svelte>=0.23; extra == 'full'
64
+ Requires-Dist: tree-sitter-swift>=0.0.1; extra == 'full'
65
+ Provides-Extra: go
66
+ Requires-Dist: tree-sitter-go>=0.23; extra == 'go'
67
+ Provides-Extra: html
68
+ Requires-Dist: tree-sitter-html>=0.23; extra == 'html'
69
+ Provides-Extra: java
70
+ Requires-Dist: tree-sitter-java>=0.23; extra == 'java'
71
+ Provides-Extra: jvm
72
+ Requires-Dist: tree-sitter-java>=0.23; extra == 'jvm'
73
+ Requires-Dist: tree-sitter-kotlin>=0.23; extra == 'jvm'
74
+ Provides-Extra: kotlin
75
+ Requires-Dist: tree-sitter-kotlin>=0.23; extra == 'kotlin'
76
+ Provides-Extra: mobile
77
+ Requires-Dist: tree-sitter-kotlin>=0.23; extra == 'mobile'
78
+ Requires-Dist: tree-sitter-swift>=0.0.1; extra == 'mobile'
79
+ Provides-Extra: php
80
+ Requires-Dist: tree-sitter-php>=0.23; extra == 'php'
81
+ Provides-Extra: ruby
82
+ Requires-Dist: tree-sitter-ruby>=0.23; extra == 'ruby'
83
+ Provides-Extra: rust
84
+ Requires-Dist: tree-sitter-rust>=0.23; extra == 'rust'
85
+ Provides-Extra: svelte
86
+ Requires-Dist: tree-sitter-svelte>=0.23; extra == 'svelte'
87
+ Provides-Extra: swift
88
+ Requires-Dist: tree-sitter-swift>=0.0.1; extra == 'swift'
89
+ Provides-Extra: web
90
+ Requires-Dist: tree-sitter-html>=0.23; extra == 'web'
91
+ Requires-Dist: tree-sitter-svelte>=0.23; extra == 'web'
92
+ Description-Content-Type: text/markdown
93
+
1
94
  <p align="center">
2
95
  <a href="https://github.com/Wandererer/codebeacon/blob/main/README.md"><img src="https://img.shields.io/badge/lang-English-blue" alt="English"></a>
3
96
  <a href="https://github.com/Wandererer/codebeacon/blob/main/README.ko.md"><img src="https://img.shields.io/badge/lang-한국어-red" alt="Korean"></a>
@@ -25,6 +118,39 @@
25
118
 
26
119
  ---
27
120
 
121
+ ## What's new in 0.6.1
122
+
123
+ Patch release — extraction correctness and reproducible output.
124
+
125
+ - **Six framework extractors restored** — the `laravel`, `angular`, `aspnet`, `actix`, `ktor`, and `vapor` tree-sitter queries had drifted out of sync with current grammar versions and silently extracted **nothing**: the query failed to compile and the error was swallowed as a warning. All six now compile and extract against the shipped grammars (Laravel `scope:`/`name:` fields, Angular `export class` decorators, ASP.NET `invocation_expression` fields, Actix sibling-anchored attributes, Kotlin 1.x node renames, Swift 0.0.1 node set), each with a regression test so they can't silently break again.
126
+ - **Reproducible `beacon.json`** — node `source_file` paths are rewritten relative to each project root before serialization, so scanning the same commit on two machines produces a byte-identical graph instead of churning absolute paths in diffs.
127
+ - **`affected` no longer over-reports** — changed-file seed matching is path-segment aligned, so `src/user.py` no longer drags in unrelated nodes such as `foosrc/user.py`.
128
+ - **`semantic-apply` crash fix** — a `confidence_score: null` in an archived/migrated JSONL edge no longer aborts the run with a `TypeError`; it coerces to the safe default like the rest of the pipeline.
129
+ - **NetworkX 3.6 forward-compat** — `beacon.json` is written with an explicit `edges="links"` key so an upstream default change can't silently alter the on-disk format; the MCP server now loads through the same compatibility shim.
130
+ - **Obsidian vault hygiene** — stale-note cleanup sweeps the whole vault (root + nested), and the cross-language import filter keys off the note's real source language instead of a filename suffix that never matched.
131
+ - **gitignore semantics** — anchored patterns like `build/*.js` no longer let `*` cross `/`, so nested files are not wrongly ignored.
132
+ - **Next.js App Router** — JS-based `page.js` / `page.jsx` routes are now discovered (previously only `.ts` / `.tsx`).
133
+ - **DI attribution fixes** — FastAPI `Depends()` and Angular constructor injection are attributed to the enclosing function/class by byte range instead of the first/last one in the file; Razor `@using` no longer emits duplicate edges.
134
+
135
+ ---
136
+
137
+ ## What's new in 0.6.0
138
+
139
+ - **`codebeacon affected`** — given a list of changed files (or a `--base <ref>` git diff), prints every graph node downstream of the change. Built for CI risk-scoring and PR review.
140
+ - **`.NET` project files** — `.sln`, `.csproj`, `.fsproj`, `.vbproj`, `.razor`, `.cshtml` are now parsed: `<ProjectReference>` / `<PackageReference>` become graph edges, Razor `@inherits` / `@inject` / `@using` link Blazor pages to their backing types.
141
+ - **JS/TS barrel re-exports** — `export { X } from './mod'` and `export * from './mod'` now produce explicit `re_exports` edges so Next.js / monorepo barrels stop showing zero imports.
142
+ - **`--exclude PATTERN` flag** for `scan` / `sync`, plus automatic fallback to `.gitignore` when `.codebeaconignore` is absent.
143
+ - **`codebeacon install --project [PATH]`** — install the `/codebeacon` skill into `<PATH>/.claude/` instead of `~/.claude/`, so teams can pin a SKILL.md version per repo.
144
+ - **Wiki self-heals** — `--update` runs now prune `wiki/<project>/{controllers,services,entities,components}/*.md` files whose graph node no longer exists.
145
+ - **Shrink-guard relaxed for explicit deletions** — `--update` mode no longer refuses to write a smaller `beacon.json` when the cache already accounted for deleted files; the guard still fires on silent corruption.
146
+ - **Cross-file declaration merge** — Swift `extension Foo`, C# partial classes, Ruby reopened classes union their `fields` / `methods` into one canonical node instead of the last writer winning.
147
+ - **Hardened query** — `BeaconIndex` uses `casefold()` so German `ß`, Turkish `i/İ`, Greek `σ/ς`, and CJK labels round-trip correctly.
148
+ - **Richer semantic context** — each task chunk now ships graph callers + callees as `neighbors` so the LLM stays grounded in real node labels; `SKILL.md` adds **Step 0 — Constrained query expansion** so `/codebeacon query` flows can't invent phantom tokens.
149
+ - **`semantic-apply` zero-yield guard** — if every chunk archived 0 edges, the CLI exits 1 so CI catches silent LLM failures.
150
+ - **ArkTS (`.ets`) and worktree-safety** — `.ets` is collected; nested `worktrees/` dirs are skipped to stop double-counting linked worktrees.
151
+
152
+ ---
153
+
28
154
  ## Why codebeacon?
29
155
 
30
156
  Every time you open a new AI coding session, your assistant starts blind. It doesn't know your routes, your service layer, your entity model, or how your microservices call each other. You spend the first chunk of every session just getting the AI back up to speed — pasting files, explaining structure, re-establishing context.
@@ -92,8 +218,9 @@ codebeacon sync # subsequent runs via config
92
218
  | Ruby | Rails |
93
219
  | PHP | Laravel |
94
220
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
95
- | C# | ASP.NET Core |
221
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` parsed for `ProjectReference` + `PackageReference` |
96
222
  | Swift | Vapor |
223
+ | ArkTS | `.ets` (HarmonyOS) collected — extractors framework-agnostic |
97
224
 
98
225
  ---
99
226
 
@@ -313,12 +440,21 @@ codebeacon scan . --obsidian-dir <path> # write Obsidian vault to custom locat
313
440
  codebeacon scan . --semantic # enable structured-comment semantic extraction (Javadoc/JSDoc/docstring refs)
314
441
  codebeacon scan . --list-only # detect frameworks only, don't extract
315
442
  codebeacon scan /workspace --deep-dive # per-project + combined workspace outputs
443
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
444
+ # repeatable gitignore-style patterns merged with
445
+ # .codebeaconignore / .gitignore
316
446
 
317
447
  # Config-driven mode
318
448
  codebeacon init [path] # auto-generate codebeacon.yaml
319
449
  codebeacon sync # run from codebeacon.yaml (auto-appends new workspace projects)
320
450
  codebeacon sync --config <file> # use a specific config file
321
451
  codebeacon sync --no-rediscover # don't auto-append newly added projects (hand-curated yaml mode)
452
+ codebeacon sync --exclude PATTERN # same flag, same semantics
453
+
454
+ # PR / CI: what does this diff actually break?
455
+ codebeacon affected --base main # walk upstream callers of every changed file
456
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
457
+ codebeacon affected src/foo.py src/bar.py # explicit paths, no git needed
322
458
 
323
459
  # AI-semantic enrichment (the agent does the LLM work, codebeacon does the bookkeeping)
324
460
  codebeacon semantic-prepare [--dir .codebeacon] [--max-tasks N] [--chunk-size N]
@@ -347,7 +483,8 @@ codebeacon merge-driver <base> <cur> <other> # invoked by git after `hook insta
347
483
 
348
484
  # Integrations
349
485
  codebeacon serve [--dir .codebeacon] # start MCP server (stdio)
350
- codebeacon install # install Claude Code skill
486
+ codebeacon install # install Claude Code skill (user scope: ~/.claude/)
487
+ codebeacon install --project [PATH] # install into <PATH>/.claude/ (team-shared, repo-pinned)
351
488
  codebeacon upgrade # pip install --upgrade + refresh ~/.claude/skills/codebeacon/SKILL.md
352
489
  # (`--force` to upgrade even when installed in editable mode)
353
490
  ```
@@ -27,6 +27,39 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## Neu in 0.6.1
31
+
32
+ Patch-Release — Extraktionskorrektheit und reproduzierbare Ausgabe.
33
+
34
+ - **Sechs Framework-Extraktoren wiederhergestellt** — die tree-sitter-Queries für `laravel`, `angular`, `aspnet`, `actix`, `ktor` und `vapor` waren mit aktuellen Grammatik-Versionen aus dem Takt geraten und extrahierten **nichts**: die Query ließ sich nicht kompilieren und der Fehler wurde als Warnung verschluckt. Alle sechs kompilieren und extrahieren nun gegen die mitgelieferten Grammatiken (Laravel `scope:`/`name:`-Felder, Angular `export class`-Dekoratoren, ASP.NET `invocation_expression`-Felder, Actix geschwister-verankerte Attribute, Kotlin-1.x-Knotenumbenennungen, Swift-0.0.1-Knotensatz) — jeweils mit Regressionstest gegen erneutes stilles Brechen.
35
+ - **Reproduzierbare `beacon.json`** — `source_file`-Pfade der Knoten werden vor der Serialisierung relativ zum jeweiligen Projekt-Root umgeschrieben, sodass das Scannen desselben Commits auf zwei Maschinen einen byte-identischen Graphen erzeugt statt absolute Pfade im Diff zu wälzen.
36
+ - **`affected` meldet nicht mehr zu viel** — der Seed-Abgleich geänderter Dateien ist nun pfadsegment-ausgerichtet, sodass `src/user.py` keine fremden Knoten wie `foosrc/user.py` mehr hineinzieht.
37
+ - **`semantic-apply`-Absturz behoben** — ein `confidence_score: null` in einer archivierten/migrierten JSONL-Kante bricht den Lauf nicht mehr mit `TypeError` ab, sondern wird wie im Rest der Pipeline auf den sicheren Standard normalisiert.
38
+ - **NetworkX-3.6-Vorwärtskompatibilität** — `beacon.json` wird mit explizitem `edges="links"`-Schlüssel geschrieben, damit eine geänderte Upstream-Voreinstellung das Festplattenformat nicht still verändert; der MCP-Server lädt über dieselbe Kompatibilitätsschicht.
39
+ - **Obsidian-Vault-Hygiene** — die Bereinigung veralteter Notizen erfasst den gesamten Vault (Root + verschachtelt), und der Cross-Language-Import-Filter richtet sich nach der echten Quellsprache der Notiz statt nach einem Dateinamen-Suffix, das nie passte.
40
+ - **gitignore-Semantik** — verankerte Muster wie `build/*.js` lassen `*` nicht mehr über `/` greifen, sodass verschachtelte Dateien nicht fälschlich ignoriert werden.
41
+ - **Next.js App Router** — JS-basierte `page.js` / `page.jsx`-Routen werden nun erkannt (zuvor nur `.ts` / `.tsx`).
42
+ - **DI-Zuordnungskorrekturen** — FastAPI `Depends()` und Angular-Konstruktor-Injektion werden per Byte-Range der umschließenden Funktion/Klasse zugeordnet statt der ersten/letzten in der Datei; Razor `@using` erzeugt keine doppelten Kanten mehr.
43
+
44
+ ---
45
+
46
+ ## Neu in 0.6.0
47
+
48
+ - **`codebeacon affected`** — nimmt eine Liste geänderter Dateien (oder via `--base <ref>` ein git diff) und gibt jeden nachgelagerten Graphknoten aus. Für CI-Risikoeinstufung und PR-Reviews.
49
+ - **`.NET`-Projektdateien** — `.sln`, `.csproj`, `.fsproj`, `.vbproj`, `.razor`, `.cshtml` werden jetzt geparst: `<ProjectReference>` / `<PackageReference>` werden zu Graphkanten, Razor-Direktiven `@inherits` / `@inject` / `@using` verbinden Blazor-Seiten mit ihren Backing-Typen.
50
+ - **JS/TS Barrel-Reexports** — `export { X } from './mod'` und `export * from './mod'` erzeugen jetzt explizite `re_exports`-Kanten, sodass Next.js-/Monorepo-Barrels nicht mehr mit 0 Imports erscheinen.
51
+ - **`--exclude PATTERN`-Flag** für `scan` / `sync`, plus automatischer Fallback auf `.gitignore`, wenn `.codebeaconignore` fehlt.
52
+ - **`codebeacon install --project [PATH]`** — installiert den `/codebeacon`-Skill nach `<PATH>/.claude/` statt `~/.claude/`, damit Teams eine SKILL.md-Version pro Repo festpinnen können.
53
+ - **Wiki repariert sich selbst** — `--update`-Läufe entfernen jetzt `wiki/<project>/{controllers,services,entities,components}/*.md`-Dateien, deren Graphknoten nicht mehr existieren.
54
+ - **Shrink-Guard bei expliziten Löschungen gelockert** — im `--update`-Modus wird ein kleineres `beacon.json` nicht mehr abgelehnt, wenn der Cache die Löschungen bereits berücksichtigt hat; bei stiller Korruption greift die Sperre weiterhin.
55
+ - **Datei-übergreifende Deklarations-Union** — Swift `extension Foo`, C# partial classes, Ruby reopened classes vereinen ihre `fields` / `methods` zu einem kanonischen Knoten, statt vom letzten Schreiber überschrieben zu werden.
56
+ - **Härtere Suche** — `BeaconIndex` nutzt `casefold()`, sodass deutsches `ß`, türkisches `i/İ`, griechisches `σ/ς` und CJK-Labels korrekt matchen.
57
+ - **Reichhaltigerer Semantik-Kontext** — jeder Task-Chunk bringt jetzt Graph-Caller und -Callees als `neighbors` mit, damit das LLM bei echten Knotenlabels bleibt; `SKILL.md` ergänzt **Step 0 — Constrained query expansion**, sodass `/codebeacon query`-Flows keine Phantom-Tokens erfinden können.
58
+ - **`semantic-apply` Zero-Yield-Guard** — wenn jeder Chunk mit 0 Kanten archiviert wurde, beendet die CLI mit Exit 1, sodass CI stille LLM-Fehler bemerkt.
59
+ - **ArkTS (`.ets`) und Worktree-Sicherheit** — `.ets` wird eingesammelt; verschachtelte `worktrees/`-Verzeichnisse werden übersprungen, damit verlinkte Worktrees nicht doppelt indexiert werden.
60
+
61
+ ---
62
+
30
63
  ## Warum codebeacon?
31
64
 
32
65
  Jedes Mal, wenn Sie eine neue KI-Codiersitzung öffnen, beginnt der Assistent bei null. Er kennt weder Ihre Routes, noch Ihre Service-Schicht, noch Ihr Entitätsmodell, noch die Kommunikationswege zwischen Ihren Microservices. Sie verbringen den Beginn jeder Sitzung damit, Dateien einzufügen, die Struktur zu erklären und den Kontext wiederherzustellen.
@@ -94,8 +127,9 @@ codebeacon sync # Folgeläufe über Konfiguration
94
127
  | Ruby | Rails |
95
128
  | PHP | Laravel |
96
129
  | Rust | Actix-Web, Axum |
97
- | C# | ASP.NET Core |
130
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` für `ProjectReference` + `PackageReference` geparst |
98
131
  | Swift | Vapor |
132
+ | ArkTS | `.ets` (HarmonyOS) eingesammelt — Extraktoren framework-agnostisch |
99
133
 
100
134
  ---
101
135
 
@@ -370,10 +404,19 @@ codebeacon scan . --wiki-only # Extraktion überspringen, Wiki/Obsid
370
404
  codebeacon scan . --semantic # Extraktion strukturierter Kommentar-Referenzen (Javadoc/JSDoc/docstring)
371
405
  codebeacon scan . --list-only # nur Frameworks erkennen
372
406
  codebeacon scan /workspace --deep-dive # Pro-Projekt- + kombinierte Workspace-Ausgabe
407
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
408
+ # wiederholbare gitignore-Stil-Patterns
409
+ # mit .codebeaconignore / .gitignore vereint
373
410
 
374
411
  codebeacon init [pfad] # codebeacon.yaml generieren
375
412
  codebeacon sync # von codebeacon.yaml ausführen (hängt neue Workspace-Projekte automatisch an)
376
413
  codebeacon sync --no-rediscover # neue Projekte nicht automatisch anhängen (handgepflegter yaml-Modus)
414
+ codebeacon sync --exclude PATTERN # gleiches Flag, gleiche Semantik
415
+
416
+ # PR / CI: was bricht dieser Diff wirklich?
417
+ codebeacon affected --base main # die Aufrufer der geänderten Dateien stromaufwärts begehen
418
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
419
+ codebeacon affected src/foo.py src/bar.py # explizite Pfade — kein git nötig
377
420
 
378
421
  codebeacon query <Begriff> [--dir .codebeacon] [--limit N] # Knoten per Label-Substring suchen
379
422
  codebeacon path <Quelle> <Ziel> [--dir .codebeacon] # kürzester Abhängigkeitspfad
@@ -398,7 +441,8 @@ codebeacon semantic-apply [--dir .codebeacon]
398
441
  # (dauerhaftes Archiv). Results löschen, alles regenerieren.
399
442
 
400
443
  codebeacon serve [--dir .codebeacon] # MCP-Server starten (stdio)
401
- codebeacon install # Claude-Code-Skill installieren
444
+ codebeacon install # Claude-Code-Skill installieren (User-Scope: ~/.claude/)
445
+ codebeacon install --project [PATH] # nach <PATH>/.claude/ installieren (team-geteilt, repo-gepinnt)
402
446
  codebeacon upgrade # pip-Upgrade + ~/.claude/skills/codebeacon/SKILL.md aktualisieren
403
447
  # (`--force` falls editable-Installation)
404
448
  ```
@@ -27,6 +27,39 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## Novedades en 0.6.1
31
+
32
+ Versión de parche — corrección de extracción y salida reproducible.
33
+
34
+ - **Seis extractores de frameworks restaurados** — las queries tree-sitter de `laravel`, `angular`, `aspnet`, `actix`, `ktor` y `vapor` se habían desincronizado de las versiones actuales de las gramáticas y no extraían **nada**: la query no compilaba y el error se silenciaba como advertencia. Las seis ahora compilan y extraen contra las gramáticas incluidas (campos `scope:`/`name:` de Laravel, decoradores `export class` de Angular, campos `invocation_expression` de ASP.NET, atributos anclados a hermanos de Actix, renombrados de nodos de Kotlin 1.x, conjunto de nodos de Swift 0.0.1), cada una con un test de regresión para que no vuelvan a romperse en silencio.
35
+ - **`beacon.json` reproducible** — las rutas `source_file` de los nodos se reescriben relativas a la raíz de cada proyecto antes de serializar, así escanear el mismo commit en dos máquinas produce un grafo idéntico byte a byte en lugar de remover rutas absolutas en los diffs.
36
+ - **`affected` ya no sobre-reporta** — la coincidencia de archivos cambiados está alineada por segmentos de ruta, de modo que `src/user.py` ya no arrastra nodos ajenos como `foosrc/user.py`.
37
+ - **Corrección de fallo en `semantic-apply`** — un `confidence_score: null` en una arista JSONL archivada/migrada ya no aborta la ejecución con `TypeError`; se normaliza al valor seguro por defecto como el resto del pipeline.
38
+ - **Compatibilidad futura con NetworkX 3.6** — `beacon.json` se escribe con la clave explícita `edges="links"` para que un cambio de valor por defecto upstream no altere en silencio el formato en disco; el servidor MCP carga a través de la misma capa de compatibilidad.
39
+ - **Higiene del vault de Obsidian** — la limpieza de notas obsoletas barre todo el vault (raíz + anidado), y el filtro de imports entre lenguajes se basa en el lenguaje real de la nota en vez de un sufijo de nombre de archivo que nunca coincidía.
40
+ - **Semántica de gitignore** — los patrones anclados como `build/*.js` ya no permiten que `*` cruce `/`, así los archivos anidados no se ignoran por error.
41
+ - **App Router de Next.js** — ahora se descubren las rutas `page.js` / `page.jsx` basadas en JS (antes solo `.ts` / `.tsx`).
42
+ - **Correcciones de atribución de DI** — `Depends()` de FastAPI y la inyección por constructor de Angular se atribuyen a la función/clase contenedora por rango de bytes en vez de la primera/última del archivo; `@using` de Razor ya no emite aristas duplicadas.
43
+
44
+ ---
45
+
46
+ ## Novedades en 0.6.0
47
+
48
+ - **`codebeacon affected`** — recibe una lista de archivos cambiados (o vía `--base <ref>` un git diff) e imprime todos los nodos del grafo aguas abajo. Pensado para puntuación de riesgo en CI y revisión de PR.
49
+ - **Archivos de proyecto `.NET`** — ahora se analizan `.sln`, `.csproj`, `.fsproj`, `.vbproj`, `.razor`, `.cshtml`: `<ProjectReference>` / `<PackageReference>` se convierten en aristas del grafo, y las directivas Razor `@inherits` / `@inject` / `@using` vinculan las páginas Blazor con sus tipos de respaldo.
50
+ - **Re-exports barrel JS/TS** — `export { X } from './mod'` y `export * from './mod'` producen aristas explícitas `re_exports`, para que los barrels de Next.js / monorepo dejen de mostrar 0 imports.
51
+ - **Flag `--exclude PATTERN`** para `scan` / `sync`, más respaldo automático a `.gitignore` cuando falta `.codebeaconignore`.
52
+ - **`codebeacon install --project [PATH]`** — instala el skill `/codebeacon` en `<PATH>/.claude/` en vez de `~/.claude/`, para que los equipos fijen una versión de SKILL.md por repositorio.
53
+ - **El wiki se auto-repara** — las ejecuciones con `--update` ahora eliminan los archivos `wiki/<project>/{controllers,services,entities,components}/*.md` cuyo nodo del grafo ya no existe.
54
+ - **Guarda anti-encogimiento relajada para borrados explícitos** — en modo `--update`, ya no se rechaza escribir un `beacon.json` más pequeño si la caché ya contabilizó los archivos eliminados; la guarda sigue activa frente a corrupción silenciosa.
55
+ - **Unión de declaraciones cross-file** — `extension Foo` de Swift, `partial class` de C# y clases reabiertas de Ruby unen sus `fields` / `methods` en un único nodo canónico en lugar de que gane el último que escribe.
56
+ - **Consulta endurecida** — `BeaconIndex` usa `casefold()`, por lo que `ß` alemán, `i/İ` turco, `σ/ς` griego y etiquetas CJK hacen match correctamente.
57
+ - **Contexto semántico más rico** — cada chunk de tarea ahora lleva los llamadores y llamados del grafo en `neighbors`, manteniendo al LLM anclado en etiquetas reales. `SKILL.md` añade **Step 0 — Constrained query expansion** para que los flujos `/codebeacon query` no inventen tokens fantasma.
58
+ - **Guarda «cero rendimiento» de `semantic-apply`** — si todos los chunks archivaron 0 aristas, la CLI termina con exit 1, para que CI detecte fallos silenciosos del LLM.
59
+ - **ArkTS (`.ets`) y seguridad de worktree** — `.ets` se recoge; los directorios `worktrees/` anidados se omiten para evitar la indexación duplicada de worktrees enlazadas.
60
+
61
+ ---
62
+
30
63
  ## ¿Por qué codebeacon?
31
64
 
32
65
  Cada vez que se abre una nueva sesión de codificación con IA, el asistente comienza desde cero. No conoce sus rutas, su capa de servicios, su modelo de entidades ni cómo se comunican sus microservicios. Se pasa el inicio de cada sesión pegando archivos, explicando la estructura y restableciendo el contexto.
@@ -94,8 +127,9 @@ codebeacon sync # ejecuciones posteriores vía configuraci
94
127
  | Ruby | Rails |
95
128
  | PHP | Laravel |
96
129
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
97
- | C# | ASP.NET Core |
130
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` analizados para `ProjectReference` + `PackageReference` |
98
131
  | Swift | Vapor |
132
+ | ArkTS | `.ets` (HarmonyOS) recogido — los extractores son agnósticos al framework |
99
133
 
100
134
  ---
101
135
 
@@ -368,10 +402,19 @@ codebeacon scan . --wiki-only # saltar extracción, regenerar wiki/o
368
402
  codebeacon scan . --semantic # extracción de referencias de comentarios estructurados (Javadoc/JSDoc/docstring)
369
403
  codebeacon scan . --list-only # solo detectar frameworks
370
404
  codebeacon scan /workspace --deep-dive # salida por proyecto + workspace combinado
405
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
406
+ # patrones tipo gitignore repetibles
407
+ # fusionados con .codebeaconignore / .gitignore
371
408
 
372
409
  codebeacon init [ruta] # generar codebeacon.yaml
373
410
  codebeacon sync # ejecutar desde codebeacon.yaml (añade nuevos proyectos del workspace automáticamente)
374
411
  codebeacon sync --no-rediscover # no añadir automáticamente nuevos proyectos (modo yaml curado a mano)
412
+ codebeacon sync --exclude PATTERN # mismo flag, misma semántica
413
+
414
+ # PR / CI: ¿qué rompe realmente este diff?
415
+ codebeacon affected --base main # recorrer aguas arriba los llamadores de los archivos cambiados
416
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
417
+ codebeacon affected src/foo.py src/bar.py # rutas explícitas — sin git
375
418
 
376
419
  codebeacon query <término> [--dir .codebeacon] [--limit N] # buscar nodos por substring de etiqueta
377
420
  codebeacon path <origen> <destino> [--dir .codebeacon] # ruta más corta de dependencias
@@ -396,7 +439,8 @@ codebeacon semantic-apply [--dir .codebeacon]
396
439
  # durable). Borra los resultados y regenera todo.
397
440
 
398
441
  codebeacon serve [--dir .codebeacon] # servidor MCP (stdio)
399
- codebeacon install # instalar skill de Claude Code
442
+ codebeacon install # instalar skill de Claude Code (ámbito usuario: ~/.claude/)
443
+ codebeacon install --project [PATH] # instalar en <PATH>/.claude/ (compartido por el equipo, fijado al repo)
400
444
  codebeacon upgrade # pip upgrade + refrescar ~/.claude/skills/codebeacon/SKILL.md
401
445
  # (use `--force` si está instalado en modo editable)
402
446
  ```