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.
- codebeacon-0.4.0/README.md → codebeacon-0.6.0/PKG-INFO +127 -2
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.de.md +34 -2
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.es.md +34 -2
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.fr.md +34 -2
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.ja.md +34 -2
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.ko.md +34 -2
- codebeacon-0.4.0/PKG-INFO → codebeacon-0.6.0/README.md +34 -45
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.pt-BR.md +34 -2
- {codebeacon-0.4.0 → codebeacon-0.6.0}/README.zh-CN.md +34 -2
- codebeacon-0.6.0/codebeacon/__init__.py +1 -0
- codebeacon-0.6.0/codebeacon/affected.py +190 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/cache.py +57 -6
- codebeacon-0.6.0/codebeacon/cli.py +779 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/safety.py +5 -0
- codebeacon-0.6.0/codebeacon/diagnostics.py +131 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/ignore.py +41 -12
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/scanner.py +98 -15
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/hooks.py +48 -4
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/mcp.py +93 -5
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/dependencies.py +97 -8
- codebeacon-0.6.0/codebeacon/extract/dotnet.py +161 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/build.py +147 -14
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/write.py +6 -1
- codebeacon-0.6.0/codebeacon/knowledge/__init__.py +16 -0
- codebeacon-0.6.0/codebeacon/knowledge/generator.py +513 -0
- codebeacon-0.6.0/codebeacon/pipeline.py +577 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/semantic_pipeline.py +245 -12
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/skill/SKILL.md +15 -1
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wave.py +56 -12
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/generator.py +106 -0
- codebeacon-0.6.0/pyproject.toml +120 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/skill/install.py +31 -9
- codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/pyproject.toml +4 -0
- codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/__init__.py +0 -0
- codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/main.py +17 -0
- codebeacon-0.6.0/tests/fixtures/integration_workspace/api-python/src/services.py +11 -0
- codebeacon-0.6.0/tests/fixtures/integration_workspace/web/package.json +7 -0
- codebeacon-0.6.0/tests/fixtures/integration_workspace/web/src/UserPage.tsx +14 -0
- codebeacon-0.6.0/tests/integration/__init__.py +0 -0
- codebeacon-0.6.0/tests/integration/test_full_pipeline.py +230 -0
- codebeacon-0.6.0/tests/test_affected.py +113 -0
- codebeacon-0.6.0/tests/test_affected_wiki.py +182 -0
- codebeacon-0.6.0/tests/test_cli_dispatch.py +43 -0
- codebeacon-0.6.0/tests/test_dependencies.py +93 -0
- codebeacon-0.6.0/tests/test_diagnostics.py +169 -0
- codebeacon-0.6.0/tests/test_discover.py +293 -0
- codebeacon-0.6.0/tests/test_dotnet.py +164 -0
- codebeacon-0.6.0/tests/test_graph.py +334 -0
- codebeacon-0.6.0/tests/test_knowledge.py +163 -0
- codebeacon-0.6.0/tests/test_known_bugs.py +340 -0
- codebeacon-0.6.0/tests/test_mcp_and_semantic.py +134 -0
- codebeacon-0.6.0/tests/test_optional_grammars.py +132 -0
- codebeacon-0.6.0/tests/test_pipeline_module.py +125 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_safety_and_writes.py +35 -0
- codebeacon-0.6.0/tests/test_scanner_sensitive.py +79 -0
- codebeacon-0.6.0/tests/test_semantic_hardening.py +117 -0
- codebeacon-0.6.0/tests/test_semantic_stats.py +210 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_wiki.py +55 -0
- codebeacon-0.4.0/codebeacon/__init__.py +0 -1
- codebeacon-0.4.0/codebeacon/cli.py +0 -1002
- codebeacon-0.4.0/pyproject.toml +0 -63
- codebeacon-0.4.0/tests/test_discover.py +0 -147
- codebeacon-0.4.0/tests/test_graph.py +0 -167
- {codebeacon-0.4.0 → codebeacon-0.6.0}/.cursorrules +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/CODEOWNERS +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/dependabot.yml +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/workflows/ci.yml +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/.github/workflows/release.yml +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/.gitignore +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/AGENTS.md +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/CLAUDE.md +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/LICENSE +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/__main__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/filters.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/symbols.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/common/types.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/config.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/contextmap/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/contextmap/generator.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/discover/detector.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/callflow_html.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/merge.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/obsidian.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/export/tree_html.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/base.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/components.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/entities.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/README.md +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/actix.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/angular.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/aspnet.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/django.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/express.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/fastapi.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/flask.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/gin.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/ktor.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/laravel.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/nestjs.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/rails.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/react.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/spring_boot.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/svelte.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/tauri.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/vapor.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/queries/vue.scm +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/routes.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/semantic.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/extract/services.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/analyze.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/cluster.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/graph/enrich.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/plugins/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/plugins/githooks.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/plugins/skills.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/index.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon/wiki/templates.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/codebeacon.yaml.example +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/docs/TRANSLATION_STATUS.md +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/public-plan.md +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/__init__.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/conftest.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/actix/main.rs +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/angular/app.component.ts +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/aspnet/UserController.cs +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/django/views.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/express/userRouter.js +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/fastapi/main.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/flask/app.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/gin/main.go +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/ktor/UserRoutes.kt +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/laravel/UserController.php +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/nestjs/user.controller.ts +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/rails/users_controller.rb +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/react/UserPage.tsx +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/spring_boot/UserController.java +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/sveltekit/+page.svelte +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/vapor/routes.swift +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/fixtures/vue/UserList.vue +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_entities.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_filters.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_plugins.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_resolve.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_routes.py +0 -0
- {codebeacon-0.4.0 → codebeacon-0.6.0}/tests/test_semantic.py +0 -0
- {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
|
```
|