codebeacon 0.4.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 (152) hide show
  1. codebeacon-0.4.0/README.md → codebeacon-0.6.0/PKG-INFO +127 -2
  2. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.de.md +34 -2
  3. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.es.md +34 -2
  4. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.fr.md +34 -2
  5. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.ja.md +34 -2
  6. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.ko.md +34 -2
  7. codebeacon-0.4.0/PKG-INFO → codebeacon-0.6.0/README.md +34 -45
  8. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.pt-BR.md +34 -2
  9. {codebeacon-0.4.0 → codebeacon-0.6.0}/README.zh-CN.md +34 -2
  10. codebeacon-0.6.0/codebeacon/__init__.py +1 -0
  11. codebeacon-0.6.0/codebeacon/affected.py +190 -0
  12. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/cache.py +57 -6
  13. codebeacon-0.6.0/codebeacon/cli.py +779 -0
  14. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/safety.py +5 -0
  15. codebeacon-0.6.0/codebeacon/diagnostics.py +131 -0
  16. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/ignore.py +41 -12
  17. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/scanner.py +98 -15
  18. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/hooks.py +48 -4
  19. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/mcp.py +93 -5
  20. {codebeacon-0.4.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.4.0 → codebeacon-0.6.0}/codebeacon/graph/build.py +147 -14
  23. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/write.py +6 -1
  24. codebeacon-0.6.0/codebeacon/knowledge/__init__.py +16 -0
  25. codebeacon-0.6.0/codebeacon/knowledge/generator.py +513 -0
  26. codebeacon-0.6.0/codebeacon/pipeline.py +577 -0
  27. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/semantic_pipeline.py +245 -12
  28. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/skill/SKILL.md +15 -1
  29. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wave.py +56 -12
  30. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/generator.py +106 -0
  31. codebeacon-0.6.0/pyproject.toml +120 -0
  32. {codebeacon-0.4.0 → codebeacon-0.6.0}/skill/install.py +31 -9
  33. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/pyproject.toml +4 -0
  34. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/__init__.py +0 -0
  35. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/main.py +17 -0
  36. codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/services.py +11 -0
  37. codebeacon-0.6.0/tests/fixtures/integration_workspace/web/package.json +7 -0
  38. codebeacon-0.6.0/tests/fixtures/integration_workspace/web/src/UserPage.tsx +14 -0
  39. codebeacon-0.6.0/tests/integration/__init__.py +0 -0
  40. codebeacon-0.6.0/tests/integration/test_full_pipeline.py +230 -0
  41. codebeacon-0.6.0/tests/test_affected.py +113 -0
  42. codebeacon-0.6.0/tests/test_affected_wiki.py +182 -0
  43. codebeacon-0.6.0/tests/test_cli_dispatch.py +43 -0
  44. codebeacon-0.6.0/tests/test_dependencies.py +93 -0
  45. codebeacon-0.6.0/tests/test_diagnostics.py +169 -0
  46. codebeacon-0.6.0/tests/test_discover.py +293 -0
  47. codebeacon-0.6.0/tests/test_dotnet.py +164 -0
  48. codebeacon-0.6.0/tests/test_graph.py +334 -0
  49. codebeacon-0.6.0/tests/test_knowledge.py +163 -0
  50. codebeacon-0.6.0/tests/test_known_bugs.py +340 -0
  51. codebeacon-0.6.0/tests/test_mcp_and_semantic.py +134 -0
  52. codebeacon-0.6.0/tests/test_optional_grammars.py +132 -0
  53. codebeacon-0.6.0/tests/test_pipeline_module.py +125 -0
  54. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_safety_and_writes.py +35 -0
  55. codebeacon-0.6.0/tests/test_scanner_sensitive.py +79 -0
  56. codebeacon-0.6.0/tests/test_semantic_hardening.py +117 -0
  57. codebeacon-0.6.0/tests/test_semantic_stats.py +210 -0
  58. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_wiki.py +55 -0
  59. codebeacon-0.4.0/codebeacon/__init__.py +0 -1
  60. codebeacon-0.4.0/codebeacon/cli.py +0 -1002
  61. codebeacon-0.4.0/pyproject.toml +0 -63
  62. codebeacon-0.4.0/tests/test_discover.py +0 -147
  63. codebeacon-0.4.0/tests/test_graph.py +0 -167
  64. {codebeacon-0.4.0 → codebeacon-0.6.0}/.cursorrules +0 -0
  65. {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/CODEOWNERS +0 -0
  66. {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/dependabot.yml +0 -0
  67. {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/workflows/ci.yml +0 -0
  68. {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/workflows/release.yml +0 -0
  69. {codebeacon-0.4.0 → codebeacon-0.6.0}/.gitignore +0 -0
  70. {codebeacon-0.4.0 → codebeacon-0.6.0}/AGENTS.md +0 -0
  71. {codebeacon-0.4.0 → codebeacon-0.6.0}/CLAUDE.md +0 -0
  72. {codebeacon-0.4.0 → codebeacon-0.6.0}/LICENSE +0 -0
  73. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/__main__.py +0 -0
  74. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/__init__.py +0 -0
  75. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/filters.py +0 -0
  76. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/symbols.py +0 -0
  77. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/types.py +0 -0
  78. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/config.py +0 -0
  79. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/contextmap/__init__.py +0 -0
  80. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/contextmap/generator.py +0 -0
  81. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/__init__.py +0 -0
  82. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/detector.py +0 -0
  83. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/__init__.py +0 -0
  84. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/callflow_html.py +0 -0
  85. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/merge.py +0 -0
  86. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/obsidian.py +0 -0
  87. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/tree_html.py +0 -0
  88. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/__init__.py +0 -0
  89. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/base.py +0 -0
  90. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/components.py +0 -0
  91. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/entities.py +0 -0
  92. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/README.md +0 -0
  93. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/actix.scm +0 -0
  94. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/angular.scm +0 -0
  95. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/aspnet.scm +0 -0
  96. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/django.scm +0 -0
  97. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/express.scm +0 -0
  98. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/fastapi.scm +0 -0
  99. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/flask.scm +0 -0
  100. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/gin.scm +0 -0
  101. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/ktor.scm +0 -0
  102. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/laravel.scm +0 -0
  103. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/nestjs.scm +0 -0
  104. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/rails.scm +0 -0
  105. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/react.scm +0 -0
  106. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/spring_boot.scm +0 -0
  107. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/svelte.scm +0 -0
  108. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/tauri.scm +0 -0
  109. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/vapor.scm +0 -0
  110. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/vue.scm +0 -0
  111. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/routes.py +0 -0
  112. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/semantic.py +0 -0
  113. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/services.py +0 -0
  114. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/__init__.py +0 -0
  115. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/analyze.py +0 -0
  116. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/cluster.py +0 -0
  117. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/enrich.py +0 -0
  118. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/plugins/__init__.py +0 -0
  119. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/plugins/githooks.py +0 -0
  120. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/plugins/skills.py +0 -0
  121. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/__init__.py +0 -0
  122. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/index.py +0 -0
  123. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/templates.py +0 -0
  124. {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon.yaml.example +0 -0
  125. {codebeacon-0.4.0 → codebeacon-0.6.0}/docs/TRANSLATION_STATUS.md +0 -0
  126. {codebeacon-0.4.0 → codebeacon-0.6.0}/public-plan.md +0 -0
  127. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/__init__.py +0 -0
  128. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/conftest.py +0 -0
  129. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/actix/main.rs +0 -0
  130. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/angular/app.component.ts +0 -0
  131. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/aspnet/UserController.cs +0 -0
  132. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/django/views.py +0 -0
  133. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/express/userRouter.js +0 -0
  134. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/fastapi/main.py +0 -0
  135. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/flask/app.py +0 -0
  136. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/gin/main.go +0 -0
  137. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/ktor/UserRoutes.kt +0 -0
  138. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/laravel/UserController.php +0 -0
  139. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/nestjs/user.controller.ts +0 -0
  140. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/rails/users_controller.rb +0 -0
  141. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/react/UserPage.tsx +0 -0
  142. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/spring_boot/UserController.java +0 -0
  143. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/sveltekit/+page.svelte +0 -0
  144. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/vapor/routes.swift +0 -0
  145. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/vue/UserList.vue +0 -0
  146. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_entities.py +0 -0
  147. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_filters.py +0 -0
  148. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_plugins.py +0 -0
  149. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_resolve.py +0 -0
  150. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_routes.py +0 -0
  151. {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_semantic.py +0 -0
  152. {codebeacon-0.4.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.
@@ -55,6 +165,10 @@ Existing tools solve this partially. Route analyzers map your controllers but mi
55
165
  - **Deep-dive mode** — `--deep-dive` generates per-project `.codebeacon/` + `CLAUDE.md` for every sub-project; running `codebeacon scan . --update` from any sub-project folder automatically syncs all projects in the workspace
56
166
  - **Workspace auto-rediscovery** — on every `scan` / `sync`, codebeacon re-scans the workspace and appends any new project folders to `codebeacon.yaml` before extraction, so freshly added sub-projects are never silently skipped; pass `--no-rediscover` to opt out for hand-curated configs
57
167
  - **Graphify-style semantic enrichment** — after AST extraction, the skill dispatches one parallel subagent per chunk to emit `{nodes, edges, hyperedges}` with 8 relation types (`calls`/`implements`/`references`/`cites`/`conceptually_related_to`/`shares_data_with`/`semantically_similar_to`/`rationale_for`) and EXTRACTED/INFERRED/AMBIGUOUS confidence; on Claude Code the subagent runs one tier below the host model (Opus→Sonnet, Sonnet→Haiku) so spend stays proportional to corpus size. AST owns code nodes; LLM only contributes `concept`/`document`/`paper` nodes. Existing 0.3.x archives replay through the new schema unchanged.
168
+ - **Knowledge mode (`codebeacon knowledge`)** — scan markdown notes (ADRs, meeting notes, retros, specs, research) and produce a single `KNOWLEDGE.md` next to `.codebeacon/`. Auto-classifies by filename and heading patterns, parses Obsidian YAML frontmatter and `[[backlinks]]`, surfaces a top-level "Key Decisions" + "Open Questions" rollup so an agent learns *why* the codebase looks the way it does. Pure heuristics — no LLM call.
169
+ - **Bare-path shortcut** — `codebeacon ./src` is now equivalent to `codebeacon scan ./src`; when the first argument isn't a registered subcommand, `scan` is auto-injected, so muscle memory from `graphify <path>` / `codesight <path>` works here too.
170
+ - **Hardened semantic pipeline** — `semantic-apply` guards against malformed agent JSONL (null/list/code-fence lines, missing fields), coerces broken `confidence_score` values (None/NaN/string/out-of-range) to a safe default, snapshots `beacon.json` → `beacon.json.bak` before merging so the AST baseline is always recoverable, and regenerates `beacon.html` + `callflow.html` so visual exports reflect the newly-inferred edges.
171
+ - **Sensitive file/dir guard** — `secrets/`, `credentials/`, `.ssh/`, `.aws/`, `.gnupg/` directories are always skipped; filenames matching credential patterns (`api_token`, `oauth_token`, `private_key`, `client_secret`; underscore *and* hyphen variants) are excluded from the source-file collector before they reach extractors.
58
172
 
59
173
  ---
60
174
 
@@ -88,8 +202,9 @@ codebeacon sync # subsequent runs via config
88
202
  | Ruby | Rails |
89
203
  | PHP | Laravel |
90
204
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
91
- | C# | ASP.NET Core |
205
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` parsed for `ProjectReference` + `PackageReference` |
92
206
  | Swift | Vapor |
207
+ | ArkTS | `.ets` (HarmonyOS) collected — extractors framework-agnostic |
93
208
 
94
209
  ---
95
210
 
@@ -309,12 +424,21 @@ codebeacon scan . --obsidian-dir <path> # write Obsidian vault to custom locat
309
424
  codebeacon scan . --semantic # enable structured-comment semantic extraction (Javadoc/JSDoc/docstring refs)
310
425
  codebeacon scan . --list-only # detect frameworks only, don't extract
311
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
312
430
 
313
431
  # Config-driven mode
314
432
  codebeacon init [path] # auto-generate codebeacon.yaml
315
433
  codebeacon sync # run from codebeacon.yaml (auto-appends new workspace projects)
316
434
  codebeacon sync --config <file> # use a specific config file
317
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
318
442
 
319
443
  # AI-semantic enrichment (the agent does the LLM work, codebeacon does the bookkeeping)
320
444
  codebeacon semantic-prepare [--dir .codebeacon] [--max-tasks N] [--chunk-size N]
@@ -343,7 +467,8 @@ codebeacon merge-driver <base> <cur> <other> # invoked by git after `hook insta
343
467
 
344
468
  # Integrations
345
469
  codebeacon serve [--dir .codebeacon] # start MCP server (stdio)
346
- 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)
347
472
  codebeacon upgrade # pip install --upgrade + refresh ~/.claude/skills/codebeacon/SKILL.md
348
473
  # (`--force` to upgrade even when installed in editable mode)
349
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.
@@ -57,6 +74,10 @@ Bestehende Tools lösen dieses Problem nur teilweise. Route-Analyzer erfassen Ih
57
74
  - **Deep-Dive-Modus** — `--deep-dive` erzeugt für jedes Sub-Projekt eigene `.codebeacon/` + `CLAUDE.md`; ein Update-Aufruf aus **beliebigem** Sub-Projekt-Ordner synchronisiert automatisch alle Projekte im Workspace
58
75
  - **Automatische Workspace-Wiedererkennung** — bei jedem `scan`/`sync` scannt codebeacon den Workspace erneut und hängt vor der Extraktion automatisch neue Projekte an die `codebeacon.yaml` an, sodass frisch hinzugefügte Sub-Projekte nicht unbemerkt übersprungen werden; `--no-rediscover` deaktiviert dies für handgepflegte Konfigurationen
59
76
  - **Graphify-artige Semantik-Anreicherung** — nach der AST-Extraktion dispatcht der Skill einen parallelen Subagenten pro Chunk, der vollständige Knowledge-Graph-Fragmente `{nodes, edges, hyperedges}` mit 8 Relationstypen (`calls`/`implements`/`references`/`cites`/`conceptually_related_to`/`shares_data_with`/`semantically_similar_to`/`rationale_for`) und Konfidenz EXTRACTED/INFERRED/AMBIGUOUS erzeugt; auf Claude Code läuft der Subagent eine Stufe unter dem Host-Modell (Opus→Sonnet, Sonnet→Haiku), damit die Kosten proportional zur Korpus-Größe bleiben. Code-Knoten gehören dem AST; das LLM darf nur `concept`/`document`/`paper`-Knoten beisteuern. Bestehende 0.3.x-Archive werden unter dem neuen Schema unverändert wiedergegeben
77
+ - **Wissensmodus (`codebeacon knowledge`)** — scannt Markdown-Notizen (ADRs, Meeting-Protokolle, Retros, Specs, Research) und erzeugt eine einzelne `KNOWLEDGE.md` neben `.codebeacon/`. Automatische Klassifizierung nach Dateinamen- und Überschriftenmustern, Parsing von Obsidian-YAML-Frontmatter und `[[backlinks]]`, sowie ein „Key Decisions" + „Open Questions"-Roll-up ganz oben, damit der Agent versteht, *warum* die Codebasis so aussieht, wie sie aussieht. Reine Heuristik — kein LLM-Aufruf
78
+ - **Pfad-Kurzform** — `codebeacon ./src` ist jetzt äquivalent zu `codebeacon scan ./src`; wenn das erste Argument kein registrierter Sub-Befehl ist, wird `scan` automatisch eingefügt — die `graphify <path>` / `codesight <path>` Muskelerinnerung funktioniert genauso
79
+ - **Gehärtete Semantik-Pipeline** — `semantic-apply` schützt vor fehlerhaftem Agent-JSONL (null/Listen/Code-Fence-Zeilen, fehlende Felder), coerced kaputte `confidence_score`-Werte (None/NaN/String/außerhalb des Bereichs) zu einem sicheren Default, snapshottet `beacon.json` → `beacon.json.bak` vor dem Merge, sodass die AST-Baseline jederzeit wiederherstellbar ist, und regeneriert `beacon.html` + `callflow.html`, damit die visuellen Exporte die neu inferierten Kanten reflektieren
80
+ - **Schutzschienen für sensible Dateien/Verzeichnisse** — `secrets/`, `credentials/`, `.ssh/`, `.aws/`, `.gnupg/` werden immer übersprungen; Dateinamen, die Credential-Mustern entsprechen (`api_token`, `oauth_token`, `private_key`, `client_secret`; Underscore- *und* Bindestrich-Varianten) werden vom Collector vor den Extraktoren ausgeschlossen
60
81
 
61
82
  ---
62
83
 
@@ -90,8 +111,9 @@ codebeacon sync # Folgeläufe über Konfiguration
90
111
  | Ruby | Rails |
91
112
  | PHP | Laravel |
92
113
  | Rust | Actix-Web, Axum |
93
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` für `ProjectReference` + `PackageReference` geparst |
94
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) eingesammelt — Extraktoren framework-agnostisch |
95
117
 
96
118
  ---
97
119
 
@@ -366,10 +388,19 @@ codebeacon scan . --wiki-only # Extraktion überspringen, Wiki/Obsid
366
388
  codebeacon scan . --semantic # Extraktion strukturierter Kommentar-Referenzen (Javadoc/JSDoc/docstring)
367
389
  codebeacon scan . --list-only # nur Frameworks erkennen
368
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
369
394
 
370
395
  codebeacon init [pfad] # codebeacon.yaml generieren
371
396
  codebeacon sync # von codebeacon.yaml ausführen (hängt neue Workspace-Projekte automatisch an)
372
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
373
404
 
374
405
  codebeacon query <Begriff> [--dir .codebeacon] [--limit N] # Knoten per Label-Substring suchen
375
406
  codebeacon path <Quelle> <Ziel> [--dir .codebeacon] # kürzester Abhängigkeitspfad
@@ -394,7 +425,8 @@ codebeacon semantic-apply [--dir .codebeacon]
394
425
  # (dauerhaftes Archiv). Results löschen, alles regenerieren.
395
426
 
396
427
  codebeacon serve [--dir .codebeacon] # MCP-Server starten (stdio)
397
- 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)
398
430
  codebeacon upgrade # pip-Upgrade + ~/.claude/skills/codebeacon/SKILL.md aktualisieren
399
431
  # (`--force` falls editable-Installation)
400
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.
@@ -57,6 +74,10 @@ Las herramientas existentes resuelven esto de forma parcial. Los analizadores de
57
74
  - **Modo Deep Dive** — `--deep-dive` genera `.codebeacon/` + `CLAUDE.md` propios para cada sub-proyecto; ejecutar el comando de actualización desde **cualquier** sub-proyecto sincroniza automáticamente todos los proyectos del workspace
58
75
  - **Auto-redescubrimiento del workspace** — en cada `scan`/`sync`, codebeacon re-escanea el workspace y añade automáticamente al `codebeacon.yaml` los nuevos proyectos antes de extraer, de modo que los sub-proyectos recién añadidos nunca se omitan silenciosamente; usa `--no-rediscover` para optar por el modo de configuración curada manualmente
59
76
  - **Enriquecimiento semántico estilo Graphify** — tras la extracción AST, el skill despacha un subagente paralelo por chunk para emitir fragmentos completos de grafo `{nodes, edges, hyperedges}` con 8 tipos de relación (`calls`/`implements`/`references`/`cites`/`conceptually_related_to`/`shares_data_with`/`semantically_similar_to`/`rationale_for`) y confianza EXTRACTED/INFERRED/AMBIGUOUS; en Claude Code el subagente se ejecuta un nivel por debajo del modelo host (Opus→Sonnet, Sonnet→Haiku) para mantener el gasto proporcional al tamaño del corpus. El AST posee los nodos de código; el LLM solo puede aportar nodos `concept`/`document`/`paper`. Los archivos 0.3.x existentes se replayean con el nuevo esquema sin cambios
77
+ - **Modo de conocimiento (`codebeacon knowledge`)** — escanea notas markdown (ADRs, actas de reunión, retros, specs, research) y produce un único `KNOWLEDGE.md` junto a `.codebeacon/`. Clasifica automáticamente por patrones de nombre de fichero y de encabezados, parsea frontmatter YAML de Obsidian y `[[backlinks]]`, y muestra arriba un resumen de "Key Decisions" + "Open Questions" para que el agente entienda *por qué* el código tiene la forma que tiene. Heurística pura — sin llamadas a LLM
78
+ - **Atajo de ruta** — `codebeacon ./src` ahora equivale a `codebeacon scan ./src`; cuando el primer argumento no es un subcomando registrado, `scan` se inyecta automáticamente, conservando la memoria muscular de `graphify <path>` / `codesight <path>`
79
+ - **Pipeline semántico endurecido** — `semantic-apply` protege contra JSONL del agente mal formado (líneas null/lista/code-fence, campos faltantes), coerce valores rotos de `confidence_score` (None/NaN/string/fuera de rango) a un default seguro, snapshotea `beacon.json` → `beacon.json.bak` antes del merge para que la baseline AST siempre sea recuperable, y regenera `beacon.html` + `callflow.html` para que los exports visuales reflejen los nuevos edges inferidos
80
+ - **Guardas de ficheros/directorios sensibles** — los directorios `secrets/`, `credentials/`, `.ssh/`, `.aws/`, `.gnupg/` se omiten siempre; los nombres de fichero que coincidan con patrones de credenciales (`api_token`, `oauth_token`, `private_key`, `client_secret`; variantes con guion bajo *y* guion) quedan excluidos del recolector antes de llegar a los extractores
60
81
 
61
82
  ---
62
83
 
@@ -90,8 +111,9 @@ codebeacon sync # ejecuciones posteriores vía configuraci
90
111
  | Ruby | Rails |
91
112
  | PHP | Laravel |
92
113
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
93
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` analizados para `ProjectReference` + `PackageReference` |
94
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) recogido — los extractores son agnósticos al framework |
95
117
 
96
118
  ---
97
119
 
@@ -364,10 +386,19 @@ codebeacon scan . --wiki-only # saltar extracción, regenerar wiki/o
364
386
  codebeacon scan . --semantic # extracción de referencias de comentarios estructurados (Javadoc/JSDoc/docstring)
365
387
  codebeacon scan . --list-only # solo detectar frameworks
366
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
367
392
 
368
393
  codebeacon init [ruta] # generar codebeacon.yaml
369
394
  codebeacon sync # ejecutar desde codebeacon.yaml (añade nuevos proyectos del workspace automáticamente)
370
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
371
402
 
372
403
  codebeacon query <término> [--dir .codebeacon] [--limit N] # buscar nodos por substring de etiqueta
373
404
  codebeacon path <origen> <destino> [--dir .codebeacon] # ruta más corta de dependencias
@@ -392,7 +423,8 @@ codebeacon semantic-apply [--dir .codebeacon]
392
423
  # durable). Borra los resultados y regenera todo.
393
424
 
394
425
  codebeacon serve [--dir .codebeacon] # servidor MCP (stdio)
395
- 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)
396
428
  codebeacon upgrade # pip upgrade + refrescar ~/.claude/skills/codebeacon/SKILL.md
397
429
  # (use `--force` si está instalado en modo editable)
398
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.
@@ -57,6 +74,10 @@ Les outils existants ne résolvent ce problème qu'en partie. Les analyseurs de
57
74
  - **Mode Deep Dive** — `--deep-dive` génère un `.codebeacon/` + `CLAUDE.md` propre à chaque sous-projet ; une commande de mise à jour depuis **n'importe quel** sous-projet synchronise automatiquement tous les projets du workspace
58
75
  - **Redécouverte automatique du workspace** — à chaque `scan`/`sync`, codebeacon réanalyse le workspace et ajoute automatiquement les nouveaux projets au `codebeacon.yaml` avant l'extraction, de sorte que les sous-projets fraîchement ajoutés ne soient jamais oubliés en silence ; utilisez `--no-rediscover` pour conserver une configuration yaml gérée manuellement
59
76
  - **Enrichissement sémantique façon Graphify** — après l'extraction AST, le skill dispatche un sous-agent parallèle par chunk pour émettre des fragments complets de knowledge graph `{nodes, edges, hyperedges}` avec 8 types de relations (`calls`/`implements`/`references`/`cites`/`conceptually_related_to`/`shares_data_with`/`semantically_similar_to`/`rationale_for`) et confiance EXTRACTED/INFERRED/AMBIGUOUS ; sur Claude Code, le sous-agent s'exécute un cran sous le modèle hôte (Opus→Sonnet, Sonnet→Haiku) pour garder le coût proportionnel à la taille du corpus. L'AST possède les nœuds de code ; le LLM ne peut contribuer que des nœuds `concept`/`document`/`paper`. Les archives 0.3.x existantes sont rejouées sous le nouveau schéma sans modification
77
+ - **Mode connaissance (`codebeacon knowledge`)** — scanne les notes markdown (ADRs, comptes-rendus, rétros, specs, research) et produit un unique `KNOWLEDGE.md` à côté de `.codebeacon/`. Classification automatique par motifs de nom de fichier et de titres, parsing du frontmatter YAML Obsidian et des `[[backlinks]]`, et un résumé « Key Decisions » + « Open Questions » en tête pour que l'agent comprenne *pourquoi* la base de code a cette forme. Pure heuristique — sans appel LLM
78
+ - **Raccourci chemin** — `codebeacon ./src` équivaut désormais à `codebeacon scan ./src` ; quand le premier argument n'est pas une sous-commande enregistrée, `scan` est injecté automatiquement, ce qui préserve la mémoire musculaire de `graphify <path>` / `codesight <path>`
79
+ - **Pipeline sémantique durci** — `semantic-apply` protège contre les lignes JSONL mal formées de l'agent (null/listes/code-fences/champs manquants), coerce les valeurs cassées de `confidence_score` (None/NaN/string/hors-plage) vers un défaut sûr, snapshote `beacon.json` → `beacon.json.bak` avant le merge pour que la baseline AST reste toujours récupérable, et régénère `beacon.html` + `callflow.html` pour que les exports visuels reflètent les nouvelles arêtes inférées
80
+ - **Garde-fous fichiers/dossiers sensibles** — les répertoires `secrets/`, `credentials/`, `.ssh/`, `.aws/`, `.gnupg/` sont toujours ignorés ; les noms de fichiers correspondant à des motifs de credentials (`api_token`, `oauth_token`, `private_key`, `client_secret` ; variantes avec underscore *et* tiret) sont exclus du collecteur avant d'atteindre les extracteurs
60
81
 
61
82
  ---
62
83
 
@@ -90,8 +111,9 @@ codebeacon sync # exécutions suivantes via la configuration
90
111
  | Ruby | Rails |
91
112
  | PHP | Laravel |
92
113
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
93
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`) ; `.sln` / `.csproj` / `.fsproj` / `.vbproj` analysés pour `ProjectReference` + `PackageReference` |
94
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) collecté — les extracteurs sont framework-agnostiques |
95
117
 
96
118
  ---
97
119
 
@@ -365,10 +387,19 @@ codebeacon scan . --wiki-only # ignorer la ré-extraction, régéné
365
387
  codebeacon scan . --semantic # extraction des références dans commentaires structurés (Javadoc/JSDoc/docstring)
366
388
  codebeacon scan . --list-only # détecter les frameworks uniquement
367
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
368
393
 
369
394
  codebeacon init [chemin] # générer codebeacon.yaml
370
395
  codebeacon sync # exécuter depuis codebeacon.yaml (ajoute automatiquement les nouveaux projets du workspace)
371
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
372
403
 
373
404
  codebeacon query <terme> [--dir .codebeacon] [--limit N] # rechercher des nœuds par sous-chaîne de label
374
405
  codebeacon path <source> <cible> [--dir .codebeacon] # chemin de dépendances le plus court
@@ -393,7 +424,8 @@ codebeacon semantic-apply [--dir .codebeacon]
393
424
  # durable). Supprime les résultats, régénère tout.
394
425
 
395
426
  codebeacon serve [--dir .codebeacon] # serveur MCP (stdio)
396
- 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)
397
429
  codebeacon upgrade # pip upgrade + rafraîchir ~/.claude/skills/codebeacon/SKILL.md
398
430
  # (`--force` si installé en mode éditable)
399
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 コーディングセッションを新しく開くたびに、アシスタントは白紙の状態から始まります。ルート構造も、サービス層も、エンティティモデルも、マイクロサービス間の呼び出し関係も把握していません。毎回のセッションでファイルを貼り付け、構造を説明し、コンテキストを再設定するために多くの時間を費やすことになります。
@@ -57,6 +74,10 @@ AI コーディングセッションを新しく開くたびに、アシスタ
57
74
  - **ディープダイブモード** — `--deep-dive` で各サブプロジェクトに専用の `.codebeacon/` + `CLAUDE.md` を生成;**どのサブプロジェクトからでも**更新コマンドを実行するだけでワークスペース全体が自動同期
58
75
  - **ワークスペース自動再検出** — `scan`/`sync` 実行のたびにワークスペースを再スキャンし、`codebeacon.yaml` に未登録の新規プロジェクトを自動追加してから抽出を開始するため、新しく追加されたサブプロジェクトが見落とされることがない;yaml を手動で管理している場合は `--no-rediscover` でオプトアウト可能
59
76
  - **Graphify 風のセマンティック強化** — AST 抽出後、スキルがチャンクごとに 1 つのサブエージェントを並列でディスパッチし、`{nodes, edges, hyperedges}` のフル知識グラフ断片を抽出。関係 8 種(`calls`/`implements`/`references`/`cites`/`conceptually_related_to`/`shares_data_with`/`semantically_similar_to`/`rationale_for`)+ 信頼度 3 段階(EXTRACTED/INFERRED/AMBIGUOUS)をサポート。Claude Code ではサブエージェントがホストモデルより 1 段階下(Opus→Sonnet、Sonnet→Haiku)に自動ダウングレードされ、コーパスサイズに比例したコストを維持。コードノードは AST が担当し、LLM は `concept`/`document`/`paper` ノードのみ寄与可能。既存の 0.3.x アーカイブは新スキーマで透過的にリプレイされる
77
+ - **ナレッジモード (`codebeacon knowledge`)** — マークダウンノート(ADR、議事録、ふりかえり、仕様、リサーチ)をスキャンし、`.codebeacon/` の隣に単一の `KNOWLEDGE.md` を生成。ファイル名・見出しパターンで自動分類、Obsidian の YAML frontmatter と `[[backlinks]]` をパースし、最上部に「Key Decisions」+「Open Questions」のロールアップを提示することで、コードベースが*なぜ*このような形になっているのかをエージェントに伝える。ヒューリスティックのみで LLM 呼び出しなし
78
+ - **パス省略形** — `codebeacon ./src` が `codebeacon scan ./src` と等価に。先頭引数が登録済みサブコマンドでない場合は `scan` が自動注入されるため、`graphify <path>` / `codesight <path>` の操作感もそのまま使える
79
+ - **強化された semantic パイプライン** — `semantic-apply` がエージェント JSONL の不正行(null/リスト/code-fence/必須フィールド欠落)をガードし、壊れた `confidence_score`(None/NaN/文字列/範囲外)を安全なデフォルトに coerce、merge 直前に `beacon.json` → `beacon.json.bak` をスナップショットして AST ベースラインを常に復元可能にし、`beacon.html`/`callflow.html` も再生成して新たに推論されたエッジが可視化に反映される
80
+ - **機密ファイル・ディレクトリのガード** — `secrets/`、`credentials/`、`.ssh/`、`.aws/`、`.gnupg/` を常にスキップ。credential パターン(`api_token`、`oauth_token`、`private_key`、`client_secret`; アンダースコア*と*ハイフン両方の変種)に一致するファイル名は、抽出器に到達する前にコレクタ段階で除外
60
81
 
61
82
  ---
62
83
 
@@ -90,8 +111,9 @@ codebeacon sync # 以降の実行は設定ファイルベ
90
111
  | Ruby | Rails |
91
112
  | PHP | Laravel |
92
113
  | Rust | Actix-Web、Axum、Tauri、Rocket、Warp |
93
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj` から `ProjectReference` + `PackageReference` を解析 |
94
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) を収集 — extractor は framework-agnostic |
95
117
 
96
118
  ---
97
119
 
@@ -270,12 +292,21 @@ codebeacon scan . --obsidian-dir <path> # Obsidian Vault をカスタム場所
270
292
  codebeacon scan . --semantic # 構造化コメント参照(Javadoc/JSDoc/docstring)の抽出を有効化
271
293
  codebeacon scan . --list-only # フレームワーク検出のみ、抽出なし
272
294
  codebeacon scan /workspace --deep-dive # プロジェクト別 + 統合ワークスペース出力
295
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
296
+ # 繰り返し可能な gitignore スタイルパターン
297
+ # .codebeaconignore / .gitignore とマージ
273
298
 
274
299
  # 設定ベースモード
275
300
  codebeacon init [path] # codebeacon.yaml を自動生成
276
301
  codebeacon sync # codebeacon.yaml ベースで実行 (新規ワークスペースプロジェクトを自動追加)
277
302
  codebeacon sync --config <file> # 特定の設定ファイルを使用
278
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 なしでも動作
279
310
 
280
311
  # ナレッジグラフのクエリ
281
312
  codebeacon query <term> [--dir .codebeacon] [--limit N] # ラベル部分文字列でノード検索
@@ -302,7 +333,8 @@ codebeacon semantic-apply [--dir .codebeacon]
302
333
 
303
334
  # インテグレーション
304
335
  codebeacon serve [--dir .codebeacon] # MCP サーバー起動 (stdio)
305
- codebeacon install # Claude Code スキルをインストール
336
+ codebeacon install # Claude Code スキルをインストール (user スコープ: ~/.claude/)
337
+ codebeacon install --project [PATH] # <PATH>/.claude/ にインストール (チーム共有・リポジトリ固定)
306
338
  codebeacon upgrade # pip で更新 + ~/.claude/skills/codebeacon/SKILL.md を再生成
307
339
  # (`--force` で editable インストール時も強制実行)
308
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 코딩 세션을 새로 열 때마다 어시스턴트는 백지 상태에서 시작합니다. 라우트 구조도, 서비스 레이어도, 엔티티 모델도, 마이크로서비스 간 호출 관계도 모릅니다. 결국 세션마다 파일을 붙여넣고, 구조를 설명하고, 컨텍스트를 다시 세팅하는 데 상당한 시간을 씁니다.
@@ -57,6 +74,10 @@ AI 코딩 세션을 새로 열 때마다 어시스턴트는 백지 상태에서
57
74
  - **딥다이브 모드** — `--deep-dive`는 각 서브 프로젝트에 개별 `.codebeacon/` + `CLAUDE.md`를 생성; 어느 서브 프로젝트 폴더에서든 `codebeacon scan . --update`를 실행하면 워크스페이스의 모든 프로젝트가 자동으로 업데이트됨
58
75
  - **워크스페이스 자동 재발견** — `scan`/`sync` 실행마다 워크스페이스를 다시 훑어 `codebeacon.yaml`에 없는 신규 프로젝트를 자동으로 yaml에 추가한 뒤 추출 시작 — 새로 추가된 서브 프로젝트가 조용히 누락되지 않음; 수동으로 yaml을 큐레이션 중이라면 `--no-rediscover`로 옵트아웃
59
76
  - **Graphify 스타일 semantic 보강** — AST 추출 후 스킬이 청크당 subagent 1개를 병렬로 띄워 `{nodes, edges, hyperedges}` 풀 그래프 단편을 추출. 관계 8종(`calls`/`implements`/`references`/`cites`/`conceptually_related_to`/`shares_data_with`/`semantically_similar_to`/`rationale_for`) + 신뢰도 3단계(EXTRACTED/INFERRED/AMBIGUOUS) 지원. Claude Code에서는 subagent가 호스트 모델보다 한 단계 아래(Opus→Sonnet, Sonnet→Haiku)로 자동 강등되어 코퍼스 크기에 비례한 비용 유지. 코드 노드는 AST 전담, LLM은 `concept`/`document`/`paper` 노드만 기여 가능. 기존 0.3.x 아카이브는 새 스키마로 그대로 replay됨
77
+ - **지식 모드 (`codebeacon knowledge`)** — 마크다운 노트(ADR, 회의록, 회고, 스펙, 리서치)를 스캔해서 `.codebeacon/` 옆에 단일 `KNOWLEDGE.md` 생성. 파일명·제목 패턴으로 자동 분류, Obsidian YAML frontmatter와 `[[backlinks]]` 파싱, 최상단에 "Key Decisions" + "Open Questions" 롤업을 제공해 코드베이스가 *왜* 이런 모습인지 에이전트에게 전달. 휴리스틱만 사용 — LLM 호출 없음
78
+ - **경로 단축 입력** — `codebeacon ./src`가 이제 `codebeacon scan ./src`와 동일. 첫 인자가 등록된 서브커맨드가 아니면 `scan`이 자동 주입되어, `graphify <path>` / `codesight <path>` 머슬 메모리도 그대로 동작
79
+ - **강화된 semantic 파이프라인** — `semantic-apply`가 agent JSONL의 비정상 라인(null/리스트/code-fence/필수 필드 누락)을 가드, 잘못된 `confidence_score`(None/NaN/문자열/범위 초과)를 안전 기본값으로 coerce, merge 직전 `beacon.json` → `beacon.json.bak` 스냅샷으로 AST 베이스라인 복구 가능 보장, `beacon.html`/`callflow.html`도 재생성해서 새 inferred 엣지가 시각화에 반영됨
80
+ - **민감 파일·디렉토리 가드** — `secrets/`, `credentials/`, `.ssh/`, `.aws/`, `.gnupg/` 디렉토리는 항상 스킵. credential 패턴(`api_token`, `oauth_token`, `private_key`, `client_secret`; 언더스코어 *및* 하이픈 변형) 파일명은 추출기에 도달하기 전 수집 단계에서 제외
60
81
 
61
82
  ---
62
83
 
@@ -90,8 +111,9 @@ codebeacon sync # 이후 실행은 설정 파일 기반
90
111
  | Ruby | Rails |
91
112
  | PHP | Laravel |
92
113
  | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
93
- | C# | ASP.NET Core |
114
+ | C# | ASP.NET Core, Blazor (`.razor`, `.cshtml`); `.sln` / `.csproj` / `.fsproj` / `.vbproj`에서 `ProjectReference` + `PackageReference` 파싱 |
94
115
  | Swift | Vapor |
116
+ | ArkTS | `.ets` (HarmonyOS) 수집 — extractor는 framework-agnostic |
95
117
 
96
118
  ---
97
119
 
@@ -310,12 +332,21 @@ codebeacon scan . --obsidian-dir <path> # Obsidian 볼트를 커스텀 위치
310
332
  codebeacon scan . --semantic # 구조화 주석 시맨틱 추출 활성화 (Javadoc/JSDoc/docstring 참조)
311
333
  codebeacon scan . --list-only # 프레임워크 감지만, 추출 제외
312
334
  codebeacon scan /workspace --deep-dive # 프로젝트별 + 통합 워크스페이스 출력
335
+ codebeacon scan . --exclude 'docs/**' --exclude '*.gen.ts'
336
+ # gitignore-스타일 패턴, 반복 가능
337
+ # .codebeaconignore / .gitignore 와 병합
313
338
 
314
339
  # 설정 기반 모드
315
340
  codebeacon init [path] # codebeacon.yaml 자동 생성
316
341
  codebeacon sync # codebeacon.yaml 기반 실행 (신규 워크스페이스 프로젝트 자동 추가)
317
342
  codebeacon sync --config <file> # 특정 설정 파일 사용
318
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 없이도 동작
319
350
 
320
351
  # AI-시맨틱 보강 (LLM 작업은 에이전트가, 부기는 codebeacon이 담당)
321
352
  codebeacon semantic-prepare [--dir .codebeacon] [--max-tasks N] [--chunk-size N]
@@ -343,7 +374,8 @@ codebeacon merge-driver <base> <cur> <other> # `hook install` 후 git이 자동
343
374
 
344
375
  # 통합
345
376
  codebeacon serve [--dir .codebeacon] # MCP 서버 시작 (stdio)
346
- codebeacon install # Claude Code 스킬 설치
377
+ codebeacon install # Claude Code 스킬 설치 (user 스코프: ~/.claude/)
378
+ codebeacon install --project [PATH] # <PATH>/.claude/ 에 설치 (팀 공유, 레포 핀)
347
379
  codebeacon upgrade # pip 으로 업그레이드 + ~/.claude/skills/codebeacon/SKILL.md 갱신
348
380
  # (`--force` 로 editable 설치 환경에서도 강제 업그레이드)
349
381
  ```