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