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.
Files changed (107) hide show
  1. {codebeacon-0.1.8 → codebeacon-0.2.0}/PKG-INFO +1 -1
  2. codebeacon-0.2.0/codebeacon/__init__.py +1 -0
  3. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/export/obsidian.py +6 -0
  4. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/base.py +1 -1
  5. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/enrich.py +4 -2
  6. {codebeacon-0.1.8 → codebeacon-0.2.0}/pyproject.toml +1 -1
  7. codebeacon-0.1.8/codebeacon/__init__.py +0 -1
  8. {codebeacon-0.1.8 → codebeacon-0.2.0}/.cursorrules +0 -0
  9. {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/CODEOWNERS +0 -0
  10. {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/dependabot.yml +0 -0
  11. {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/workflows/ci.yml +0 -0
  12. {codebeacon-0.1.8 → codebeacon-0.2.0}/.github/workflows/release.yml +0 -0
  13. {codebeacon-0.1.8 → codebeacon-0.2.0}/.gitignore +0 -0
  14. {codebeacon-0.1.8 → codebeacon-0.2.0}/AGENTS.md +0 -0
  15. {codebeacon-0.1.8 → codebeacon-0.2.0}/CLAUDE.md +0 -0
  16. {codebeacon-0.1.8 → codebeacon-0.2.0}/LICENSE +0 -0
  17. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.de.md +0 -0
  18. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.es.md +0 -0
  19. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.fr.md +0 -0
  20. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.ja.md +0 -0
  21. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.ko.md +0 -0
  22. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.md +0 -0
  23. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.pt-BR.md +0 -0
  24. {codebeacon-0.1.8 → codebeacon-0.2.0}/README.zh-CN.md +0 -0
  25. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/__main__.py +0 -0
  26. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/cache.py +0 -0
  27. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/cli.py +0 -0
  28. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/__init__.py +0 -0
  29. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/filters.py +0 -0
  30. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/symbols.py +0 -0
  31. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/common/types.py +0 -0
  32. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/config.py +0 -0
  33. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/contextmap/__init__.py +0 -0
  34. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/contextmap/generator.py +0 -0
  35. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/discover/__init__.py +0 -0
  36. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/discover/detector.py +0 -0
  37. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/discover/scanner.py +0 -0
  38. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/export/__init__.py +0 -0
  39. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/export/mcp.py +0 -0
  40. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/__init__.py +0 -0
  41. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/components.py +0 -0
  42. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/dependencies.py +0 -0
  43. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/entities.py +0 -0
  44. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/README.md +0 -0
  45. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/actix.scm +0 -0
  46. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/angular.scm +0 -0
  47. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/aspnet.scm +0 -0
  48. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/django.scm +0 -0
  49. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/express.scm +0 -0
  50. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/fastapi.scm +0 -0
  51. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/flask.scm +0 -0
  52. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/gin.scm +0 -0
  53. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/ktor.scm +0 -0
  54. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/laravel.scm +0 -0
  55. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/nestjs.scm +0 -0
  56. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/rails.scm +0 -0
  57. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/react.scm +0 -0
  58. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/spring_boot.scm +0 -0
  59. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/svelte.scm +0 -0
  60. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/tauri.scm +0 -0
  61. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/vapor.scm +0 -0
  62. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/queries/vue.scm +0 -0
  63. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/routes.py +0 -0
  64. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/semantic.py +0 -0
  65. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/extract/services.py +0 -0
  66. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/__init__.py +0 -0
  67. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/analyze.py +0 -0
  68. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/build.py +0 -0
  69. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/graph/cluster.py +0 -0
  70. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/skill/SKILL.md +0 -0
  71. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wave.py +0 -0
  72. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/__init__.py +0 -0
  73. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/generator.py +0 -0
  74. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/index.py +0 -0
  75. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon/wiki/templates.py +0 -0
  76. {codebeacon-0.1.8 → codebeacon-0.2.0}/codebeacon.yaml.example +0 -0
  77. {codebeacon-0.1.8 → codebeacon-0.2.0}/docs/TRANSLATION_STATUS.md +0 -0
  78. {codebeacon-0.1.8 → codebeacon-0.2.0}/public-plan.md +0 -0
  79. {codebeacon-0.1.8 → codebeacon-0.2.0}/skill/SKILL.md +0 -0
  80. {codebeacon-0.1.8 → codebeacon-0.2.0}/skill/install.py +0 -0
  81. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/__init__.py +0 -0
  82. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/conftest.py +0 -0
  83. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/actix/main.rs +0 -0
  84. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/angular/app.component.ts +0 -0
  85. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/aspnet/UserController.cs +0 -0
  86. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/django/views.py +0 -0
  87. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/express/userRouter.js +0 -0
  88. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/fastapi/main.py +0 -0
  89. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/flask/app.py +0 -0
  90. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/gin/main.go +0 -0
  91. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/ktor/UserRoutes.kt +0 -0
  92. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/laravel/UserController.php +0 -0
  93. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/nestjs/user.controller.ts +0 -0
  94. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/rails/users_controller.rb +0 -0
  95. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/react/UserPage.tsx +0 -0
  96. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/spring_boot/UserController.java +0 -0
  97. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/sveltekit/+page.svelte +0 -0
  98. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/vapor/routes.swift +0 -0
  99. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/fixtures/vue/UserList.vue +0 -0
  100. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_discover.py +0 -0
  101. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_entities.py +0 -0
  102. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_filters.py +0 -0
  103. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_graph.py +0 -0
  104. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_resolve.py +0 -0
  105. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_routes.py +0 -0
  106. {codebeacon-0.1.8 → codebeacon-0.2.0}/tests/test_services.py +0 -0
  107. {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.1.8
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 True # can't determine — let it run
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 component/class nodes and scan their source for API calls
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.1.8"
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