codebeacon 0.1.4__tar.gz → 0.1.5__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.4 → codebeacon-0.1.5}/PKG-INFO +3 -3
  2. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.de.md +1 -1
  3. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.es.md +2 -2
  4. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.fr.md +2 -2
  5. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.ja.md +2 -2
  6. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.ko.md +2 -2
  7. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.md +2 -2
  8. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.pt-BR.md +2 -2
  9. {codebeacon-0.1.4 → codebeacon-0.1.5}/README.zh-CN.md +2 -2
  10. codebeacon-0.1.5/codebeacon/__init__.py +1 -0
  11. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/discover/detector.py +7 -4
  12. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/base.py +1 -0
  13. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/components.py +1 -0
  14. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/dependencies.py +7 -0
  15. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/entities.py +76 -0
  16. codebeacon-0.1.5/codebeacon/extract/queries/tauri.scm +62 -0
  17. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/routes.py +51 -0
  18. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/services.py +33 -0
  19. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/skill/SKILL.md +2 -2
  20. {codebeacon-0.1.4 → codebeacon-0.1.5}/pyproject.toml +1 -1
  21. codebeacon-0.1.4/codebeacon/__init__.py +0 -1
  22. {codebeacon-0.1.4 → codebeacon-0.1.5}/.cursorrules +0 -0
  23. {codebeacon-0.1.4 → codebeacon-0.1.5}/.github/CODEOWNERS +0 -0
  24. {codebeacon-0.1.4 → codebeacon-0.1.5}/.github/dependabot.yml +0 -0
  25. {codebeacon-0.1.4 → codebeacon-0.1.5}/.github/workflows/ci.yml +0 -0
  26. {codebeacon-0.1.4 → codebeacon-0.1.5}/.github/workflows/release.yml +0 -0
  27. {codebeacon-0.1.4 → codebeacon-0.1.5}/.gitignore +0 -0
  28. {codebeacon-0.1.4 → codebeacon-0.1.5}/AGENTS.md +0 -0
  29. {codebeacon-0.1.4 → codebeacon-0.1.5}/CLAUDE.md +0 -0
  30. {codebeacon-0.1.4 → codebeacon-0.1.5}/LICENSE +0 -0
  31. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/__main__.py +0 -0
  32. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/cache.py +0 -0
  33. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/cli.py +0 -0
  34. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/common/__init__.py +0 -0
  35. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/common/filters.py +0 -0
  36. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/common/symbols.py +0 -0
  37. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/common/types.py +0 -0
  38. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/config.py +0 -0
  39. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/contextmap/__init__.py +0 -0
  40. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/contextmap/generator.py +0 -0
  41. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/discover/__init__.py +0 -0
  42. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/discover/scanner.py +0 -0
  43. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/export/__init__.py +0 -0
  44. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/export/mcp.py +0 -0
  45. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/export/obsidian.py +0 -0
  46. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/__init__.py +0 -0
  47. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/README.md +0 -0
  48. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/actix.scm +0 -0
  49. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/angular.scm +0 -0
  50. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/aspnet.scm +0 -0
  51. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/django.scm +0 -0
  52. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/express.scm +0 -0
  53. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/fastapi.scm +0 -0
  54. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/flask.scm +0 -0
  55. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/gin.scm +0 -0
  56. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/ktor.scm +0 -0
  57. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/laravel.scm +0 -0
  58. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/nestjs.scm +0 -0
  59. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/rails.scm +0 -0
  60. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/react.scm +0 -0
  61. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/spring_boot.scm +0 -0
  62. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/svelte.scm +0 -0
  63. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/vapor.scm +0 -0
  64. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/queries/vue.scm +0 -0
  65. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/extract/semantic.py +0 -0
  66. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/graph/__init__.py +0 -0
  67. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/graph/analyze.py +0 -0
  68. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/graph/build.py +0 -0
  69. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/graph/cluster.py +0 -0
  70. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/graph/enrich.py +0 -0
  71. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/wave.py +0 -0
  72. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/wiki/__init__.py +0 -0
  73. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/wiki/generator.py +0 -0
  74. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/wiki/index.py +0 -0
  75. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon/wiki/templates.py +0 -0
  76. {codebeacon-0.1.4 → codebeacon-0.1.5}/codebeacon.yaml.example +0 -0
  77. {codebeacon-0.1.4 → codebeacon-0.1.5}/docs/TRANSLATION_STATUS.md +0 -0
  78. {codebeacon-0.1.4 → codebeacon-0.1.5}/public-plan.md +0 -0
  79. {codebeacon-0.1.4 → codebeacon-0.1.5}/skill/SKILL.md +0 -0
  80. {codebeacon-0.1.4 → codebeacon-0.1.5}/skill/install.py +0 -0
  81. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/__init__.py +0 -0
  82. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/conftest.py +0 -0
  83. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/actix/main.rs +0 -0
  84. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/angular/app.component.ts +0 -0
  85. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/aspnet/UserController.cs +0 -0
  86. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/django/views.py +0 -0
  87. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/express/userRouter.js +0 -0
  88. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/fastapi/main.py +0 -0
  89. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/flask/app.py +0 -0
  90. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/gin/main.go +0 -0
  91. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/ktor/UserRoutes.kt +0 -0
  92. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/laravel/UserController.php +0 -0
  93. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/nestjs/user.controller.ts +0 -0
  94. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/rails/users_controller.rb +0 -0
  95. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/react/UserPage.tsx +0 -0
  96. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/spring_boot/UserController.java +0 -0
  97. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/sveltekit/+page.svelte +0 -0
  98. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/vapor/routes.swift +0 -0
  99. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/fixtures/vue/UserList.vue +0 -0
  100. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_discover.py +0 -0
  101. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_entities.py +0 -0
  102. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_filters.py +0 -0
  103. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_graph.py +0 -0
  104. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_resolve.py +0 -0
  105. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_routes.py +0 -0
  106. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_services.py +0 -0
  107. {codebeacon-0.1.4 → codebeacon-0.1.5}/tests/test_wiki.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codebeacon
3
- Version: 0.1.4
3
+ Version: 0.1.5
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
@@ -81,7 +81,7 @@ 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
- - **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
84
+ - **27 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, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
85
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
@@ -122,7 +122,7 @@ codebeacon sync # subsequent runs via config
122
122
  | Go | Gin, Echo, Fiber |
123
123
  | Ruby | Rails |
124
124
  | PHP | Laravel |
125
- | Rust | Actix-Web, Axum |
125
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
126
126
  | C# | ASP.NET Core |
127
127
  | Swift | Vapor |
128
128
 
@@ -40,7 +40,7 @@ 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
- - **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
43
+ - **27 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, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
44
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
@@ -40,7 +40,7 @@ Las herramientas existentes resuelven esto de forma parcial. Los analizadores de
40
40
  ## Características principales
41
41
 
42
42
  - **Pipeline unificado** — análisis de rutas/controladores + grafo de conocimiento en una sola herramienta
43
- - **24 frameworks, 9 lenguajes** — 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
43
+ - **27 frameworks, 9 lenguajes** — Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
44
44
  - **Basado en tree-sitter** — análisis AST estructural, no expresiones regulares; gramáticas de lenguaje incluidas por defecto
45
45
  - **Resolución DI en 2 pasos** — Pass 1 extrae nodos AST locales; Pass 2 construye una tabla de símbolos global y resuelve los mapeos Interface → Implementation
46
46
  - **Arquitectura Wave merge** — archivos procesados en chunks paralelos y fusionados globalmente; maneja grandes monorepos sin problemas de memoria
@@ -81,7 +81,7 @@ codebeacon sync # ejecuciones posteriores vía configuraci
81
81
  | Go | Gin, Echo, Fiber |
82
82
  | Ruby | Rails |
83
83
  | PHP | Laravel |
84
- | Rust | Actix-Web, Axum |
84
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
85
85
  | C# | ASP.NET Core |
86
86
  | Swift | Vapor |
87
87
 
@@ -40,7 +40,7 @@ Les outils existants ne résolvent ce problème qu'en partie. Les analyseurs de
40
40
  ## Fonctionnalités principales
41
41
 
42
42
  - **Pipeline unifié** — analyse routes/contrôleurs + knowledge graph en un seul outil
43
- - **24 frameworks, 9 langages** — 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
43
+ - **27 frameworks, 9 langages** — Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
44
44
  - **Basé sur tree-sitter** — analyse AST structurelle, pas de regex ; grammaires de langage incluses par défaut
45
45
  - **Résolution DI en 2 passes** — Pass 1 extrait les nœuds AST locaux ; Pass 2 construit une table de symboles globale et résout les mappings Interface → Implementation
46
46
  - **Architecture Wave merge** — fichiers traités en chunks parallèles puis fusionnés globalement ; gère les grands monorepos sans problème mémoire
@@ -81,7 +81,7 @@ codebeacon sync # exécutions suivantes via la configuration
81
81
  | Go | Gin, Echo, Fiber |
82
82
  | Ruby | Rails |
83
83
  | PHP | Laravel |
84
- | Rust | Actix-Web, Axum |
84
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
85
85
  | C# | ASP.NET Core |
86
86
  | Swift | Vapor |
87
87
 
@@ -40,7 +40,7 @@ AI コーディングセッションを新しく開くたびに、アシスタ
40
40
  ## 主な機能
41
41
 
42
42
  - **統合パイプライン** — ルート/コントローラー解析 + ナレッジグラフを 1 つのツールで、手動接続不要
43
- - **24 フレームワーク、9 言語** — 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
43
+ - **27 フレームワーク、9 言語** — Spring Boot、NestJS、Django、FastAPI、Flask、Rails、Express、Fastify、Koa、React、Next.js、Vue、Nuxt、Angular、SvelteKit、Gin、Echo、Fiber、Laravel、Actix-Web、Axum、Tauri、Rocket、Warp、ASP.NET Core、Vapor、Ktor
44
44
  - **tree-sitter ベース** — 正規表現ではなく構造的 AST パース;言語グラマーをデフォルトで同梱
45
45
  - **2 パス DI 解決** — Pass 1 でローカル AST ノードを抽出、Pass 2 でグローバルシンボルテーブルを構築して Interface → Implementation のマッピングを解決
46
46
  - **Wave マージアーキテクチャ** — ファイルを並列チャンクで処理して結果をグローバルにマージ;大規模モノレポでもメモリ問題なし
@@ -81,7 +81,7 @@ codebeacon sync # 以降の実行は設定ファイルベ
81
81
  | Go | Gin、Echo、Fiber |
82
82
  | Ruby | Rails |
83
83
  | PHP | Laravel |
84
- | Rust | Actix-Web、Axum |
84
+ | Rust | Actix-Web、Axum、Tauri、Rocket、Warp |
85
85
  | C# | ASP.NET Core |
86
86
  | Swift | Vapor |
87
87
 
@@ -40,7 +40,7 @@ AI 코딩 세션을 새로 열 때마다 어시스턴트는 백지 상태에서
40
40
  ## 주요 기능
41
41
 
42
42
  - **통합 파이프라인** — 라우트/컨트롤러 분석 + 지식 그래프를 하나의 도구로, 수동 연결 불필요
43
- - **24개 프레임워크, 9개 언어** — 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
43
+ - **27개 프레임워크, 9개 언어** — Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
44
44
  - **tree-sitter 기반** — 정규식이 아닌 구조적 AST 파싱; 언어 그래머 기본 포함
45
45
  - **2-패스 DI 해결** — Pass 1에서 로컬 AST 노드 추출, Pass 2에서 전역 심볼 테이블로 Interface → Implementation 매핑 해결
46
46
  - **Wave 병합 아키텍처** — 파일을 병렬 청크로 처리 후 전역 병합; 대형 모노레포도 메모리 폭발 없이 처리
@@ -81,7 +81,7 @@ codebeacon sync # 이후 실행은 설정 파일 기반
81
81
  | Go | Gin, Echo, Fiber |
82
82
  | Ruby | Rails |
83
83
  | PHP | Laravel |
84
- | Rust | Actix-Web, Axum |
84
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
85
85
  | C# | ASP.NET Core |
86
86
  | Swift | Vapor |
87
87
 
@@ -38,7 +38,7 @@ Existing tools solve this partially. Route analyzers map your controllers but mi
38
38
  ## Key Features
39
39
 
40
40
  - **Unified pipeline** — route/controller analysis + knowledge graph in one tool, no manual stitching
41
- - **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
41
+ - **27 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, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
42
42
  - **Tree-sitter based** — structural AST parsing, not regex; all language grammars included out of the box
43
43
  - **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
44
44
  - **Wave merge architecture** — files processed in parallel chunks, results merged globally; handles large monorepos without memory blowouts
@@ -79,7 +79,7 @@ codebeacon sync # subsequent runs via config
79
79
  | Go | Gin, Echo, Fiber |
80
80
  | Ruby | Rails |
81
81
  | PHP | Laravel |
82
- | Rust | Actix-Web, Axum |
82
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
83
83
  | C# | ASP.NET Core |
84
84
  | Swift | Vapor |
85
85
 
@@ -40,7 +40,7 @@ As ferramentas existentes resolvem isso apenas parcialmente. Analisadores de rot
40
40
  ## Principais funcionalidades
41
41
 
42
42
  - **Pipeline unificado** — análise de rotas/controladores + knowledge graph em uma só ferramenta, sem junção manual
43
- - **24 frameworks, 9 linguagens** — 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
43
+ - **27 frameworks, 9 linguagens** — Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor
44
44
  - **Baseado em tree-sitter** — análise AST estrutural, não regex; gramáticas de linguagem incluídas por padrão
45
45
  - **Resolução DI em 2 passos** — Pass 1 extrai nós AST locais; Pass 2 constrói uma tabela de símbolos global e resolve mapeamentos Interface → Implementation
46
46
  - **Arquitetura Wave merge** — arquivos processados em chunks paralelos e mesclados globalmente; lida com grandes monorepos sem problemas de memória
@@ -81,7 +81,7 @@ codebeacon sync # execuções seguintes via configuração
81
81
  | Go | Gin, Echo, Fiber |
82
82
  | Ruby | Rails |
83
83
  | PHP | Laravel |
84
- | Rust | Actix-Web, Axum |
84
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
85
85
  | C# | ASP.NET Core |
86
86
  | Swift | Vapor |
87
87
 
@@ -40,7 +40,7 @@
40
40
  ## 核心功能
41
41
 
42
42
  - **统一流水线** — 路由/控制器分析 + 知识图谱集于一体,无需手动拼接
43
- - **24 个框架,9 种语言** — 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
43
+ - **27 个框架,9 种语言** — Spring Boot、NestJS、Django、FastAPI、Flask、Rails、Express、Fastify、Koa、React、Next.js、Vue、Nuxt、Angular、SvelteKit、Gin、Echo、Fiber、Laravel、Actix-Web、Axum、Tauri、Rocket、Warp、ASP.NET Core、Vapor、Ktor
44
44
  - **基于 tree-sitter** — 结构化抽象语法树解析,而非正则表达式;语言语法默认内置
45
45
  - **两阶段依赖注入解析** — Pass 1 提取本地 AST 节点;Pass 2 构建全局符号表,解析单阶段工具遗漏的接口→实现映射
46
46
  - **Wave 合并架构** — 文件以并行块处理后全局合并;大型单仓库也不会出现内存问题
@@ -81,7 +81,7 @@ codebeacon sync # 后续运行通过配置文件驱动
81
81
  | Go | Gin、Echo、Fiber |
82
82
  | Ruby | Rails |
83
83
  | PHP | Laravel |
84
- | Rust | Actix-Web、Axum |
84
+ | Rust | Actix-Web、Axum、Tauri、Rocket、Warp |
85
85
  | C# | ASP.NET Core |
86
86
  | Swift | Vapor |
87
87
 
@@ -0,0 +1 @@
1
+ __version__ = "0.1.5"
@@ -66,8 +66,11 @@ _GO_MOD_REFINEMENTS: list[tuple[str, str]] = [
66
66
  ]
67
67
 
68
68
  _CARGO_REFINEMENTS: list[tuple[str, str]] = [
69
- ("axum", "axum"),
70
- ("actix-web", "actix"),
69
+ ("tauri", "tauri"),
70
+ ("axum", "axum"),
71
+ ("actix-web", "actix"),
72
+ ("rocket", "rocket"),
73
+ ("warp", "warp"),
71
74
  ]
72
75
 
73
76
  _BUILD_GRADLE_KOTLIN_REFINEMENTS: list[tuple[str, str]] = [
@@ -108,7 +111,7 @@ def _refine_go_framework(project_dir: Path) -> str:
108
111
  for pattern, fw in _GO_MOD_REFINEMENTS:
109
112
  if pattern in content:
110
113
  return fw
111
- return "gin" # most common Go web framework default
114
+ return "go"
112
115
 
113
116
 
114
117
  def _refine_rust_framework(project_dir: Path) -> str:
@@ -116,7 +119,7 @@ def _refine_rust_framework(project_dir: Path) -> str:
116
119
  for pattern, fw in _CARGO_REFINEMENTS:
117
120
  if pattern in content:
118
121
  return fw
119
- return "actix"
122
+ return "rust"
120
123
 
121
124
 
122
125
  def _refine_gradle_framework(project_dir: Path) -> tuple[str, str]:
@@ -63,6 +63,7 @@ QUERY_GRAMMAR_ALLOWLIST: dict[str, frozenset[str]] = {
63
63
  "laravel": frozenset({"php"}),
64
64
  "aspnet": frozenset({"csharp"}),
65
65
  "actix": frozenset({"rust"}),
66
+ "tauri": frozenset({"rust"}),
66
67
  "vapor": frozenset({"swift"}),
67
68
  }
68
69
 
@@ -29,6 +29,7 @@ from codebeacon.extract.base import (
29
29
  _FW_TO_QUERY: dict[str, str] = {
30
30
  "react": "react",
31
31
  "nextjs": "react",
32
+ "node": "react",
32
33
  "vue": "vue",
33
34
  "nuxt": "vue",
34
35
  "sveltekit": "svelte",
@@ -35,6 +35,9 @@ _FW_TO_QUERY: dict[str, str] = {
35
35
  "fastapi": "fastapi",
36
36
  "django": "django",
37
37
  "flask": "flask",
38
+ "tornado": "flask",
39
+ "aiohttp": "flask",
40
+ "python": "fastapi",
38
41
  "gin": "gin",
39
42
  "echo": "gin",
40
43
  "fiber": "gin",
@@ -45,10 +48,14 @@ _FW_TO_QUERY: dict[str, str] = {
45
48
  "actix": "actix",
46
49
  "axum": "actix",
47
50
  "rust": "actix",
51
+ "tauri": "tauri",
52
+ "rocket": "actix",
53
+ "warp": "actix",
48
54
  "vapor": "vapor",
49
55
  "ktor": "ktor",
50
56
  "vue": "vue",
51
57
  "nuxt": "vue",
58
+ "node": "express",
52
59
  "sveltekit": "svelte",
53
60
  "angular": "angular",
54
61
  }
@@ -37,6 +37,9 @@ _FW_TO_QUERY: dict[str, str] = {
37
37
  "fastapi": "fastapi",
38
38
  "django": "django",
39
39
  "flask": "flask",
40
+ "tornado": "flask",
41
+ "aiohttp": "flask",
42
+ "python": "fastapi",
40
43
  "gin": "gin",
41
44
  "echo": "gin",
42
45
  "fiber": "gin",
@@ -47,8 +50,12 @@ _FW_TO_QUERY: dict[str, str] = {
47
50
  "actix": "actix",
48
51
  "axum": "actix",
49
52
  "rust": "actix",
53
+ "tauri": "tauri",
54
+ "rocket": "actix",
55
+ "warp": "actix",
50
56
  "vapor": "vapor",
51
57
  "ktor": "ktor",
58
+ # Frontend-only frameworks intentionally omitted from entities (no ORM).
52
59
  }
53
60
 
54
61
  # GORM struct tag parser: `gorm:"column:name;primaryKey"`
@@ -95,6 +102,7 @@ def extract_entities(file_path: str, framework: str) -> list[EntityInfo]:
95
102
  "laravel": _interpret_laravel,
96
103
  "aspnet": _interpret_aspnet,
97
104
  "actix": _interpret_rust,
105
+ "tauri": _interpret_tauri,
98
106
  "vapor": _interpret_vapor,
99
107
  "ktor": _interpret_ktor,
100
108
  "react": _interpret_noop,
@@ -573,3 +581,71 @@ def _interpret_ktor(
573
581
  ))
574
582
 
575
583
  return entities
584
+
585
+
586
+ def _interpret_tauri(
587
+ file_path: str, matches: list, framework: str,
588
+ ) -> list[EntityInfo]:
589
+ """Tauri: structs with #[derive(Serialize/Deserialize)] as IPC payload types.
590
+
591
+ Attributes and struct_items are siblings in tree-sitter-rust. We first
592
+ collect #[derive(...)] attributes containing Serialize or Deserialize,
593
+ record their end-lines, then pair each struct that starts right after.
594
+ """
595
+ _TAURI_ENTITY_TRAITS = frozenset({"Serialize", "Deserialize"})
596
+
597
+ # Pass 1: collect derive attributes with Serialize/Deserialize
598
+ # end_line → set of detected traits
599
+ derive_ends: dict[int, set[str]] = {}
600
+ for _idx, caps in matches:
601
+ if "entity.derive_attr" in caps and "entity.derive_args" in caps:
602
+ attr_node = caps["entity.derive_attr"][0]
603
+ args_text = node_text(caps["entity.derive_args"][0])
604
+ traits = {t.strip() for t in args_text.strip("()").split(",")}
605
+ if _TAURI_ENTITY_TRAITS.intersection(traits):
606
+ derive_ends[attr_node.end_point[0]] = traits
607
+
608
+ if not derive_ends:
609
+ return []
610
+
611
+ # Pass 2: match structs that start right after a qualifying derive attribute
612
+ entities: dict[int, EntityInfo] = {}
613
+ class_ranges: dict[int, tuple[int, int]] = {}
614
+ for _idx, caps in matches:
615
+ if "entity.struct" in caps and "entity.struct_name" in caps:
616
+ struct_node = caps["entity.struct"][0]
617
+ start_line = struct_node.start_point[0]
618
+ # Check if preceded by a qualifying derive — allow 1-2 lines gap
619
+ # (there may be #[serde(...)] between derive and struct)
620
+ matched = False
621
+ for gap in range(3):
622
+ if (start_line - 1 - gap) in derive_ends:
623
+ matched = True
624
+ break
625
+ if not matched:
626
+ continue
627
+ name = node_text(caps["entity.struct_name"][0])
628
+ key = struct_node.start_byte
629
+ entities[key] = EntityInfo(
630
+ name=name,
631
+ table_name="",
632
+ source_file=file_path,
633
+ line=start_line + 1,
634
+ framework="tauri",
635
+ )
636
+ class_ranges[key] = (struct_node.start_byte, struct_node.end_byte)
637
+
638
+ # Pass 3: collect fields
639
+ for _idx, caps in matches:
640
+ if "entity.field" in caps and "entity.field_name" in caps:
641
+ field_node = caps["entity.field"][0]
642
+ fname = node_text(caps["entity.field_name"][0])
643
+ ftype = node_text(caps["entity.field_type"][0]) if "entity.field_type" in caps else ""
644
+ for key, (start, end) in class_ranges.items():
645
+ if start <= field_node.start_byte <= end:
646
+ entities[key].fields.append({
647
+ "name": fname, "type": ftype, "annotations": [],
648
+ })
649
+ break
650
+
651
+ return list(entities.values())
@@ -0,0 +1,62 @@
1
+ ; ── Tauri v2 (Rust) ──────────────────────────────────────────────────────────
2
+ ; Grammar: tree-sitter-rust
3
+ ;
4
+ ; In tree-sitter-rust, outer attributes (#[...]) are SIBLINGS of the
5
+ ; declaration they annotate, not children. The interpreter correlates
6
+ ; attribute_item + function_item/struct_item by source-file position.
7
+ ;
8
+ ; Captures:
9
+ ; @route.tauri_attr - #[tauri::command] attribute_item
10
+ ; @route.func - function_item following a command attribute
11
+ ; @route.func_name - command function name
12
+ ; @service.struct_name - struct name (managed state)
13
+ ; @service.struct - struct_item node
14
+ ; @entity.derive_attr - #[derive(...)] attribute_item
15
+ ; @entity.derive_args - token_tree inside derive(...)
16
+ ; @entity.struct - struct_item node
17
+ ; @entity.struct_name - struct name
18
+ ; @entity.field_name - struct field name
19
+ ; @entity.field_type - struct field type
20
+ ; @import.path - use declaration path
21
+
22
+ ; ── #[tauri::command] attribute (matched separately; interpreter pairs with next fn) ─
23
+
24
+ (attribute_item
25
+ (attribute
26
+ (scoped_identifier
27
+ path: (identifier) @_ns (#eq? @_ns "tauri")
28
+ name: (identifier) @_cmd (#eq? @_cmd "command")))) @route.tauri_attr
29
+
30
+ ; ── All function_item nodes (interpreter picks ones preceded by command attr) ─
31
+
32
+ (function_item
33
+ name: (identifier) @route.func_name) @route.func
34
+
35
+ ; ── #[derive(...)] attribute (interpreter checks for Serialize/Deserialize) ──
36
+
37
+ (attribute_item
38
+ (attribute
39
+ (identifier) @_derive (#eq? @_derive "derive")
40
+ arguments: (token_tree) @entity.derive_args)) @entity.derive_attr
41
+
42
+ ; ── Struct definitions ───────────────────────────────────────────────────────
43
+
44
+ (struct_item
45
+ name: (type_identifier) @entity.struct_name) @entity.struct
46
+
47
+ ; ── Struct fields ────────────────────────────────────────────────────────────
48
+
49
+ (field_declaration
50
+ name: (field_identifier) @entity.field_name
51
+ type: (_) @entity.field_type) @entity.field
52
+
53
+ ; ── Imports ──────────────────────────────────────────────────────────────────
54
+
55
+ (use_declaration
56
+ argument: (scoped_identifier) @import.path) @import.decl
57
+
58
+ (use_declaration
59
+ argument: (scoped_use_list) @import.path) @import.use_list
60
+
61
+ (use_declaration
62
+ argument: (identifier) @import.path) @import.simple
@@ -39,6 +39,9 @@ _FW_TO_QUERY: dict[str, str] = {
39
39
  "fastapi": "fastapi",
40
40
  "django": "django",
41
41
  "flask": "flask",
42
+ "tornado": "flask",
43
+ "aiohttp": "flask",
44
+ "python": "fastapi",
42
45
  "gin": "gin",
43
46
  "echo": "gin",
44
47
  "fiber": "gin",
@@ -49,10 +52,14 @@ _FW_TO_QUERY: dict[str, str] = {
49
52
  "actix": "actix",
50
53
  "axum": "actix",
51
54
  "rust": "actix",
55
+ "tauri": "tauri",
56
+ "rocket": "actix",
57
+ "warp": "actix",
52
58
  "vapor": "vapor",
53
59
  "ktor": "ktor",
54
60
  "vue": "vue",
55
61
  "nuxt": "vue",
62
+ "node": "express",
56
63
  "sveltekit": "svelte",
57
64
  "angular": "angular",
58
65
  }
@@ -153,6 +160,7 @@ def extract_routes(
153
160
  "laravel": _interpret_laravel,
154
161
  "aspnet": _interpret_aspnet,
155
162
  "actix": _interpret_actix,
163
+ "tauri": _interpret_tauri,
156
164
  "vapor": _interpret_vapor,
157
165
  "ktor": _interpret_ktor,
158
166
  "react": _interpret_react,
@@ -908,3 +916,46 @@ def _interpret_angular(file_path: str, matches: list, framework: str) -> list[Ro
908
916
  framework="angular",
909
917
  ))
910
918
  return routes
919
+
920
+
921
+ def _interpret_tauri(file_path: str, matches: list, framework: str) -> list[RouteInfo]:
922
+ """Tauri: #[tauri::command] functions as IPC endpoints (routes).
923
+
924
+ The frontend calls these via invoke("command_name", { args }).
925
+ Attributes and function_items are siblings in tree-sitter-rust, so
926
+ we collect the end-lines of all #[tauri::command] attributes, then
927
+ match each function whose start line follows an attribute end line.
928
+ """
929
+ routes: list[RouteInfo] = []
930
+
931
+ # Collect end-lines of #[tauri::command] attributes
932
+ cmd_attr_ends: set[int] = set()
933
+ for _idx, caps in matches:
934
+ if "route.tauri_attr" in caps:
935
+ attr_node = caps["route.tauri_attr"][0]
936
+ cmd_attr_ends.add(attr_node.end_point[0])
937
+
938
+ if not cmd_attr_ends:
939
+ return []
940
+
941
+ # Match function_items that start right after an attribute
942
+ seen: set[str] = set()
943
+ for _idx, caps in matches:
944
+ if "route.func" in caps and "route.func_name" in caps:
945
+ func_node = caps["route.func"][0]
946
+ func_start_line = func_node.start_point[0]
947
+ # Function must start on the line immediately after the attribute
948
+ if func_start_line in cmd_attr_ends or (func_start_line - 1) in cmd_attr_ends:
949
+ name = node_text(caps["route.func_name"][0])
950
+ if name in seen:
951
+ continue
952
+ seen.add(name)
953
+ routes.append(RouteInfo(
954
+ method="INVOKE",
955
+ path=f"/tauri/{name}",
956
+ handler=name,
957
+ source_file=file_path,
958
+ line=func_node.start_point[0] + 1,
959
+ framework="tauri",
960
+ ))
961
+ return routes
@@ -37,6 +37,9 @@ _FW_TO_QUERY: dict[str, str] = {
37
37
  "fastapi": "fastapi",
38
38
  "django": "django",
39
39
  "flask": "flask",
40
+ "tornado": "flask",
41
+ "aiohttp": "flask",
42
+ "python": "fastapi",
40
43
  "gin": "gin",
41
44
  "echo": "gin",
42
45
  "fiber": "gin",
@@ -47,10 +50,14 @@ _FW_TO_QUERY: dict[str, str] = {
47
50
  "actix": "actix",
48
51
  "axum": "actix",
49
52
  "rust": "actix",
53
+ "tauri": "tauri",
54
+ "rocket": "actix",
55
+ "warp": "actix",
50
56
  "vapor": "vapor",
51
57
  "ktor": "ktor",
52
58
  "vue": "vue",
53
59
  "nuxt": "vue",
60
+ "node": "express",
54
61
  "sveltekit": "svelte",
55
62
  "angular": "angular",
56
63
  }
@@ -107,6 +114,7 @@ def extract_services(
107
114
  "laravel": _interpret_laravel,
108
115
  "aspnet": _interpret_aspnet,
109
116
  "actix": _interpret_actix,
117
+ "tauri": _interpret_tauri,
110
118
  "vapor": _interpret_vapor,
111
119
  "ktor": _interpret_ktor,
112
120
  "react": _interpret_noop,
@@ -595,3 +603,28 @@ def _interpret_angular(
595
603
  break # assign to first service (constructor_di is inside a class)
596
604
 
597
605
  return list(services.values()), unresolved
606
+
607
+
608
+ def _interpret_tauri(
609
+ file_path: str, matches: list, framework: str,
610
+ ) -> tuple[list[ServiceInfo], list[UnresolvedRef]]:
611
+ """Tauri: Managed state structs (containing Mutex/RwLock/Arc fields)."""
612
+ services: list[ServiceInfo] = []
613
+ seen: set[str] = set()
614
+
615
+ for _idx, caps in matches:
616
+ if "service.struct" in caps and "service.struct_name" in caps:
617
+ name = node_text(caps["service.struct_name"][0])
618
+ if name in seen:
619
+ continue
620
+ seen.add(name)
621
+ node = caps["service.struct"][0]
622
+ services.append(ServiceInfo(
623
+ name=name,
624
+ class_name=name,
625
+ source_file=file_path,
626
+ line=node.start_point[0] + 1,
627
+ framework="tauri",
628
+ annotations=["managed_state"],
629
+ ))
630
+ return services, []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: codebeacon
3
- description: Scan a codebase → AST extraction → knowledge graph → wiki + CLAUDE.md context map. Supports 24 frameworks (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).
3
+ description: Scan a codebase → AST extraction → knowledge graph → wiki + CLAUDE.md context map. Supports 27 frameworks (Spring Boot, NestJS, Django, FastAPI, Flask, Rails, Express, Fastify, Koa, React, Next.js, Vue, Nuxt, Angular, SvelteKit, Gin, Echo, Fiber, Laravel, Actix-Web, Axum, Tauri, Rocket, Warp, ASP.NET Core, Vapor, Ktor).
4
4
  trigger: /codebeacon
5
5
  ---
6
6
 
@@ -124,6 +124,6 @@ project-root/
124
124
  | Go | Gin, Echo, Fiber |
125
125
  | Ruby | Rails |
126
126
  | PHP | Laravel |
127
- | Rust | Actix-Web, Axum |
127
+ | Rust | Actix-Web, Axum, Tauri, Rocket, Warp |
128
128
  | C# | ASP.NET Core |
129
129
  | Swift | Vapor |
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codebeacon"
7
- version = "0.1.4"
7
+ version = "0.1.5"
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.4"
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