codebeacon 0.1.5__tar.gz → 0.1.7__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.5 → codebeacon-0.1.7}/PKG-INFO +1 -1
- codebeacon-0.1.7/codebeacon/__init__.py +1 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/contextmap/generator.py +24 -28
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/discover/detector.py +11 -1
- {codebeacon-0.1.5 → codebeacon-0.1.7}/pyproject.toml +1 -1
- codebeacon-0.1.5/codebeacon/__init__.py +0 -1
- {codebeacon-0.1.5 → codebeacon-0.1.7}/.cursorrules +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/.github/CODEOWNERS +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/.github/dependabot.yml +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/.github/workflows/ci.yml +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/.github/workflows/release.yml +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/.gitignore +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/AGENTS.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/CLAUDE.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/LICENSE +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.de.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.es.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.fr.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.ja.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.ko.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.pt-BR.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/README.zh-CN.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/__main__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/cache.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/cli.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/common/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/common/filters.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/common/symbols.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/common/types.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/config.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/contextmap/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/discover/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/discover/scanner.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/export/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/export/mcp.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/export/obsidian.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/base.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/components.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/dependencies.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/entities.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/README.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/actix.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/angular.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/aspnet.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/django.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/express.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/fastapi.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/flask.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/gin.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/ktor.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/laravel.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/nestjs.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/rails.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/react.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/spring_boot.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/svelte.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/tauri.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/vapor.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/queries/vue.scm +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/routes.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/semantic.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/extract/services.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/graph/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/graph/analyze.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/graph/build.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/graph/cluster.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/graph/enrich.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/skill/SKILL.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/wave.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/wiki/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/wiki/generator.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/wiki/index.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon/wiki/templates.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/codebeacon.yaml.example +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/docs/TRANSLATION_STATUS.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/public-plan.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/skill/SKILL.md +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/skill/install.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/__init__.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/conftest.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/actix/main.rs +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/angular/app.component.ts +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/aspnet/UserController.cs +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/django/views.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/express/userRouter.js +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/fastapi/main.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/flask/app.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/gin/main.go +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/ktor/UserRoutes.kt +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/laravel/UserController.php +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/nestjs/user.controller.ts +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/rails/users_controller.rb +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/react/UserPage.tsx +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/spring_boot/UserController.java +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/sveltekit/+page.svelte +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/vapor/routes.swift +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/fixtures/vue/UserList.vue +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_discover.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_entities.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_filters.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_graph.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_resolve.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_routes.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_services.py +0 -0
- {codebeacon-0.1.5 → codebeacon-0.1.7}/tests/test_wiki.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codebeacon
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
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.1.7"
|
|
@@ -273,40 +273,42 @@ def _build_content(
|
|
|
273
273
|
lines = [
|
|
274
274
|
"# CLAUDE.md",
|
|
275
275
|
"",
|
|
276
|
-
"##
|
|
276
|
+
"## Lookup strategy",
|
|
277
277
|
"",
|
|
278
|
-
">
|
|
279
|
-
">",
|
|
280
|
-
"> Skipping these steps and reading source files directly is a rule violation.",
|
|
278
|
+
"> This repo ships a pre-built index in `.codebeacon/`. Check it first —",
|
|
279
|
+
"> most \"where is X\" questions resolve in one read without a full-repo search.",
|
|
281
280
|
"",
|
|
282
281
|
]
|
|
283
282
|
elif tool == "cursor":
|
|
284
283
|
lines = [
|
|
285
284
|
"# Project Context",
|
|
286
285
|
"",
|
|
287
|
-
"## Lookup
|
|
286
|
+
"## Lookup strategy",
|
|
288
287
|
"",
|
|
289
|
-
">
|
|
288
|
+
"> A pre-built index lives in `.codebeacon/`. Use the 3-step lookup below",
|
|
289
|
+
"> before reaching for Glob or Grep.",
|
|
290
290
|
"",
|
|
291
291
|
]
|
|
292
292
|
else: # agents
|
|
293
293
|
lines = [
|
|
294
294
|
"# AGENTS.md",
|
|
295
295
|
"",
|
|
296
|
-
"##
|
|
296
|
+
"## Lookup strategy",
|
|
297
297
|
"",
|
|
298
|
-
">
|
|
298
|
+
"> A pre-built index lives in `.codebeacon/`. Follow the 3-step lookup below",
|
|
299
|
+
"> so parallel agents converge on the same answer.",
|
|
299
300
|
"",
|
|
300
301
|
]
|
|
301
302
|
|
|
302
303
|
# ── Step 1: wiki ──
|
|
303
304
|
lines += [
|
|
304
|
-
"### Step 1
|
|
305
|
+
"### Step 1 — codebeacon wiki",
|
|
306
|
+
"Routes, controllers, services, entities.",
|
|
305
307
|
"```",
|
|
306
|
-
f"{codebeacon_dir}/wiki/index.md ←
|
|
307
|
-
f"{codebeacon_dir}/wiki/{{project}}/controllers/{{Name}}.md ←
|
|
308
|
-
f"{codebeacon_dir}/wiki/{{project}}/services/{{Name}}.md ←
|
|
309
|
-
f"{codebeacon_dir}/wiki/{{project}}/entities/{{Name}}.md ←
|
|
308
|
+
f"{codebeacon_dir}/wiki/index.md ← global index",
|
|
309
|
+
f"{codebeacon_dir}/wiki/{{project}}/controllers/{{Name}}.md ← controller logic",
|
|
310
|
+
f"{codebeacon_dir}/wiki/{{project}}/services/{{Name}}.md ← service methods",
|
|
311
|
+
f"{codebeacon_dir}/wiki/{{project}}/entities/{{Name}}.md ← data models",
|
|
310
312
|
f"{codebeacon_dir}/wiki/routes.md ← all API routes across projects",
|
|
311
313
|
"```",
|
|
312
314
|
"",
|
|
@@ -314,11 +316,9 @@ def _build_content(
|
|
|
314
316
|
|
|
315
317
|
# ── Step 2: obsidian ──
|
|
316
318
|
lines += [
|
|
317
|
-
"### Step 2
|
|
318
|
-
"
|
|
319
|
-
"
|
|
320
|
-
"",
|
|
321
|
-
f"Look up by class name — replace `{{project}}` with the relevant folder:",
|
|
319
|
+
"### Step 2 — obsidian notes",
|
|
320
|
+
"Class-level detail (methods, fields, incoming/outgoing edges) the wiki omits.",
|
|
321
|
+
"Look up by class name — replace `{project}` with the relevant folder:",
|
|
322
322
|
"```",
|
|
323
323
|
f"{obsidian_path}/{{project}}/{{ClassName}}.md",
|
|
324
324
|
"```",
|
|
@@ -351,21 +351,17 @@ def _build_content(
|
|
|
351
351
|
|
|
352
352
|
# ── Step 3 ──
|
|
353
353
|
lines += [
|
|
354
|
-
"### Step 3
|
|
355
|
-
"
|
|
356
|
-
"No directory exploration, no Glob scans, no broad Grep searches.",
|
|
354
|
+
"### Step 3 — source file",
|
|
355
|
+
"Open the paths surfaced by Steps 1–2.",
|
|
357
356
|
"",
|
|
358
357
|
]
|
|
359
358
|
|
|
360
359
|
if tool == "claude":
|
|
361
360
|
lines += [
|
|
362
|
-
"###
|
|
363
|
-
"
|
|
364
|
-
"
|
|
365
|
-
"
|
|
366
|
-
"- **DO NOT Read source files directly without checking Steps 1-2 first**",
|
|
367
|
-
"",
|
|
368
|
-
"Proceed to Step 3 only when Steps 1-2 are insufficient.",
|
|
361
|
+
"### Fall back to direct search",
|
|
362
|
+
"Reach for Glob, Grep, or the Explore agent when the index does not cover",
|
|
363
|
+
"what you need — new files, deep implementation details, or cross-cutting",
|
|
364
|
+
"searches that span projects.",
|
|
369
365
|
"",
|
|
370
366
|
]
|
|
371
367
|
|
|
@@ -228,6 +228,7 @@ _SKIP_DIRS = {
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
|
|
231
|
+
|
|
231
232
|
def _iter_subdirs(directory: Path) -> list[Path]:
|
|
232
233
|
"""Return immediate subdirectories, skipping common non-project dirs."""
|
|
233
234
|
try:
|
|
@@ -268,13 +269,22 @@ def discover_projects(paths: list[str]) -> list[ProjectInfo]:
|
|
|
268
269
|
# Level 2: if a subdir has no signature itself, scan its children
|
|
269
270
|
# (e.g. WaveLog/server, aptscore/frontend, murmur/landing)
|
|
270
271
|
subprojects: list[ProjectInfo] = []
|
|
272
|
+
seen_paths: set[str] = set()
|
|
271
273
|
for subdir in _iter_subdirs(single_path):
|
|
272
274
|
if _has_project_signature(subdir):
|
|
273
275
|
subprojects.append(_build_project_info(subdir, multi=True))
|
|
276
|
+
seen_paths.add(str(subdir))
|
|
277
|
+
# Scan children for embedded sub-projects with their own signature
|
|
278
|
+
# (e.g. Tauri: desktop/ has svelte.config.js + desktop/src-tauri/ has Cargo.toml)
|
|
279
|
+
for nested in _iter_subdirs(subdir):
|
|
280
|
+
if str(nested) not in seen_paths and _has_project_signature(nested):
|
|
281
|
+
subprojects.append(_build_project_info(nested, multi=True))
|
|
282
|
+
seen_paths.add(str(nested))
|
|
274
283
|
else:
|
|
275
284
|
for nested in _iter_subdirs(subdir):
|
|
276
|
-
if _has_project_signature(nested):
|
|
285
|
+
if str(nested) not in seen_paths and _has_project_signature(nested):
|
|
277
286
|
subprojects.append(_build_project_info(nested, multi=True))
|
|
287
|
+
seen_paths.add(str(nested))
|
|
278
288
|
|
|
279
289
|
if subprojects:
|
|
280
290
|
return subprojects
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codebeacon"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.7"
|
|
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.5"
|
|
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
|
|
File without changes
|