codebeacon 0.5.0__tar.gz → 0.6.0__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 (151) hide show
  1. codebeacon-0.5.0/README.md → codebeacon-0.6.0/PKG-INFO +123 -2
  2. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.de.md +30 -2
  3. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.es.md +30 -2
  4. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.fr.md +30 -2
  5. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.ja.md +30 -2
  6. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.ko.md +30 -2
  7. codebeacon-0.5.0/PKG-INFO → codebeacon-0.6.0/README.md +30 -45
  8. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.pt-BR.md +30 -2
  9. {codebeacon-0.5.0 → codebeacon-0.6.0}/README.zh-CN.md +30 -2
  10. codebeacon-0.6.0/codebeacon/__init__.py +1 -0
  11. codebeacon-0.6.0/codebeacon/affected.py +190 -0
  12. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/cache.py +57 -6
  13. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/cli.py +187 -486
  14. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/common/safety.py +5 -0
  15. codebeacon-0.6.0/codebeacon/diagnostics.py +131 -0
  16. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/discover/ignore.py +41 -12
  17. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/discover/scanner.py +45 -15
  18. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/hooks.py +48 -4
  19. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/mcp.py +93 -5
  20. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/dependencies.py +97 -8
  21. codebeacon-0.6.0/codebeacon/extract/dotnet.py +161 -0
  22. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/graph/build.py +147 -14
  23. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/graph/write.py +6 -1
  24. codebeacon-0.6.0/codebeacon/pipeline.py +577 -0
  25. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/semantic_pipeline.py +141 -5
  26. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/skill/SKILL.md +13 -0
  27. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/wave.py +56 -12
  28. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/wiki/generator.py +106 -0
  29. codebeacon-0.6.0/pyproject.toml +120 -0
  30. {codebeacon-0.5.0 → codebeacon-0.6.0}/skill/install.py +31 -9
  31. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/pyproject.toml +4 -0
  32. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/__init__.py +0 -0
  33. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/main.py +17 -0
  34. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/services.py +11 -0
  35. codebeacon-0.6.0/tests/fixtures/integration_workspace/web/package.json +7 -0
  36. codebeacon-0.6.0/tests/fixtures/integration_workspace/web/src/UserPage.tsx +14 -0
  37. codebeacon-0.6.0/tests/integration/__init__.py +0 -0
  38. codebeacon-0.6.0/tests/integration/test_full_pipeline.py +230 -0
  39. codebeacon-0.6.0/tests/test_affected.py +113 -0
  40. codebeacon-0.6.0/tests/test_affected_wiki.py +182 -0
  41. codebeacon-0.6.0/tests/test_dependencies.py +93 -0
  42. codebeacon-0.6.0/tests/test_diagnostics.py +169 -0
  43. codebeacon-0.6.0/tests/test_discover.py +293 -0
  44. codebeacon-0.6.0/tests/test_dotnet.py +164 -0
  45. codebeacon-0.6.0/tests/test_graph.py +334 -0
  46. codebeacon-0.6.0/tests/test_known_bugs.py +340 -0
  47. codebeacon-0.6.0/tests/test_mcp_and_semantic.py +134 -0
  48. codebeacon-0.6.0/tests/test_optional_grammars.py +132 -0
  49. codebeacon-0.6.0/tests/test_pipeline_module.py +125 -0
  50. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_safety_and_writes.py +35 -0
  51. codebeacon-0.6.0/tests/test_semantic_stats.py +210 -0
  52. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_wiki.py +55 -0
  53. codebeacon-0.5.0/codebeacon/__init__.py +0 -1
  54. codebeacon-0.5.0/pyproject.toml +0 -63
  55. codebeacon-0.5.0/tests/test_discover.py +0 -147
  56. codebeacon-0.5.0/tests/test_graph.py +0 -167
  57. {codebeacon-0.5.0 → codebeacon-0.6.0}/.cursorrules +0 -0
  58. {codebeacon-0.5.0 → codebeacon-0.6.0}/.github/CODEOWNERS +0 -0
  59. {codebeacon-0.5.0 → codebeacon-0.6.0}/.github/dependabot.yml +0 -0
  60. {codebeacon-0.5.0 → codebeacon-0.6.0}/.github/workflows/ci.yml +0 -0
  61. {codebeacon-0.5.0 → codebeacon-0.6.0}/.github/workflows/release.yml +0 -0
  62. {codebeacon-0.5.0 → codebeacon-0.6.0}/.gitignore +0 -0
  63. {codebeacon-0.5.0 → codebeacon-0.6.0}/AGENTS.md +0 -0
  64. {codebeacon-0.5.0 → codebeacon-0.6.0}/CLAUDE.md +0 -0
  65. {codebeacon-0.5.0 → codebeacon-0.6.0}/LICENSE +0 -0
  66. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/__main__.py +0 -0
  67. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/common/__init__.py +0 -0
  68. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/common/filters.py +0 -0
  69. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/common/symbols.py +0 -0
  70. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/common/types.py +0 -0
  71. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/config.py +0 -0
  72. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/contextmap/__init__.py +0 -0
  73. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/contextmap/generator.py +0 -0
  74. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/discover/__init__.py +0 -0
  75. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/discover/detector.py +0 -0
  76. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/__init__.py +0 -0
  77. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/callflow_html.py +0 -0
  78. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/merge.py +0 -0
  79. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/obsidian.py +0 -0
  80. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/export/tree_html.py +0 -0
  81. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/__init__.py +0 -0
  82. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/base.py +0 -0
  83. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/components.py +0 -0
  84. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/entities.py +0 -0
  85. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/README.md +0 -0
  86. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/actix.scm +0 -0
  87. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/angular.scm +0 -0
  88. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/aspnet.scm +0 -0
  89. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/django.scm +0 -0
  90. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/express.scm +0 -0
  91. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/fastapi.scm +0 -0
  92. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/flask.scm +0 -0
  93. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/gin.scm +0 -0
  94. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/ktor.scm +0 -0
  95. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/laravel.scm +0 -0
  96. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/nestjs.scm +0 -0
  97. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/rails.scm +0 -0
  98. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/react.scm +0 -0
  99. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/spring_boot.scm +0 -0
  100. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/svelte.scm +0 -0
  101. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/tauri.scm +0 -0
  102. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/vapor.scm +0 -0
  103. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/queries/vue.scm +0 -0
  104. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/routes.py +0 -0
  105. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/semantic.py +0 -0
  106. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/extract/services.py +0 -0
  107. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/graph/__init__.py +0 -0
  108. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/graph/analyze.py +0 -0
  109. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/graph/cluster.py +0 -0
  110. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/graph/enrich.py +0 -0
  111. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/knowledge/__init__.py +0 -0
  112. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/knowledge/generator.py +0 -0
  113. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/plugins/__init__.py +0 -0
  114. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/plugins/githooks.py +0 -0
  115. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/plugins/skills.py +0 -0
  116. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/wiki/__init__.py +0 -0
  117. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/wiki/index.py +0 -0
  118. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon/wiki/templates.py +0 -0
  119. {codebeacon-0.5.0 → codebeacon-0.6.0}/codebeacon.yaml.example +0 -0
  120. {codebeacon-0.5.0 → codebeacon-0.6.0}/docs/TRANSLATION_STATUS.md +0 -0
  121. {codebeacon-0.5.0 → codebeacon-0.6.0}/public-plan.md +0 -0
  122. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/__init__.py +0 -0
  123. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/conftest.py +0 -0
  124. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/actix/main.rs +0 -0
  125. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/angular/app.component.ts +0 -0
  126. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/aspnet/UserController.cs +0 -0
  127. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/django/views.py +0 -0
  128. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/express/userRouter.js +0 -0
  129. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/fastapi/main.py +0 -0
  130. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/flask/app.py +0 -0
  131. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/gin/main.go +0 -0
  132. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/ktor/UserRoutes.kt +0 -0
  133. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/laravel/UserController.php +0 -0
  134. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/nestjs/user.controller.ts +0 -0
  135. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/rails/users_controller.rb +0 -0
  136. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/react/UserPage.tsx +0 -0
  137. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/spring_boot/UserController.java +0 -0
  138. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/sveltekit/+page.svelte +0 -0
  139. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/vapor/routes.swift +0 -0
  140. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/fixtures/vue/UserList.vue +0 -0
  141. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_cli_dispatch.py +0 -0
  142. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_entities.py +0 -0
  143. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_filters.py +0 -0
  144. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_knowledge.py +0 -0
  145. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_plugins.py +0 -0
  146. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_resolve.py +0 -0
  147. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_routes.py +0 -0
  148. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_scanner_sensitive.py +0 -0
  149. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_semantic.py +0 -0
  150. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_semantic_hardening.py +0 -0
  151. {codebeacon-0.5.0 → codebeacon-0.6.0}/tests/test_services.py +0 -0
@@ -1,3 +1,96 @@
1
+ Metadata-Version: 2.4
2
+ Name: codebeacon
3
+ Version: 0.6.0
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,23 @@
25
118
 
26
119
  ---
27
120
 
121
+ ## What's new in 0.6.0
122
+
123
+ - **`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.
124
+ - **`.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.
125
+ - **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.
126
+ - **`--exclude PATTERN` flag** for `scan` / `sync`, plus automatic fallback to `.gitignore` when `.codebeaconignore` is absent.
127
+ - **`codebeacon install --project [PATH]`** — install the `/codebeacon` skill into `<PATH>/.claude/` instead of `~/.claude/`, so teams can pin a SKILL.md version per repo.
128
+ - **Wiki self-heals** — `--update` runs now prune `wiki/<project>/{controllers,services,entities,components}/*.md` files whose graph node no longer exists.
129
+ - **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.
130
+ - **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.
131
+ - **Hardened query** — `BeaconIndex` uses `casefold()` so German `ß`, Turkish `i/İ`, Greek `σ/ς`, and CJK labels round-trip correctly.
132
+ - **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.
133
+ - **`semantic-apply` zero-yield guard** — if every chunk archived 0 edges, the CLI exits 1 so CI catches silent LLM failures.
134
+ - **ArkTS (`.ets`) and worktree-safety** — `.ets` is collected; nested `worktrees/` dirs are skipped to stop double-counting linked worktrees.
135
+
136
+ ---
137
+
28
138
  ## Why codebeacon?
29
139
 
30
140
  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 +202,9 @@ codebeacon sync # subsequent runs via config
92
202
  | Ruby | Rails |
93
203
  | PHP | Laravel |
94
204
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
95
- | C# | ASP.NET Core |
205
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` parsed for `ProjectReference` + `PackageReference` |
96
206
  | Swift | Vapor |
207
+ | ArkTS | `.ets` (HarmonyOS) collected — extractors framework-agnostic |
97
208
 
98
209
  ---
99
210
 
@@ -313,12 +424,21 @@ codebeacon scan . --obsidian-dir <path> # write Obsidian vault to custom locat
313
424
  codebeacon scan . --semantic # enable structured-comment semantic extraction (Javadoc/JSDoc/docstring refs)
314
425
  codebeacon scan . --list-only # detect frameworks only, don't extract
315
426
  codebeacon scan /workspace --deep-dive # per-project + combined workspace outputs
427
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
428
+ # repeatable gitignore-style patterns merged with
429
+ # .codebeaconignore / .gitignore
316
430
 
317
431
  # Config-driven mode
318
432
  codebeacon init [path] # auto-generate codebeacon.yaml
319
433
  codebeacon sync # run from codebeacon.yaml (auto-appends new workspace projects)
320
434
  codebeacon sync --config <file> # use a specific config file
321
435
  codebeacon sync --no-rediscover # don't auto-append newly added projects (hand-curated yaml mode)
436
+ codebeacon sync --exclude PATTERN # same flag, same semantics
437
+
438
+ # PR / CI: what does this diff actually break?
439
+ codebeacon affected --base main # walk upstream callers of every changed file
440
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
441
+ codebeacon affected src/foo.py src/bar.py # explicit paths, no git needed
322
442
 
323
443
  # AI-semantic enrichment (the agent does the LLM work, codebeacon does the bookkeeping)
324
444
  codebeacon semantic-prepare [--dir .codebeacon] [--max-tasks N] [--chunk-size N]
@@ -347,7 +467,8 @@ codebeacon merge-driver <base> <cur> <other> # invoked by git after `hook insta
347
467
 
348
468
  # Integrations
349
469
  codebeacon serve [--dir .codebeacon] # start MCP server (stdio)
350
- codebeacon install # install Claude Code skill
470
+ codebeacon install # install Claude Code skill (user scope: ~/.claude/)
471
+ codebeacon install --project [PATH] # install into <PATH>/.claude/ (team-shared, repo-pinned)
351
472
  codebeacon upgrade # pip install --upgrade + refresh ~/.claude/skills/codebeacon/SKILL.md
352
473
  # (`--force` to upgrade even when installed in editable mode)
353
474
  ```
@@ -27,6 +27,23 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## Neu in 0.6.0
31
+
32
+ - **`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.
33
+ - **`.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.
34
+ - **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.
35
+ - **`--exclude PATTERN`-Flag** für `scan` / `sync`, plus automatischer Fallback auf `.gitignore`, wenn `.codebeaconignore` fehlt.
36
+ - **`codebeacon install --project [PATH]`** — installiert den `/codebeacon`-Skill nach `<PATH>/.claude/` statt `~/.claude/`, damit Teams eine SKILL.md-Version pro Repo festpinnen können.
37
+ - **Wiki repariert sich selbst** — `--update`-Läufe entfernen jetzt `wiki/<project>/{controllers,services,entities,components}/*.md`-Dateien, deren Graphknoten nicht mehr existieren.
38
+ - **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.
39
+ - **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.
40
+ - **Härtere Suche** — `BeaconIndex` nutzt `casefold()`, sodass deutsches `ß`, türkisches `i/İ`, griechisches `σ/ς` und CJK-Labels korrekt matchen.
41
+ - **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.
42
+ - **`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.
43
+ - **ArkTS (`.ets`) und Worktree-Sicherheit** — `.ets` wird eingesammelt; verschachtelte `worktrees/`-Verzeichnisse werden übersprungen, damit verlinkte Worktrees nicht doppelt indexiert werden.
44
+
45
+ ---
46
+
30
47
  ## Warum codebeacon?
31
48
 
32
49
  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 +111,9 @@ codebeacon sync # Folgeläufe über Konfiguration
94
111
  | Ruby | Rails |
95
112
  | PHP | Laravel |
96
113
  | Rust | Actix-Web, Axum |
97
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` für `ProjectReference` + `PackageReference` geparst |
98
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) eingesammelt — Extraktoren framework-agnostisch |
99
117
 
100
118
  ---
101
119
 
@@ -370,10 +388,19 @@ codebeacon scan . --wiki-only # Extraktion überspringen, Wiki/Obsid
370
388
  codebeacon scan . --semantic # Extraktion strukturierter Kommentar-Referenzen (Javadoc/JSDoc/docstring)
371
389
  codebeacon scan . --list-only # nur Frameworks erkennen
372
390
  codebeacon scan /workspace --deep-dive # Pro-Projekt- + kombinierte Workspace-Ausgabe
391
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
392
+ # wiederholbare gitignore-Stil-Patterns
393
+ # mit .codebeaconignore / .gitignore vereint
373
394
 
374
395
  codebeacon init [pfad] # codebeacon.yaml generieren
375
396
  codebeacon sync # von codebeacon.yaml ausführen (hängt neue Workspace-Projekte automatisch an)
376
397
  codebeacon sync --no-rediscover # neue Projekte nicht automatisch anhängen (handgepflegter yaml-Modus)
398
+ codebeacon sync --exclude PATTERN # gleiches Flag, gleiche Semantik
399
+
400
+ # PR / CI: was bricht dieser Diff wirklich?
401
+ codebeacon affected --base main # die Aufrufer der geänderten Dateien stromaufwärts begehen
402
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
403
+ codebeacon affected src/foo.py src/bar.py # explizite Pfade — kein git nötig
377
404
 
378
405
  codebeacon query <Begriff> [--dir .codebeacon] [--limit N] # Knoten per Label-Substring suchen
379
406
  codebeacon path <Quelle> <Ziel> [--dir .codebeacon] # kürzester Abhängigkeitspfad
@@ -398,7 +425,8 @@ codebeacon semantic-apply [--dir .codebeacon]
398
425
  # (dauerhaftes Archiv). Results löschen, alles regenerieren.
399
426
 
400
427
  codebeacon serve [--dir .codebeacon] # MCP-Server starten (stdio)
401
- codebeacon install # Claude-Code-Skill installieren
428
+ codebeacon install # Claude-Code-Skill installieren (User-Scope: ~/.claude/)
429
+ codebeacon install --project [PATH] # nach <PATH>/.claude/ installieren (team-geteilt, repo-gepinnt)
402
430
  codebeacon upgrade # pip-Upgrade + ~/.claude/skills/codebeacon/SKILL.md aktualisieren
403
431
  # (`--force` falls editable-Installation)
404
432
  ```
@@ -27,6 +27,23 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## Novedades en 0.6.0
31
+
32
+ - **`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.
33
+ - **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.
34
+ - **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.
35
+ - **Flag `--exclude PATTERN`** para `scan` / `sync`, más respaldo automático a `.gitignore` cuando falta `.codebeaconignore`.
36
+ - **`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.
37
+ - **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.
38
+ - **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.
39
+ - **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.
40
+ - **Consulta endurecida** — `BeaconIndex` usa `casefold()`, por lo que `ß` alemán, `i/İ` turco, `σ/ς` griego y etiquetas CJK hacen match correctamente.
41
+ - **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.
42
+ - **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.
43
+ - **ArkTS (`.ets`) y seguridad de worktree** — `.ets` se recoge; los directorios `worktrees/` anidados se omiten para evitar la indexación duplicada de worktrees enlazadas.
44
+
45
+ ---
46
+
30
47
  ## ¿Por qué codebeacon?
31
48
 
32
49
  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 +111,9 @@ codebeacon sync # ejecuciones posteriores vía configuraci
94
111
  | Ruby | Rails |
95
112
  | PHP | Laravel |
96
113
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
97
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` analizados para `ProjectReference` + `PackageReference` |
98
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) recogido — los extractores son agnósticos al framework |
99
117
 
100
118
  ---
101
119
 
@@ -368,10 +386,19 @@ codebeacon scan . --wiki-only # saltar extracción, regenerar wiki/o
368
386
  codebeacon scan . --semantic # extracción de referencias de comentarios estructurados (Javadoc/JSDoc/docstring)
369
387
  codebeacon scan . --list-only # solo detectar frameworks
370
388
  codebeacon scan /workspace --deep-dive # salida por proyecto + workspace combinado
389
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
390
+ # patrones tipo gitignore repetibles
391
+ # fusionados con .codebeaconignore / .gitignore
371
392
 
372
393
  codebeacon init [ruta] # generar codebeacon.yaml
373
394
  codebeacon sync # ejecutar desde codebeacon.yaml (añade nuevos proyectos del workspace automáticamente)
374
395
  codebeacon sync --no-rediscover # no añadir automáticamente nuevos proyectos (modo yaml curado a mano)
396
+ codebeacon sync --exclude PATTERN # mismo flag, misma semántica
397
+
398
+ # PR / CI: ¿qué rompe realmente este diff?
399
+ codebeacon affected --base main # recorrer aguas arriba los llamadores de los archivos cambiados
400
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
401
+ codebeacon affected src/foo.py src/bar.py # rutas explícitas — sin git
375
402
 
376
403
  codebeacon query <término> [--dir .codebeacon] [--limit N] # buscar nodos por substring de etiqueta
377
404
  codebeacon path <origen> <destino> [--dir .codebeacon] # ruta más corta de dependencias
@@ -396,7 +423,8 @@ codebeacon semantic-apply [--dir .codebeacon]
396
423
  # durable). Borra los resultados y regenera todo.
397
424
 
398
425
  codebeacon serve [--dir .codebeacon] # servidor MCP (stdio)
399
- codebeacon install # instalar skill de Claude Code
426
+ codebeacon install # instalar skill de Claude Code (ámbito usuario: ~/.claude/)
427
+ codebeacon install --project [PATH] # instalar en <PATH>/.claude/ (compartido por el equipo, fijado al repo)
400
428
  codebeacon upgrade # pip upgrade + refrescar ~/.claude/skills/codebeacon/SKILL.md
401
429
  # (use `--force` si está instalado en modo editable)
402
430
  ```
@@ -27,6 +27,23 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## Nouveautés en 0.6.0
31
+
32
+ - **`codebeacon affected`** — prend une liste de fichiers modifiés (ou via `--base <ref>` un git diff) et imprime tous les nœuds du graphe en aval. Pensé pour le scoring de risque en CI et la revue de PR.
33
+ - **Fichiers projet `.NET`** — `.sln`, `.csproj`, `.fsproj`, `.vbproj`, `.razor`, `.cshtml` sont désormais analysés : les balises `<ProjectReference>` / `<PackageReference>` deviennent des arêtes du graphe, et les directives Razor `@inherits` / `@inject` / `@using` relient les pages Blazor à leurs types sous-jacents.
34
+ - **Re-exports barrel JS/TS** — `export { X } from './mod'` et `export * from './mod'` produisent maintenant des arêtes explicites `re_exports`, pour que les barrels Next.js / monorepo ne s'affichent plus avec 0 import.
35
+ - **Drapeau `--exclude PATTERN`** pour `scan` / `sync`, plus repli automatique sur `.gitignore` lorsque `.codebeaconignore` est absent.
36
+ - **`codebeacon install --project [PATH]`** — installe le skill `/codebeacon` dans `<PATH>/.claude/` plutôt que `~/.claude/`, pour permettre aux équipes de figer la version du SKILL.md par dépôt.
37
+ - **Le wiki s'auto-répare** — les exécutions `--update` suppriment maintenant les fichiers `wiki/<project>/{controllers,services,entities,components}/*.md` dont le nœud de graphe n'existe plus.
38
+ - **Garde anti-rétrécissement relâchée pour les suppressions explicites** — en mode `--update`, l'écriture d'un `beacon.json` plus petit n'est plus refusée si le cache a déjà tenu compte des fichiers supprimés ; la garde s'applique toujours en cas de corruption silencieuse.
39
+ - **Fusion union des déclarations multi-fichiers** — les `extension Foo` Swift, les `partial class` C# et les classes Ruby réouvertes voient leurs `fields` / `methods` fusionnés dans un unique nœud canonique au lieu d'être écrasés.
40
+ - **Recherche renforcée** — `BeaconIndex` utilise `casefold()`, ainsi l'allemand `ß`, le turc `i/İ`, le grec `σ/ς` et les libellés CJK matchent correctement.
41
+ - **Contexte sémantique enrichi** — chaque chunk de tâche transporte désormais les appelants / appelés du graphe via `neighbors`, ce qui garde le LLM ancré sur de vrais libellés. `SKILL.md` ajoute **Step 0 — Constrained query expansion** pour que les flux `/codebeacon query` n'inventent pas de tokens fantômes.
42
+ - **Garde « zéro rendement » de `semantic-apply`** — si tous les chunks ont archivé 0 arête, la CLI termine avec exit 1 pour que la CI détecte les échecs silencieux du LLM.
43
+ - **ArkTS (`.ets`) et sécurité worktree** — `.ets` est collecté ; les dossiers `worktrees/` imbriqués sont ignorés pour éviter l'indexation en double des worktrees liées.
44
+
45
+ ---
46
+
30
47
  ## Pourquoi codebeacon ?
31
48
 
32
49
  À chaque nouvelle session de développement assisté par IA, l'assistant repart de zéro. Il ne connaît ni vos routes, ni votre couche de services, ni votre modèle d'entités, ni les relations entre vos microservices. Vous passez le début de chaque session à coller des fichiers, expliquer la structure et rétablir le contexte.
@@ -94,8 +111,9 @@ codebeacon sync # exécutions suivantes via la configuration
94
111
  | Ruby | Rails |
95
112
  | PHP | Laravel |
96
113
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
97
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`) ; `.sln` / `.csproj` / `.fsproj` / `.vbproj` analysés pour `ProjectReference` + `PackageReference` |
98
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) collecté — les extracteurs sont framework-agnostiques |
99
117
 
100
118
  ---
101
119
 
@@ -369,10 +387,19 @@ codebeacon scan . --wiki-only # ignorer la ré-extraction, régéné
369
387
  codebeacon scan . --semantic # extraction des références dans commentaires structurés (Javadoc/JSDoc/docstring)
370
388
  codebeacon scan . --list-only # détecter les frameworks uniquement
371
389
  codebeacon scan /workspace --deep-dive # sortie par projet + workspace combiné
390
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
391
+ # motifs gitignore répétables
392
+ # fusionnés avec .codebeaconignore / .gitignore
372
393
 
373
394
  codebeacon init [chemin] # générer codebeacon.yaml
374
395
  codebeacon sync # exécuter depuis codebeacon.yaml (ajoute automatiquement les nouveaux projets du workspace)
375
396
  codebeacon sync --no-rediscover # ne pas ajouter automatiquement les nouveaux projets (mode yaml géré manuellement)
397
+ codebeacon sync --exclude PATTERN # même drapeau, même sémantique
398
+
399
+ # PR / CI : qu'est-ce que ce diff casse vraiment ?
400
+ codebeacon affected --base main # remonter les appelants des fichiers modifiés
401
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
402
+ codebeacon affected src/foo.py src/bar.py # chemins explicites — pas besoin de git
376
403
 
377
404
  codebeacon query <terme> [--dir .codebeacon] [--limit N] # rechercher des nœuds par sous-chaîne de label
378
405
  codebeacon path <source> <cible> [--dir .codebeacon] # chemin de dépendances le plus court
@@ -397,7 +424,8 @@ codebeacon semantic-apply [--dir .codebeacon]
397
424
  # durable). Supprime les résultats, régénère tout.
398
425
 
399
426
  codebeacon serve [--dir .codebeacon] # serveur MCP (stdio)
400
- codebeacon install # installer le skill Claude Code
427
+ codebeacon install # installer le skill Claude Code (portée utilisateur : ~/.claude/)
428
+ codebeacon install --project [PATH] # installer dans <PATH>/.claude/ (partagé en équipe, épinglé au dépôt)
401
429
  codebeacon upgrade # pip upgrade + rafraîchir ~/.claude/skills/codebeacon/SKILL.md
402
430
  # (`--force` si installé en mode éditable)
403
431
  ```
@@ -27,6 +27,23 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## 0.6.0 の新機能
31
+
32
+ - **`codebeacon affected`** — 変更されたファイル一覧(または `--base <ref>` で git diff)を受け取り、その影響範囲にあるグラフノードをすべて出力。CI のリスクスコアリングや PR レビュー向け。
33
+ - **`.NET` プロジェクトファイル** — `.sln`, `.csproj`, `.fsproj`, `.vbproj`, `.razor`, `.cshtml` を解析。`<ProjectReference>` / `<PackageReference>` がグラフエッジとなり、Razor `@inherits` / `@inject` / `@using` が Blazor ページを背後の型に接続。
34
+ - **JS/TS バレル re-export** — `export { X } from './mod'`, `export * from './mod'` が明示的な `re_exports` エッジを生成。Next.js / モノレポのバレルが import 0 と表示されなくなりました。
35
+ - **`--exclude PATTERN` フラグ**(`scan` / `sync` 両方)+ `.codebeaconignore` がない場合は `.gitignore` を自動フォールバック。
36
+ - **`codebeacon install --project [PATH]`** — `~/.claude/` ではなく `<PATH>/.claude/` に `/codebeacon` スキルをインストール。チームが SKILL.md のバージョンをリポジトリに固定できます。
37
+ - **wiki の自動クリーンアップ** — `--update` 実行時、グラフに存在しなくなった `wiki/<project>/{controllers,services,entities,components}/*.md` を自動削除。
38
+ - **明示的削除時は shrink-guard をバイパス** — `--update` モードでキャッシュが既に削除を反映している場合、より小さい `beacon.json` の書き込みを拒否しなくなりました。silent corruption へのガードは維持。
39
+ - **Cross-file 宣言の union マージ** — Swift `extension Foo`, C# partial class, Ruby reopened class の `fields` / `methods` が最後の書き込みで上書きされず、単一の canonical ノードにマージされます。
40
+ - **query の強化** — `BeaconIndex` が `casefold()` を使うので、ドイツ語 `ß`、トルコ語 `i/İ`、ギリシャ語 `σ/ς`、CJK ラベルのマッチが正しく動作。
41
+ - **セマンティックコンテキストの強化** — 各タスクチャンクにグラフの caller / callee が `neighbors` として同梱され、LLM が実在ノードラベルから離れにくくなりました。`SKILL.md` に **Step 0 — Constrained query expansion** を追加し、`/codebeacon query` フローが phantom トークンを発明できないよう明示。
42
+ - **`semantic-apply` zero-yield ガード** — すべてのチャンクが 0 エッジでアーカイブされた場合、CLI が exit 1 で終了し、CI が LLM のサイレント失敗を検出できます。
43
+ - **ArkTS (`.ets`) と worktree 安全性** — `.ets` を収集、ネストされた `worktrees/` ディレクトリをスキップし、linked worktree の重複インデックスを防止。
44
+
45
+ ---
46
+
30
47
  ## なぜ codebeacon なのか
31
48
 
32
49
  AI コーディングセッションを新しく開くたびに、アシスタントは白紙の状態から始まります。ルート構造も、サービス層も、エンティティモデルも、マイクロサービス間の呼び出し関係も把握していません。毎回のセッションでファイルを貼り付け、構造を説明し、コンテキストを再設定するために多くの時間を費やすことになります。
@@ -94,8 +111,9 @@ codebeacon sync # 以降の実行は設定ファイルベ
94
111
  | Ruby | Rails |
95
112
  | PHP | Laravel |
96
113
  | Rust | Actix-Web、Axum、Tauri、Rocket、Warp |
97
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` から `ProjectReference` + `PackageReference` を解析 |
98
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) を収集 — extractor は framework-agnostic |
99
117
 
100
118
  ---
101
119
 
@@ -274,12 +292,21 @@ codebeacon scan . --obsidian-dir <path> # Obsidian Vault をカスタム場所
274
292
  codebeacon scan . --semantic # 構造化コメント参照(Javadoc/JSDoc/docstring)の抽出を有効化
275
293
  codebeacon scan . --list-only # フレームワーク検出のみ、抽出なし
276
294
  codebeacon scan /workspace --deep-dive # プロジェクト別 + 統合ワークスペース出力
295
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
296
+ # 繰り返し可能な gitignore スタイルパターン
297
+ # .codebeaconignore / .gitignore とマージ
277
298
 
278
299
  # 設定ベースモード
279
300
  codebeacon init [path] # codebeacon.yaml を自動生成
280
301
  codebeacon sync # codebeacon.yaml ベースで実行 (新規ワークスペースプロジェクトを自動追加)
281
302
  codebeacon sync --config <file> # 特定の設定ファイルを使用
282
303
  codebeacon sync --no-rediscover # 新規プロジェクトの自動追加を無効化 (手動キュレーションモード)
304
+ codebeacon sync --exclude PATTERN # 同じフラグ、同じ意味
305
+
306
+ # PR / CI: この diff は実際に何を壊すのか?
307
+ codebeacon affected --base main # 変更ファイルの上流呼び出し元を walk
308
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
309
+ codebeacon affected src/foo.py src/bar.py # 明示パス — git なしでも動作
283
310
 
284
311
  # ナレッジグラフのクエリ
285
312
  codebeacon query <term> [--dir .codebeacon] [--limit N] # ラベル部分文字列でノード検索
@@ -306,7 +333,8 @@ codebeacon semantic-apply [--dir .codebeacon]
306
333
 
307
334
  # インテグレーション
308
335
  codebeacon serve [--dir .codebeacon] # MCP サーバー起動 (stdio)
309
- codebeacon install # Claude Code スキルをインストール
336
+ codebeacon install # Claude Code スキルをインストール (user スコープ: ~/.claude/)
337
+ codebeacon install --project [PATH] # <PATH>/.claude/ にインストール (チーム共有・リポジトリ固定)
310
338
  codebeacon upgrade # pip で更新 + ~/.claude/skills/codebeacon/SKILL.md を再生成
311
339
  # (`--force` で editable インストール時も強制実行)
312
340
  ```
@@ -27,6 +27,23 @@
27
27
 
28
28
  ---
29
29
 
30
+ ## 0.6.0 새 소식
31
+
32
+ - **`codebeacon affected`** — 변경된 파일 목록(또는 `--base <ref>`로 git diff)을 받아 그 영향권에 있는 그래프 노드를 모두 출력. CI 리스크 스코어링·PR 리뷰용.
33
+ - **`.NET` 프로젝트 파일** — `.sln`, `.csproj`, `.fsproj`, `.vbproj`, `.razor`, `.cshtml`가 이제 파싱됩니다. `<ProjectReference>` / `<PackageReference>`가 그래프 엣지로, Razor `@inherits` / `@inject` / `@using`이 Blazor 페이지를 백엔드 타입으로 연결합니다.
34
+ - **JS/TS 배럴 re-export** — `export { X } from './mod'`, `export * from './mod'`가 명시적 `re_exports` 엣지가 됩니다. Next.js·모노레포 배럴이 더 이상 import 0으로 표시되지 않습니다.
35
+ - **`--exclude PATTERN` 플래그** (`scan` / `sync`) + `.codebeaconignore`가 없을 때 자동 `.gitignore` 폴백.
36
+ - **`codebeacon install --project [PATH]`** — `~/.claude/` 대신 `<PATH>/.claude/`에 `/codebeacon` 스킬 설치. 팀이 SKILL.md 버전을 레포에 핀할 수 있습니다.
37
+ - **wiki 자동 정리** — `--update` 실행 시 더 이상 그래프에 없는 `wiki/<project>/{controllers,services,entities,components}/*.md` 파일을 자동 삭제.
38
+ - **명시 삭제 시 shrink-guard 우회** — `--update` 모드에서 캐시가 이미 삭제된 파일을 추적했다면 더 작은 `beacon.json` 쓰기를 거부하지 않습니다. silent corruption에 대한 가드는 그대로.
39
+ - **Cross-file 선언 union 머지** — Swift `extension Foo`, C# partial class, Ruby reopened class가 `fields` / `methods`를 마지막 파일에 덮어쓰지 않고 단일 canonical 노드로 합쳐집니다.
40
+ - **query 강화** — `BeaconIndex`가 `casefold()`를 사용해 독일어 `ß`, 터키어 `i/İ`, 그리스어 `σ/ς`, CJK 라벨 매칭이 올바르게 동작합니다.
41
+ - **시맨틱 컨텍스트 강화** — 각 task chunk에 그래프 caller·callee가 `neighbors`로 동봉되어 LLM이 실제 노드 라벨에서 벗어나기 어렵습니다. `SKILL.md`에 **Step 0 — Constrained query expansion** 추가로 `/codebeacon query` 흐름이 phantom 토큰을 만들지 못하도록 명시.
42
+ - **`semantic-apply` zero-yield 가드** — 모든 chunk가 0 엣지로 archive되면 CLI가 exit 1로 종료해 CI가 LLM의 silent 실패를 잡습니다.
43
+ - **ArkTS (`.ets`) + worktree 안전** — `.ets` 수집, 중첩 `worktrees/` 디렉토리는 스킵해 linked worktree가 중복 인덱싱되지 않습니다.
44
+
45
+ ---
46
+
30
47
  ## 왜 codebeacon인가?
31
48
 
32
49
  AI 코딩 세션을 새로 열 때마다 어시스턴트는 백지 상태에서 시작합니다. 라우트 구조도, 서비스 레이어도, 엔티티 모델도, 마이크로서비스 간 호출 관계도 모릅니다. 결국 세션마다 파일을 붙여넣고, 구조를 설명하고, 컨텍스트를 다시 세팅하는 데 상당한 시간을 씁니다.
@@ -94,8 +111,9 @@ codebeacon sync # 이후 실행은 설정 파일 기반
94
111
  | Ruby | Rails |
95
112
  | PHP | Laravel |
96
113
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
97
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj`에서 `ProjectReference` + `PackageReference` 파싱 |
98
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) 수집 — extractor는 framework-agnostic |
99
117
 
100
118
  ---
101
119
 
@@ -314,12 +332,21 @@ codebeacon scan . --obsidian-dir <path> # Obsidian 볼트를 커스텀 위치
314
332
  codebeacon scan . --semantic # 구조화 주석 시맨틱 추출 활성화 (Javadoc/JSDoc/docstring 참조)
315
333
  codebeacon scan . --list-only # 프레임워크 감지만, 추출 제외
316
334
  codebeacon scan /workspace --deep-dive # 프로젝트별 + 통합 워크스페이스 출력
335
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
336
+ # gitignore-스타일 패턴, 반복 가능
337
+ # .codebeaconignore / .gitignore 와 병합
317
338
 
318
339
  # 설정 기반 모드
319
340
  codebeacon init [path] # codebeacon.yaml 자동 생성
320
341
  codebeacon sync # codebeacon.yaml 기반 실행 (신규 워크스페이스 프로젝트 자동 추가)
321
342
  codebeacon sync --config <file> # 특정 설정 파일 사용
322
343
  codebeacon sync --no-rediscover # 신규 프로젝트 자동 추가 비활성화 (수동 큐레이션 모드)
344
+ codebeacon sync --exclude PATTERN # 동일 플래그 동일 의미
345
+
346
+ # PR / CI: 이 diff 가 실제로 무엇을 깰까?
347
+ codebeacon affected --base main # 변경 파일들의 업스트림 호출자 walk
348
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
349
+ codebeacon affected src/foo.py src/bar.py # 명시 경로 — git 없이도 동작
323
350
 
324
351
  # AI-시맨틱 보강 (LLM 작업은 에이전트가, 부기는 codebeacon이 담당)
325
352
  codebeacon semantic-prepare [--dir .codebeacon] [--max-tasks N] [--chunk-size N]
@@ -347,7 +374,8 @@ codebeacon merge-driver <base> <cur> <other> # `hook install` 후 git이 자동
347
374
 
348
375
  # 통합
349
376
  codebeacon serve [--dir .codebeacon] # MCP 서버 시작 (stdio)
350
- codebeacon install # Claude Code 스킬 설치
377
+ codebeacon install # Claude Code 스킬 설치 (user 스코프: ~/.claude/)
378
+ codebeacon install --project [PATH] # <PATH>/.claude/ 에 설치 (팀 공유, 레포 핀)
351
379
  codebeacon upgrade # pip 으로 업그레이드 + ~/.claude/skills/codebeacon/SKILL.md 갱신
352
380
  # (`--force` 로 editable 설치 환경에서도 강제 업그레이드)
353
381
  ```
@@ -1,46 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: codebeacon
3
- Version: 0.5.0
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-c-sharp>=0.23
24
- Requires-Dist: tree-sitter-go>=0.23
25
- Requires-Dist: tree-sitter-html>=0.23
26
- Requires-Dist: tree-sitter-java>=0.23
27
- Requires-Dist: tree-sitter-javascript>=0.23
28
- Requires-Dist: tree-sitter-kotlin>=0.23
29
- Requires-Dist: tree-sitter-php>=0.23
30
- Requires-Dist: tree-sitter-python>=0.23
31
- Requires-Dist: tree-sitter-ruby>=0.23
32
- Requires-Dist: tree-sitter-rust>=0.23
33
- Requires-Dist: tree-sitter-svelte>=0.23
34
- Requires-Dist: tree-sitter-swift>=0.0.1
35
- Requires-Dist: tree-sitter-typescript>=0.23
36
- Requires-Dist: tree-sitter>=0.23
37
- Provides-Extra: cluster
38
- Requires-Dist: graspologic>=1.0; extra == 'cluster'
39
- Provides-Extra: dev
40
- Requires-Dist: pytest-cov>=4.0; extra == 'dev'
41
- Requires-Dist: pytest>=7.0; extra == 'dev'
42
- Description-Content-Type: text/markdown
43
-
44
1
  <p align="center">
45
2
  <a href="https://github.com/Wandererer/codebeacon/blob/main/README.md"><img src="https://img.shields.io/badge/lang-English-blue" alt="English"></a>
46
3
  <a href="https://github.com/Wandererer/codebeacon/blob/main/README.ko.md"><img src="https://img.shields.io/badge/lang-한국어-red" alt="Korean"></a>
@@ -68,6 +25,23 @@ Description-Content-Type: text/markdown
68
25
 
69
26
  ---
70
27
 
28
+ ## What's new in 0.6.0
29
+
30
+ - **`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.
31
+ - **`.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.
32
+ - **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.
33
+ - **`--exclude PATTERN` flag** for `scan` / `sync`, plus automatic fallback to `.gitignore` when `.codebeaconignore` is absent.
34
+ - **`codebeacon install --project [PATH]`** — install the `/codebeacon` skill into `<PATH>/.claude/` instead of `~/.claude/`, so teams can pin a SKILL.md version per repo.
35
+ - **Wiki self-heals** — `--update` runs now prune `wiki/<project>/{controllers,services,entities,components}/*.md` files whose graph node no longer exists.
36
+ - **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.
37
+ - **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.
38
+ - **Hardened query** — `BeaconIndex` uses `casefold()` so German `ß`, Turkish `i/İ`, Greek `σ/ς`, and CJK labels round-trip correctly.
39
+ - **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.
40
+ - **`semantic-apply` zero-yield guard** — if every chunk archived 0 edges, the CLI exits 1 so CI catches silent LLM failures.
41
+ - **ArkTS (`.ets`) and worktree-safety** — `.ets` is collected; nested `worktrees/` dirs are skipped to stop double-counting linked worktrees.
42
+
43
+ ---
44
+
71
45
  ## Why codebeacon?
72
46
 
73
47
  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.
@@ -135,8 +109,9 @@ codebeacon sync # subsequent runs via config
135
109
  | Ruby | Rails |
136
110
  | PHP | Laravel |
137
111
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
138
- | C# | ASP.NET Core |
112
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` parsed for `ProjectReference` + `PackageReference` |
139
113
  | Swift | Vapor |
114
+ | ArkTS | `.ets` (HarmonyOS) collected — extractors framework-agnostic |
140
115
 
141
116
  ---
142
117
 
@@ -356,12 +331,21 @@ codebeacon scan . --obsidian-dir <path> # write Obsidian vault to custom locat
356
331
  codebeacon scan . --semantic # enable structured-comment semantic extraction (Javadoc/JSDoc/docstring refs)
357
332
  codebeacon scan . --list-only # detect frameworks only, don't extract
358
333
  codebeacon scan /workspace --deep-dive # per-project + combined workspace outputs
334
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
335
+ # repeatable gitignore-style patterns merged with
336
+ # .codebeaconignore / .gitignore
359
337
 
360
338
  # Config-driven mode
361
339
  codebeacon init [path] # auto-generate codebeacon.yaml
362
340
  codebeacon sync # run from codebeacon.yaml (auto-appends new workspace projects)
363
341
  codebeacon sync --config <file> # use a specific config file
364
342
  codebeacon sync --no-rediscover # don't auto-append newly added projects (hand-curated yaml mode)
343
+ codebeacon sync --exclude PATTERN # same flag, same semantics
344
+
345
+ # PR / CI: what does this diff actually break?
346
+ codebeacon affected --base main # walk upstream callers of every changed file
347
+ codebeacon affected --base origin/main --head HEAD --depth 4 --limit 200
348
+ codebeacon affected src/foo.py src/bar.py # explicit paths, no git needed
365
349
 
366
350
  # AI-semantic enrichment (the agent does the LLM work, codebeacon does the bookkeeping)
367
351
  codebeacon semantic-prepare [--dir .codebeacon] [--max-tasks N] [--chunk-size N]
@@ -390,7 +374,8 @@ codebeacon merge-driver <base> <cur> <other> # invoked by git after `hook insta
390
374
 
391
375
  # Integrations
392
376
  codebeacon serve [--dir .codebeacon] # start MCP server (stdio)
393
- codebeacon install # install Claude Code skill
377
+ codebeacon install # install Claude Code skill (user scope: ~/.claude/)
378
+ codebeacon install --project [PATH] # install into <PATH>/.claude/ (team-shared, repo-pinned)
394
379
  codebeacon upgrade # pip install --upgrade + refresh ~/.claude/skills/codebeacon/SKILL.md
395
380
  # (`--force` to upgrade even when installed in editable mode)
396
381
  ```