codebeacon 0.1.2__tar.gz → 0.1.3__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.1.3/.github/CODEOWNERS +1 -0
- codebeacon-0.1.3/.github/dependabot.yml +12 -0
- codebeacon-0.1.3/.github/workflows/release.yml +49 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/PKG-INFO +124 -42
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.de.md +120 -35
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.es.md +120 -35
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.fr.md +120 -35
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.ja.md +123 -41
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.ko.md +123 -41
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.md +123 -41
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.pt-BR.md +120 -35
- {codebeacon-0.1.2 → codebeacon-0.1.3}/README.zh-CN.md +123 -41
- codebeacon-0.1.3/codebeacon/__init__.py +1 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/cli.py +115 -85
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/config.py +0 -2
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/discover/detector.py +30 -16
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/export/mcp.py +3 -1
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/routes.py +1 -1
- {codebeacon-0.1.2 → codebeacon-0.1.3/codebeacon}/skill/SKILL.md +26 -25
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon.yaml.example +0 -1
- {codebeacon-0.1.2 → codebeacon-0.1.3}/pyproject.toml +1 -1
- codebeacon-0.1.2/codebeacon/__init__.py +0 -1
- {codebeacon-0.1.2 → codebeacon-0.1.3}/.cursorrules +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/.github/workflows/ci.yml +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/.gitignore +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/AGENTS.md +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/CLAUDE.md +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/LICENSE +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/__main__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/cache.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/common/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/common/filters.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/common/symbols.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/common/types.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/contextmap/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/contextmap/generator.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/discover/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/discover/scanner.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/export/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/export/obsidian.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/base.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/components.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/dependencies.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/entities.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/README.md +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/actix.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/angular.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/aspnet.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/django.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/express.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/fastapi.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/flask.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/gin.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/ktor.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/laravel.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/nestjs.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/rails.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/react.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/spring_boot.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/svelte.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/vapor.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/queries/vue.scm +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/semantic.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/extract/services.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/graph/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/graph/analyze.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/graph/build.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/graph/cluster.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/graph/enrich.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/wave.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/wiki/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/wiki/generator.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/wiki/index.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/codebeacon/wiki/templates.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/docs/TRANSLATION_STATUS.md +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/public-plan.md +0 -0
- {codebeacon-0.1.2/codebeacon → codebeacon-0.1.3}/skill/SKILL.md +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/skill/install.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/__init__.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/conftest.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/actix/main.rs +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/angular/app.component.ts +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/aspnet/UserController.cs +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/django/views.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/express/userRouter.js +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/fastapi/main.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/flask/app.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/gin/main.go +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/ktor/UserRoutes.kt +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/laravel/UserController.php +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/nestjs/user.controller.ts +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/rails/users_controller.rb +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/react/UserPage.tsx +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/spring_boot/UserController.java +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/sveltekit/+page.svelte +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/vapor/routes.swift +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/fixtures/vue/UserList.vue +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_discover.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_entities.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_filters.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_graph.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_resolve.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_routes.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_services.py +0 -0
- {codebeacon-0.1.2 → codebeacon-0.1.3}/tests/test_wiki.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @Wandererer
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Release to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
name: Build distribution
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
|
|
19
|
+
- name: Install build
|
|
20
|
+
run: pip install build
|
|
21
|
+
|
|
22
|
+
- name: Build package
|
|
23
|
+
run: python -m build
|
|
24
|
+
|
|
25
|
+
- name: Upload dist artifacts
|
|
26
|
+
uses: actions/upload-artifact@v4
|
|
27
|
+
with:
|
|
28
|
+
name: dist
|
|
29
|
+
path: dist/
|
|
30
|
+
|
|
31
|
+
publish:
|
|
32
|
+
name: Publish to PyPI
|
|
33
|
+
needs: build
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
environment:
|
|
36
|
+
name: pypi
|
|
37
|
+
url: https://pypi.org/project/codebeacon/
|
|
38
|
+
permissions:
|
|
39
|
+
id-token: write # Trusted Publishing (OIDC) — 비밀번호 불필요
|
|
40
|
+
|
|
41
|
+
steps:
|
|
42
|
+
- name: Download dist artifacts
|
|
43
|
+
uses: actions/download-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: dist
|
|
46
|
+
path: dist/
|
|
47
|
+
|
|
48
|
+
- name: Publish to PyPI
|
|
49
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codebeacon
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Source code AST analysis tool for AI context generation — unified multi-framework knowledge graph
|
|
5
5
|
Project-URL: Homepage, https://github.com/codebeacon/codebeacon
|
|
6
6
|
Project-URL: Repository, https://github.com/codebeacon/codebeacon
|
|
@@ -42,14 +42,14 @@ Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
|
42
42
|
Description-Content-Type: text/markdown
|
|
43
43
|
|
|
44
44
|
<p align="center">
|
|
45
|
-
<a href="https://github.com/
|
|
46
|
-
<a href="https://github.com/
|
|
47
|
-
<a href="https://github.com/
|
|
48
|
-
<a href="https://github.com/
|
|
49
|
-
<a href="https://github.com/
|
|
50
|
-
<a href="https://github.com/
|
|
51
|
-
<a href="https://github.com/
|
|
52
|
-
<a href="https://github.com/
|
|
45
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.md"><img src="https://img.shields.io/badge/lang-English-blue" alt="English"></a>
|
|
46
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.ko.md"><img src="https://img.shields.io/badge/lang-한국어-red" alt="Korean"></a>
|
|
47
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.ja.md"><img src="https://img.shields.io/badge/lang-日本語-green" alt="Japanese"></a>
|
|
48
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.zh-CN.md"><img src="https://img.shields.io/badge/lang-简体中文-orange" alt="Chinese"></a>
|
|
49
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.es.md"><img src="https://img.shields.io/badge/lang-Español-yellow" alt="Spanish"></a>
|
|
50
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.fr.md"><img src="https://img.shields.io/badge/lang-Français-blueviolet" alt="French"></a>
|
|
51
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.de.md"><img src="https://img.shields.io/badge/lang-Deutsch-lightgrey" alt="German"></a>
|
|
52
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.pt-BR.md"><img src="https://img.shields.io/badge/lang-Português_(BR)-brightgreen" alt="Portuguese (Brazil)"></a>
|
|
53
53
|
</p>
|
|
54
54
|
|
|
55
55
|
<h1 align="center">codebeacon</h1>
|
|
@@ -62,8 +62,8 @@ Description-Content-Type: text/markdown
|
|
|
62
62
|
<a href="https://pypi.org/project/codebeacon/"><img src="https://img.shields.io/pypi/v/codebeacon" alt="PyPI"></a>
|
|
63
63
|
<a href="https://pypi.org/project/codebeacon/"><img src="https://img.shields.io/pypi/pyversions/codebeacon" alt="Python"></a>
|
|
64
64
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License"></a>
|
|
65
|
-
<a href="https://github.com/
|
|
66
|
-
<a href="https://github.com/
|
|
65
|
+
<a href="https://github.com/Wandererer/codebeacon/stargazers"><img src="https://img.shields.io/github/stars/Wandererer/codebeacon" alt="GitHub Stars"></a>
|
|
66
|
+
<a href="https://github.com/Wandererer/codebeacon/commits/main"><img src="https://img.shields.io/github/last-commit/Wandererer/codebeacon" alt="Last Commit"></a>
|
|
67
67
|
</p>
|
|
68
68
|
|
|
69
69
|
---
|
|
@@ -81,8 +81,8 @@ Existing tools solve this partially. Route analyzers map your controllers but mi
|
|
|
81
81
|
## Key Features
|
|
82
82
|
|
|
83
83
|
- **Unified pipeline** — route/controller analysis + knowledge graph in one tool, no manual stitching
|
|
84
|
-
- **
|
|
85
|
-
- **Tree-sitter based** — structural AST parsing, not regex; all
|
|
84
|
+
- **24 frameworks, 9 languages** — Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, ASP.NET Core, Vapor, Ktor
|
|
85
|
+
- **Tree-sitter based** — structural AST parsing, not regex; all language grammars included out of the box
|
|
86
86
|
- **Two-pass DI resolution** — Pass 1 extracts local AST nodes; Pass 2 builds a global symbol table and resolves Interface → Implementation mappings that single-pass tools miss
|
|
87
87
|
- **Wave merge architecture** — files processed in parallel chunks, results merged globally; handles large monorepos without memory blowouts
|
|
88
88
|
- **Multiple output formats** — JSON knowledge graph, Markdown wiki, Obsidian vault, AI context maps, MCP server
|
|
@@ -117,11 +117,11 @@ codebeacon sync # subsequent runs via config
|
|
|
117
117
|
|----------|-----------|
|
|
118
118
|
| Java / Kotlin | Spring Boot, Ktor |
|
|
119
119
|
| Python | Django, FastAPI, Flask |
|
|
120
|
-
| JavaScript / TypeScript | Express, NestJS, React, Vue, Angular,
|
|
121
|
-
| Go | Gin |
|
|
120
|
+
| JavaScript / TypeScript | Express, Fastify, Koa, NestJS, React, Next.js, Vue, Nuxt, Angular, SvelteKit |
|
|
121
|
+
| Go | Gin, Echo, Fiber |
|
|
122
122
|
| Ruby | Rails |
|
|
123
123
|
| PHP | Laravel |
|
|
124
|
-
| Rust | Actix-Web |
|
|
124
|
+
| Rust | Actix-Web, Axum |
|
|
125
125
|
| C# | ASP.NET Core |
|
|
126
126
|
| Swift | Vapor |
|
|
127
127
|
|
|
@@ -150,37 +150,106 @@ codebeacon runs a two-pass extraction pipeline:
|
|
|
150
150
|
|
|
151
151
|
## Output Structure
|
|
152
152
|
|
|
153
|
-
After a scan,
|
|
153
|
+
After a scan, context map files are updated at the project root (existing user content is preserved) and the knowledge graph lands in `.codebeacon/`:
|
|
154
154
|
|
|
155
155
|
```
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
156
|
+
project-root/
|
|
157
|
+
CLAUDE.md ← AI context map (codebeacon block merged; user content kept)
|
|
158
|
+
.cursorrules ← Cursor IDE context (same merge strategy)
|
|
159
|
+
AGENTS.md ← OpenAI Agents / Codex context (same merge strategy)
|
|
160
|
+
.codebeacon/
|
|
161
|
+
beacon.json ← full knowledge graph (node-link JSON, queryable)
|
|
162
|
+
REPORT.md ← god nodes, surprising connections, hub files
|
|
163
|
+
wiki/
|
|
164
|
+
index.md ← global index (~200 tokens)
|
|
165
|
+
overview.md ← platform stats + cross-project connections
|
|
166
|
+
routes.md ← all routes table
|
|
167
|
+
cross-project/
|
|
168
|
+
connections.md ← cross-service edges
|
|
169
|
+
<project>/
|
|
170
|
+
index.md
|
|
171
|
+
routes.md
|
|
172
|
+
controllers/<Name>.md
|
|
173
|
+
services/<Name>.md
|
|
174
|
+
entities/<Name>.md
|
|
175
|
+
components/<Name>.md
|
|
176
|
+
obsidian/ ← Obsidian vault (one note per graph node)
|
|
176
177
|
```
|
|
177
178
|
|
|
178
179
|
---
|
|
179
180
|
|
|
181
|
+
## AI Integration
|
|
182
|
+
|
|
183
|
+
### Claude Code Skill (`/codebeacon`)
|
|
184
|
+
|
|
185
|
+
Install codebeacon as a Claude Code slash command:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
pip install codebeacon
|
|
189
|
+
codebeacon install
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
This copies `SKILL.md` to `~/.claude/skills/codebeacon/` and registers the `/codebeacon` trigger in `~/.claude/CLAUDE.md`. Restart your Claude Code session, then type `/codebeacon` to scan the current directory.
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
/codebeacon # scan current directory
|
|
196
|
+
/codebeacon /path/to/project # scan a specific path
|
|
197
|
+
/codebeacon sync # re-scan from codebeacon.yaml
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### MCP Server
|
|
201
|
+
|
|
202
|
+
Run codebeacon as a persistent MCP server so any MCP-compatible client can query your knowledge graph directly.
|
|
203
|
+
|
|
204
|
+
**Step 1 — scan your project:**
|
|
205
|
+
```bash
|
|
206
|
+
codebeacon scan .
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Step 2 — add to your MCP client config:**
|
|
210
|
+
|
|
211
|
+
**Claude Code** (`.claude.json` in project root or `~/.claude.json` globally):
|
|
212
|
+
```json
|
|
213
|
+
{
|
|
214
|
+
"mcpServers": {
|
|
215
|
+
"codebeacon": {
|
|
216
|
+
"command": "codebeacon",
|
|
217
|
+
"args": ["serve"]
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Cursor** (`~/.cursor/mcp.json`):
|
|
224
|
+
```json
|
|
225
|
+
{
|
|
226
|
+
"mcpServers": {
|
|
227
|
+
"codebeacon": {
|
|
228
|
+
"command": "codebeacon",
|
|
229
|
+
"args": ["serve", "--dir", "/path/to/.codebeacon"]
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Available MCP tools** once connected:
|
|
236
|
+
|
|
237
|
+
| Tool | Description |
|
|
238
|
+
|------|-------------|
|
|
239
|
+
| `beacon_wiki_index` | Global project overview (routes, services, entities count) |
|
|
240
|
+
| `beacon_wiki_article` | Read a specific wiki article by path |
|
|
241
|
+
| `beacon_query` | Search nodes by label substring |
|
|
242
|
+
| `beacon_path` | Shortest dependency path between two nodes |
|
|
243
|
+
| `beacon_blast_radius` | Upstream callers + downstream affected nodes |
|
|
244
|
+
| `beacon_routes` | List all HTTP routes, filterable by project |
|
|
245
|
+
| `beacon_services` | List all services/classes, filterable by project |
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
180
249
|
## Installation Options
|
|
181
250
|
|
|
182
251
|
```bash
|
|
183
|
-
pip install codebeacon # all
|
|
252
|
+
pip install codebeacon # all language grammars included
|
|
184
253
|
pip install codebeacon[cluster] # + Leiden community detection (graspologic)
|
|
185
254
|
pip install --upgrade codebeacon # upgrade to latest version with all dependencies
|
|
186
255
|
```
|
|
@@ -197,7 +266,7 @@ codebeacon scan <path> [options]
|
|
|
197
266
|
codebeacon scan . # current directory
|
|
198
267
|
codebeacon scan /workspace # workspace root (multi-project)
|
|
199
268
|
codebeacon scan . --update # incremental: only re-extract changed files
|
|
200
|
-
codebeacon scan . --wiki-only # regenerate wiki
|
|
269
|
+
codebeacon scan . --wiki-only # skip re-extraction, regenerate wiki/obsidian/context map from existing beacon.json
|
|
201
270
|
codebeacon scan . --obsidian-dir <path> # write Obsidian vault to custom location
|
|
202
271
|
codebeacon scan . --semantic # enable LLM semantic extraction
|
|
203
272
|
codebeacon scan . --list-only # detect frameworks only, don't extract
|
|
@@ -238,7 +307,6 @@ output:
|
|
|
238
307
|
dir: .codebeacon
|
|
239
308
|
wiki: true
|
|
240
309
|
obsidian: true
|
|
241
|
-
graph_html: true
|
|
242
310
|
context_map:
|
|
243
311
|
targets: [CLAUDE.md, .cursorrules, AGENTS.md]
|
|
244
312
|
|
|
@@ -251,6 +319,18 @@ semantic:
|
|
|
251
319
|
enabled: false # override with --semantic flag
|
|
252
320
|
```
|
|
253
321
|
|
|
322
|
+
### .codebeaconignore
|
|
323
|
+
|
|
324
|
+
Place a `.codebeaconignore` file at your project root to exclude directories or files from scanning. Syntax is the same as `.gitignore` — one pattern per line, `#` for comments.
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
# .codebeaconignore
|
|
328
|
+
generated/
|
|
329
|
+
build/
|
|
330
|
+
*.generated.ts
|
|
331
|
+
fixtures/
|
|
332
|
+
```
|
|
333
|
+
|
|
254
334
|
---
|
|
255
335
|
|
|
256
336
|
## How It Compares
|
|
@@ -287,14 +367,16 @@ All processing is local. Your source code never leaves your machine.
|
|
|
287
367
|
|
|
288
368
|
- Tree-sitter AST parsing runs entirely in-process
|
|
289
369
|
- No telemetry, no analytics, no network calls during normal operation
|
|
290
|
-
- The `--semantic` flag (disabled by default)
|
|
370
|
+
- The `--semantic` flag (disabled by default) activates two extraction modes:
|
|
371
|
+
1. **Structured comment parsing** (no LLM required) — infers cross-references from Javadoc (`@see`, `{@link}`), Python docstrings (`:class:`, `:func:`), and JSDoc (`@see`, `@param` types)
|
|
372
|
+
2. **LLM inference** (optional) — when `ANTHROPIC_API_KEY` is set, sends code excerpts to the Claude API for deeper relationship inference; only enable it explicitly
|
|
291
373
|
|
|
292
374
|
---
|
|
293
375
|
|
|
294
376
|
## Contributing
|
|
295
377
|
|
|
296
378
|
```bash
|
|
297
|
-
git clone https://github.com/
|
|
379
|
+
git clone https://github.com/Wandererer/codebeacon
|
|
298
380
|
cd codebeacon
|
|
299
381
|
pip install -e ".[dev,cluster]"
|
|
300
382
|
pytest
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<!-- translation-of: README.md | based-on-commit: initial -->
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<a href="https://github.com/
|
|
5
|
-
<a href="https://github.com/
|
|
6
|
-
<a href="https://github.com/
|
|
7
|
-
<a href="https://github.com/
|
|
8
|
-
<a href="https://github.com/
|
|
9
|
-
<a href="https://github.com/
|
|
10
|
-
<a href="https://github.com/
|
|
11
|
-
<a href="https://github.com/
|
|
4
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.md"><img src="https://img.shields.io/badge/lang-English-blue" alt="English"></a>
|
|
5
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.ko.md"><img src="https://img.shields.io/badge/lang-한국어-red" alt="Korean"></a>
|
|
6
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.ja.md"><img src="https://img.shields.io/badge/lang-日本語-green" alt="Japanese"></a>
|
|
7
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.zh-CN.md"><img src="https://img.shields.io/badge/lang-简体中文-orange" alt="Chinese"></a>
|
|
8
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.es.md"><img src="https://img.shields.io/badge/lang-Español-yellow" alt="Spanish"></a>
|
|
9
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.fr.md"><img src="https://img.shields.io/badge/lang-Français-blueviolet" alt="French"></a>
|
|
10
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.de.md"><img src="https://img.shields.io/badge/lang-Deutsch-lightgrey" alt="German"></a>
|
|
11
|
+
<a href="https://github.com/Wandererer/codebeacon/blob/main/README.pt-BR.md"><img src="https://img.shields.io/badge/lang-Português_(BR)-brightgreen" alt="Portuguese (Brazil)"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<h1 align="center">codebeacon</h1>
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
<a href="https://pypi.org/project/codebeacon/"><img src="https://img.shields.io/pypi/v/codebeacon" alt="PyPI"></a>
|
|
22
22
|
<a href="https://pypi.org/project/codebeacon/"><img src="https://img.shields.io/pypi/pyversions/codebeacon" alt="Python"></a>
|
|
23
23
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License"></a>
|
|
24
|
-
<a href="https://github.com/
|
|
25
|
-
<a href="https://github.com/
|
|
24
|
+
<a href="https://github.com/Wandererer/codebeacon/stargazers"><img src="https://img.shields.io/github/stars/Wandererer/codebeacon" alt="GitHub Stars"></a>
|
|
25
|
+
<a href="https://github.com/Wandererer/codebeacon/commits/main"><img src="https://img.shields.io/github/last-commit/Wandererer/codebeacon" alt="Last Commit"></a>
|
|
26
26
|
</p>
|
|
27
27
|
|
|
28
28
|
---
|
|
@@ -40,8 +40,8 @@ Bestehende Tools lösen dieses Problem nur teilweise. Route-Analyzer erfassen Ih
|
|
|
40
40
|
## Hauptfunktionen
|
|
41
41
|
|
|
42
42
|
- **Einheitliche Pipeline** — Routes-/Controller-Analyse + Knowledge Graph in einem Tool, kein manuelles Zusammenführen
|
|
43
|
-
- **
|
|
44
|
-
- **Auf tree-sitter basierend** — strukturelles AST-Parsing, keine Regex;
|
|
43
|
+
- **24 Frameworks, 9 Sprachen** — Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, ASP.NET Core, Vapor, Ktor
|
|
44
|
+
- **Auf tree-sitter basierend** — strukturelles AST-Parsing, keine Regex; Sprachgrammatiken standardmäßig enthalten
|
|
45
45
|
- **2-Pass DI-Auflösung** — Pass 1 extrahiert lokale AST-Knoten; Pass 2 baut eine globale Symboltabelle auf und löst Interface → Implementation-Mappings auf
|
|
46
46
|
- **Wave-Merge-Architektur** — Dateien werden in parallelen Chunks verarbeitet und global zusammengeführt; auch große Monorepos ohne Speicherprobleme
|
|
47
47
|
- **Mehrere Ausgabeformate** — JSON-Knowledge-Graph, Markdown-Wiki, Obsidian Vault, KI-Kontextkarten, MCP-Server
|
|
@@ -76,11 +76,11 @@ codebeacon sync # Folgeläufe über Konfiguration
|
|
|
76
76
|
|---------|-----------|
|
|
77
77
|
| Java / Kotlin | Spring Boot, Ktor |
|
|
78
78
|
| Python | Django, FastAPI, Flask |
|
|
79
|
-
| JavaScript / TypeScript | Express, NestJS, React, Vue, Angular,
|
|
80
|
-
| Go | Gin |
|
|
79
|
+
| JavaScript / TypeScript | Express, Fastify, Koa, NestJS, React, Next.js, Vue, Nuxt, Angular, SvelteKit |
|
|
80
|
+
| Go | Gin, Echo, Fiber |
|
|
81
81
|
| Ruby | Rails |
|
|
82
82
|
| PHP | Laravel |
|
|
83
|
-
| Rust | Actix-Web |
|
|
83
|
+
| Rust | Actix-Web, Axum |
|
|
84
84
|
| C# | ASP.NET Core |
|
|
85
85
|
| Swift | Vapor |
|
|
86
86
|
|
|
@@ -107,33 +107,114 @@ codebeacon führt eine 2-Pass-Extraktionspipeline aus:
|
|
|
107
107
|
|
|
108
108
|
## Ausgabestruktur
|
|
109
109
|
|
|
110
|
-
Nach dem Scan
|
|
110
|
+
Nach dem Scan werden Kontextkarten-Dateien im Projektstammverzeichnis aktualisiert (vorhandener Nutzerinhalt bleibt erhalten) und der Knowledge Graph in `.codebeacon/`:
|
|
111
111
|
|
|
112
112
|
```
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
113
|
+
project-root/
|
|
114
|
+
CLAUDE.md ← KI-Kontextkarte (codebeacon-Block eingemergt; Nutzerinhalt erhalten)
|
|
115
|
+
.cursorrules ← Cursor-IDE-Kontext (gleiche Merge-Strategie)
|
|
116
|
+
AGENTS.md ← OpenAI-Agents-/Codex-Kontext (gleiche Merge-Strategie)
|
|
117
|
+
.codebeacon/
|
|
118
|
+
beacon.json ← vollständiger Knowledge Graph (Node-Link-JSON, abfragbar)
|
|
119
|
+
REPORT.md ← God-Nodes, überraschende Verbindungen, Hub-Dateien
|
|
120
|
+
wiki/
|
|
121
|
+
index.md
|
|
122
|
+
overview.md
|
|
123
|
+
routes.md
|
|
124
|
+
<project>/
|
|
125
|
+
controllers/<Name>.md
|
|
126
|
+
services/<Name>.md
|
|
127
|
+
entities/<Name>.md
|
|
128
|
+
components/<Name>.md
|
|
129
|
+
obsidian/ ← Obsidian Vault (eine Notiz pro Graph-Knoten)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### .codebeaconignore
|
|
133
|
+
|
|
134
|
+
Platziere eine `.codebeaconignore`-Datei im Projektstammverzeichnis, um Verzeichnisse oder Dateien vom Scan auszuschließen. Gleiche Syntax wie `.gitignore` — ein Muster pro Zeile, `#` für Kommentare.
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
# .codebeaconignore
|
|
138
|
+
generated/
|
|
139
|
+
build/
|
|
140
|
+
*.generated.ts
|
|
141
|
+
fixtures/
|
|
129
142
|
```
|
|
130
143
|
|
|
131
144
|
---
|
|
132
145
|
|
|
146
|
+
## KI-Integration
|
|
147
|
+
|
|
148
|
+
### Claude Code Skill (`/codebeacon`)
|
|
149
|
+
|
|
150
|
+
Installiere codebeacon als Claude Code Slash-Befehl:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
pip install codebeacon
|
|
154
|
+
codebeacon install
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Dies kopiert `SKILL.md` nach `~/.claude/skills/codebeacon/` und registriert den `/codebeacon`-Trigger in `~/.claude/CLAUDE.md`. Starte deine Claude Code-Sitzung neu und tippe `/codebeacon`, um das aktuelle Verzeichnis zu scannen.
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
/codebeacon # aktuelles Verzeichnis scannen
|
|
161
|
+
/codebeacon /path/to/project # bestimmten Pfad scannen
|
|
162
|
+
/codebeacon sync # erneut aus codebeacon.yaml scannen
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### MCP-Server
|
|
166
|
+
|
|
167
|
+
Führe codebeacon als persistenten MCP-Server aus, damit jeder MCP-kompatible Client den Wissensgraphen direkt abfragen kann.
|
|
168
|
+
|
|
169
|
+
**Schritt 1 — Projekt scannen:**
|
|
170
|
+
```bash
|
|
171
|
+
codebeacon scan .
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Schritt 2 — zur MCP-Client-Konfiguration hinzufügen:**
|
|
175
|
+
|
|
176
|
+
**Claude Code** (`.claude.json` im Projektstamm oder global `~/.claude.json`):
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"mcpServers": {
|
|
180
|
+
"codebeacon": {
|
|
181
|
+
"command": "codebeacon",
|
|
182
|
+
"args": ["serve"]
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Cursor** (`~/.cursor/mcp.json`):
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"mcpServers": {
|
|
192
|
+
"codebeacon": {
|
|
193
|
+
"command": "codebeacon",
|
|
194
|
+
"args": ["serve", "--dir", "/path/to/.codebeacon"]
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Verfügbare MCP-Tools nach Verbindung:**
|
|
201
|
+
|
|
202
|
+
| Tool | Beschreibung |
|
|
203
|
+
|------|--------------|
|
|
204
|
+
| `beacon_wiki_index` | Globale Projektübersicht (Routen, Services, Entitäten) |
|
|
205
|
+
| `beacon_wiki_article` | Wiki-Artikel anhand eines Pfads lesen |
|
|
206
|
+
| `beacon_query` | Knoten per Teilstring-Suche finden |
|
|
207
|
+
| `beacon_path` | Kürzester Abhängigkeitspfad zwischen zwei Knoten |
|
|
208
|
+
| `beacon_blast_radius` | Upstream-Aufrufer und downstream betroffene Knoten |
|
|
209
|
+
| `beacon_routes` | Alle HTTP-Routen auflisten (nach Projekt filterbar) |
|
|
210
|
+
| `beacon_services` | Alle Services/Klassen auflisten (nach Projekt filterbar) |
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
133
214
|
## Installationsoptionen
|
|
134
215
|
|
|
135
216
|
```bash
|
|
136
|
-
pip install codebeacon #
|
|
217
|
+
pip install codebeacon # Sprachgrammatiken inklusive
|
|
137
218
|
pip install codebeacon[cluster] # + Leiden-Community-Erkennung (graspologic)
|
|
138
219
|
pip install --upgrade codebeacon # auf die neueste Version mit allen Abhängigkeiten aktualisieren
|
|
139
220
|
```
|
|
@@ -147,7 +228,7 @@ Java, Kotlin, Python, JavaScript, TypeScript, Go, Ruby, PHP, C#, Rust, Swift, HT
|
|
|
147
228
|
```bash
|
|
148
229
|
codebeacon scan . # aktuelles Verzeichnis
|
|
149
230
|
codebeacon scan . --update # inkrementell: nur geänderte Dateien
|
|
150
|
-
codebeacon scan . --wiki-only # Wiki
|
|
231
|
+
codebeacon scan . --wiki-only # Extraktion überspringen, Wiki/Obsidian/Kontext aus vorhandenem beacon.json regenerieren
|
|
151
232
|
codebeacon scan . --semantic # LLM-semantische Extraktion
|
|
152
233
|
codebeacon scan . --list-only # nur Frameworks erkennen
|
|
153
234
|
|
|
@@ -193,12 +274,16 @@ codebeacon install # Claude-Code-Skill installieren
|
|
|
193
274
|
|
|
194
275
|
Alle Verarbeitung erfolgt lokal. Ihr Quellcode verlässt niemals Ihren Rechner. Keine Telemetrie, keine Netzwerkaufrufe im normalen Betrieb.
|
|
195
276
|
|
|
277
|
+
- Das Flag `--semantic` (standardmäßig deaktiviert) aktiviert zwei Extraktionsmodi:
|
|
278
|
+
1. **Strukturierte Kommentaranalyse** (kein LLM erforderlich) — leitet Kreuzreferenzen aus Javadoc (`@see`, `{@link}`), Python-Docstrings (`:class:`, `:func:`) und JSDoc (`@see`, `@param`-Typen) ab
|
|
279
|
+
2. **LLM-Inferenz** (optional) — bei gesetztem `ANTHROPIC_API_KEY` werden Code-Ausschnitte an die Claude-API gesendet; nur bei expliziter Aktivierung verwenden
|
|
280
|
+
|
|
196
281
|
---
|
|
197
282
|
|
|
198
283
|
## Mitwirken
|
|
199
284
|
|
|
200
285
|
```bash
|
|
201
|
-
git clone https://github.com/
|
|
286
|
+
git clone https://github.com/Wandererer/codebeacon
|
|
202
287
|
cd codebeacon
|
|
203
288
|
pip install -e ".[dev,cluster]"
|
|
204
289
|
pytest
|