codebeacon 0.1.8__tar.gz → 0.2.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.1.8 → codebeacon-0.2.0}/PKG-INFO +1 -1
- codebeacon-0.2.0/codebeacon/__init__.py +1 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/export/obsidian.py +6 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/base.py +1 -1
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/enrich.py +4 -2
- {codebeacon-0.1.8 → codebeacon-0.2.0}/pyproject.toml +1 -1
- codebeacon-0.1.8/codebeacon/__init__.py +0 -1
- {codebeacon-0.1.8 → codebeacon-0.2.0}/.cursorrules +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/CODEOWNERS +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/dependabot.yml +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/workflows/ci.yml +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/workflows/release.yml +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/.gitignore +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/AGENTS.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/CLAUDE.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/LICENSE +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.de.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.es.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.fr.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.ja.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.ko.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.pt-BR.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/README.zh-CN.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/__main__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/cache.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/cli.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/filters.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/symbols.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/types.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/config.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/contextmap/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/contextmap/generator.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/discover/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/discover/detector.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/discover/scanner.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/export/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/export/mcp.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/components.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/dependencies.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/entities.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/README.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/actix.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/angular.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/aspnet.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/django.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/express.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/fastapi.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/flask.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/gin.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/ktor.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/laravel.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/nestjs.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/rails.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/react.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/spring_boot.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/svelte.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/tauri.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/vapor.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/vue.scm +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/routes.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/semantic.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/services.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/analyze.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/build.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/cluster.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/skill/SKILL.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wave.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/generator.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/index.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/templates.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon.yaml.example +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/docs/TRANSLATION_STATUS.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/public-plan.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/skill/SKILL.md +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/skill/install.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/__init__.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/conftest.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/actix/main.rs +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/angular/app.component.ts +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/aspnet/UserController.cs +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/django/views.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/express/userRouter.js +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/fastapi/main.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/flask/app.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/gin/main.go +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/ktor/UserRoutes.kt +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/laravel/UserController.php +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/nestjs/user.controller.ts +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/rails/users_controller.rb +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/react/UserPage.tsx +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/spring_boot/UserController.java +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/sveltekit/+page.svelte +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/vapor/routes.swift +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/vue/UserList.vue +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_discover.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_entities.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_filters.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_graph.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_resolve.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_routes.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_services.py +0 -0
- {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_wiki.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codebeacon
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.0"
|
|
@@ -74,6 +74,12 @@ def generate_obsidian_vault(
|
|
|
74
74
|
vault = Path(obsidian_dir) if obsidian_dir else Path(output_dir) / "obsidian"
|
|
75
75
|
vault.mkdir(parents=True, exist_ok=True)
|
|
76
76
|
|
|
77
|
+
# Clear stale notes from previous runs so step 5 can overwrite them
|
|
78
|
+
for svc_dir in vault.iterdir():
|
|
79
|
+
if svc_dir.is_dir() and not svc_dir.name.startswith("."):
|
|
80
|
+
for md in svc_dir.glob("*.md"):
|
|
81
|
+
md.unlink()
|
|
82
|
+
|
|
77
83
|
# Step 1 — basic note generation
|
|
78
84
|
_step1_generate_notes(G, communities, vault)
|
|
79
85
|
|
|
@@ -104,7 +104,7 @@ def is_grammar_allowed(query_name: str, lang: Language) -> bool:
|
|
|
104
104
|
# Reverse-lookup the grammar name from the cached Language object
|
|
105
105
|
gram_name = next((k for k, v in _LANG_CACHE.items() if v is lang), None)
|
|
106
106
|
if gram_name is None:
|
|
107
|
-
return
|
|
107
|
+
return False # can't determine — deny when allowlist exists
|
|
108
108
|
return gram_name in allowed
|
|
109
109
|
|
|
110
110
|
|
|
@@ -23,6 +23,8 @@ _API_URL_RES = [
|
|
|
23
23
|
re.compile(r'''(?:api|http|client|instance|request)\.\w+\b[^`"']*[`"']([^`"'$]+)[`"']'''),
|
|
24
24
|
re.compile(r'''url\s*[:=]\s*[`"']([^`"'$]+)[`"']'''),
|
|
25
25
|
re.compile(r'''["'](/api/[^"'`\s]+)["'`]'''),
|
|
26
|
+
# Rust reqwest: format!("{}/api/...", base_url)
|
|
27
|
+
re.compile(r'''"\{\}(/api/[^"'\s]+)'''),
|
|
26
28
|
]
|
|
27
29
|
_URL_LIKE = re.compile(r'^/[a-zA-Z]')
|
|
28
30
|
|
|
@@ -68,9 +70,9 @@ def enrich_http_api(G: nx.DiGraph) -> int:
|
|
|
68
70
|
if not route_map:
|
|
69
71
|
return 0
|
|
70
72
|
|
|
71
|
-
# Find
|
|
73
|
+
# Find nodes that may call external APIs and scan their source files
|
|
72
74
|
for node_id, data in G.nodes(data=True):
|
|
73
|
-
if data.get("type") not in ("component", "class"):
|
|
75
|
+
if data.get("type") not in ("component", "class", "route", "service"):
|
|
74
76
|
continue
|
|
75
77
|
src_proj = data.get("project", "")
|
|
76
78
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codebeacon"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "Source code AST analysis tool for AI context generation — unified multi-framework knowledge graph"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.8"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|