repolens-audit 0.1.0a1__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 (178) hide show
  1. repolens_audit-0.1.0a1/LICENSE +21 -0
  2. repolens_audit-0.1.0a1/PKG-INFO +296 -0
  3. repolens_audit-0.1.0a1/README.md +235 -0
  4. repolens_audit-0.1.0a1/pyproject.toml +86 -0
  5. repolens_audit-0.1.0a1/setup.cfg +4 -0
  6. repolens_audit-0.1.0a1/src/repolens/__init__.py +3 -0
  7. repolens_audit-0.1.0a1/src/repolens/__main__.py +4 -0
  8. repolens_audit-0.1.0a1/src/repolens/adaptive.py +133 -0
  9. repolens_audit-0.1.0a1/src/repolens/anchor.py +99 -0
  10. repolens_audit-0.1.0a1/src/repolens/bands.py +42 -0
  11. repolens_audit-0.1.0a1/src/repolens/benchmark.py +105 -0
  12. repolens_audit-0.1.0a1/src/repolens/ci_args.py +73 -0
  13. repolens_audit-0.1.0a1/src/repolens/cli/__init__.py +17 -0
  14. repolens_audit-0.1.0a1/src/repolens/cli/adaptive.py +115 -0
  15. repolens_audit-0.1.0a1/src/repolens/cli/app.py +186 -0
  16. repolens_audit-0.1.0a1/src/repolens/cli/commands_benchmark.py +72 -0
  17. repolens_audit-0.1.0a1/src/repolens/cli/commands_explain.py +122 -0
  18. repolens_audit-0.1.0a1/src/repolens/cli/commands_feedback.py +102 -0
  19. repolens_audit-0.1.0a1/src/repolens/cli/commands_packs.py +25 -0
  20. repolens_audit-0.1.0a1/src/repolens/cli/commands_pr_summary.py +94 -0
  21. repolens_audit-0.1.0a1/src/repolens/cli/commands_review.py +602 -0
  22. repolens_audit-0.1.0a1/src/repolens/cli/export.py +97 -0
  23. repolens_audit-0.1.0a1/src/repolens/cli/plugins.py +51 -0
  24. repolens_audit-0.1.0a1/src/repolens/cluster.py +94 -0
  25. repolens_audit-0.1.0a1/src/repolens/config.py +353 -0
  26. repolens_audit-0.1.0a1/src/repolens/consistency.py +174 -0
  27. repolens_audit-0.1.0a1/src/repolens/coverage.py +282 -0
  28. repolens_audit-0.1.0a1/src/repolens/deep.py +242 -0
  29. repolens_audit-0.1.0a1/src/repolens/diagrams.py +243 -0
  30. repolens_audit-0.1.0a1/src/repolens/disclaimer.py +59 -0
  31. repolens_audit-0.1.0a1/src/repolens/explain.py +910 -0
  32. repolens_audit-0.1.0a1/src/repolens/feedback_store.py +142 -0
  33. repolens_audit-0.1.0a1/src/repolens/file_outline.py +134 -0
  34. repolens_audit-0.1.0a1/src/repolens/fp_calibrations.py +148 -0
  35. repolens_audit-0.1.0a1/src/repolens/heuristics/__init__.py +5 -0
  36. repolens_audit-0.1.0a1/src/repolens/heuristics/ci_gaps.py +104 -0
  37. repolens_audit-0.1.0a1/src/repolens/heuristics/deep_nesting.py +85 -0
  38. repolens_audit-0.1.0a1/src/repolens/heuristics/gitignore_secrets.py +110 -0
  39. repolens_audit-0.1.0a1/src/repolens/heuristics/mega_files.py +89 -0
  40. repolens_audit-0.1.0a1/src/repolens/heuristics/paths.py +9 -0
  41. repolens_audit-0.1.0a1/src/repolens/heuristics/runner.py +125 -0
  42. repolens_audit-0.1.0a1/src/repolens/heuristics/scripts_hygiene.py +114 -0
  43. repolens_audit-0.1.0a1/src/repolens/heuristics/siblings.py +99 -0
  44. repolens_audit-0.1.0a1/src/repolens/inventory.py +290 -0
  45. repolens_audit-0.1.0a1/src/repolens/issue_ids.py +57 -0
  46. repolens_audit-0.1.0a1/src/repolens/last_llm.py +151 -0
  47. repolens_audit-0.1.0a1/src/repolens/learning/__init__.py +22 -0
  48. repolens_audit-0.1.0a1/src/repolens/learning/consent.py +72 -0
  49. repolens_audit-0.1.0a1/src/repolens/learning/embeddings.py +20 -0
  50. repolens_audit-0.1.0a1/src/repolens/learning/index.py +67 -0
  51. repolens_audit-0.1.0a1/src/repolens/learning/memory.py +48 -0
  52. repolens_audit-0.1.0a1/src/repolens/learning/retrieve.py +31 -0
  53. repolens_audit-0.1.0a1/src/repolens/learning/store.py +302 -0
  54. repolens_audit-0.1.0a1/src/repolens/llm/__init__.py +57 -0
  55. repolens_audit-0.1.0a1/src/repolens/llm/errors.py +51 -0
  56. repolens_audit-0.1.0a1/src/repolens/llm/parse.py +331 -0
  57. repolens_audit-0.1.0a1/src/repolens/llm/setup.py +165 -0
  58. repolens_audit-0.1.0a1/src/repolens/llm/transport.py +359 -0
  59. repolens_audit-0.1.0a1/src/repolens/llm_structured.py +172 -0
  60. repolens_audit-0.1.0a1/src/repolens/metrics.py +219 -0
  61. repolens_audit-0.1.0a1/src/repolens/packs/__init__.py +7 -0
  62. repolens_audit-0.1.0a1/src/repolens/packs/azure_sentinel/__init__.py +1 -0
  63. repolens_audit-0.1.0a1/src/repolens/packs/azure_sentinel/heuristics.py +148 -0
  64. repolens_audit-0.1.0a1/src/repolens/packs/azure_sentinel/playbook.md +26 -0
  65. repolens_audit-0.1.0a1/src/repolens/packs/registry.py +110 -0
  66. repolens_audit-0.1.0a1/src/repolens/pipeline/__init__.py +17 -0
  67. repolens_audit-0.1.0a1/src/repolens/pipeline/deep_exec.py +381 -0
  68. repolens_audit-0.1.0a1/src/repolens/pipeline/prompt.py +61 -0
  69. repolens_audit-0.1.0a1/src/repolens/pipeline/run.py +915 -0
  70. repolens_audit-0.1.0a1/src/repolens/pipeline/types.py +27 -0
  71. repolens_audit-0.1.0a1/src/repolens/playbooks/README.md +18 -0
  72. repolens_audit-0.1.0a1/src/repolens/playbooks/architecture.md +330 -0
  73. repolens_audit-0.1.0a1/src/repolens/playbooks/security.md +152 -0
  74. repolens_audit-0.1.0a1/src/repolens/playbooks.py +70 -0
  75. repolens_audit-0.1.0a1/src/repolens/plugins.py +370 -0
  76. repolens_audit-0.1.0a1/src/repolens/pr_summary.py +144 -0
  77. repolens_audit-0.1.0a1/src/repolens/progress.py +143 -0
  78. repolens_audit-0.1.0a1/src/repolens/prose.py +11 -0
  79. repolens_audit-0.1.0a1/src/repolens/provider_status.py +44 -0
  80. repolens_audit-0.1.0a1/src/repolens/py.typed +0 -0
  81. repolens_audit-0.1.0a1/src/repolens/report.py +701 -0
  82. repolens_audit-0.1.0a1/src/repolens/report_parse.py +196 -0
  83. repolens_audit-0.1.0a1/src/repolens/rules/__init__.py +7 -0
  84. repolens_audit-0.1.0a1/src/repolens/rules/defaults/architecture.md +330 -0
  85. repolens_audit-0.1.0a1/src/repolens/rules/defaults/coverage.json +410 -0
  86. repolens_audit-0.1.0a1/src/repolens/rules/defaults/manifest.json +26 -0
  87. repolens_audit-0.1.0a1/src/repolens/rules/defaults/reliability.md +25 -0
  88. repolens_audit-0.1.0a1/src/repolens/rules/defaults/security.md +152 -0
  89. repolens_audit-0.1.0a1/src/repolens/rules/registry.py +239 -0
  90. repolens_audit-0.1.0a1/src/repolens/sarif.py +189 -0
  91. repolens_audit-0.1.0a1/src/repolens/scanners/__init__.py +5 -0
  92. repolens_audit-0.1.0a1/src/repolens/scanners/base.py +81 -0
  93. repolens_audit-0.1.0a1/src/repolens/scanners/checkov.py +143 -0
  94. repolens_audit-0.1.0a1/src/repolens/scanners/evidence.py +38 -0
  95. repolens_audit-0.1.0a1/src/repolens/scanners/gitleaks.py +82 -0
  96. repolens_audit-0.1.0a1/src/repolens/scanners/osv.py +78 -0
  97. repolens_audit-0.1.0a1/src/repolens/scanners/runner.py +89 -0
  98. repolens_audit-0.1.0a1/src/repolens/scanners/sca.py +472 -0
  99. repolens_audit-0.1.0a1/src/repolens/scanners/semgrep.py +92 -0
  100. repolens_audit-0.1.0a1/src/repolens/scanners/trivy.py +161 -0
  101. repolens_audit-0.1.0a1/src/repolens/scanners/usage_hints.py +144 -0
  102. repolens_audit-0.1.0a1/src/repolens/schema.py +200 -0
  103. repolens_audit-0.1.0a1/src/repolens/sources.py +289 -0
  104. repolens_audit-0.1.0a1/src/repolens/suppressions.py +269 -0
  105. repolens_audit-0.1.0a1/src/repolens/themes.py +178 -0
  106. repolens_audit-0.1.0a1/src/repolens/triage.py +233 -0
  107. repolens_audit-0.1.0a1/src/repolens/vacuous_floor.py +151 -0
  108. repolens_audit-0.1.0a1/src/repolens/verify_findings.py +48 -0
  109. repolens_audit-0.1.0a1/src/repolens_audit.egg-info/PKG-INFO +296 -0
  110. repolens_audit-0.1.0a1/src/repolens_audit.egg-info/SOURCES.txt +176 -0
  111. repolens_audit-0.1.0a1/src/repolens_audit.egg-info/dependency_links.txt +1 -0
  112. repolens_audit-0.1.0a1/src/repolens_audit.egg-info/entry_points.txt +2 -0
  113. repolens_audit-0.1.0a1/src/repolens_audit.egg-info/requires.txt +17 -0
  114. repolens_audit-0.1.0a1/src/repolens_audit.egg-info/top_level.txt +1 -0
  115. repolens_audit-0.1.0a1/tests/test_adaptive.py +73 -0
  116. repolens_audit-0.1.0a1/tests/test_band_coerce.py +106 -0
  117. repolens_audit-0.1.0a1/tests/test_benchmark.py +63 -0
  118. repolens_audit-0.1.0a1/tests/test_ci_args.py +71 -0
  119. repolens_audit-0.1.0a1/tests/test_cli.py +253 -0
  120. repolens_audit-0.1.0a1/tests/test_cluster.py +175 -0
  121. repolens_audit-0.1.0a1/tests/test_config.py +86 -0
  122. repolens_audit-0.1.0a1/tests/test_consistency.py +64 -0
  123. repolens_audit-0.1.0a1/tests/test_coverage_config.py +78 -0
  124. repolens_audit-0.1.0a1/tests/test_coverage_lazy_na.py +57 -0
  125. repolens_audit-0.1.0a1/tests/test_coverage_matrix.py +115 -0
  126. repolens_audit-0.1.0a1/tests/test_coverage_seeding.py +139 -0
  127. repolens_audit-0.1.0a1/tests/test_deep.py +313 -0
  128. repolens_audit-0.1.0a1/tests/test_diagrams.py +105 -0
  129. repolens_audit-0.1.0a1/tests/test_docs_extras.py +57 -0
  130. repolens_audit-0.1.0a1/tests/test_explain.py +370 -0
  131. repolens_audit-0.1.0a1/tests/test_fallback.py +60 -0
  132. repolens_audit-0.1.0a1/tests/test_fast_brain.py +151 -0
  133. repolens_audit-0.1.0a1/tests/test_feedback_calibrations.py +99 -0
  134. repolens_audit-0.1.0a1/tests/test_file_outline.py +39 -0
  135. repolens_audit-0.1.0a1/tests/test_fp_calibrations.py +132 -0
  136. repolens_audit-0.1.0a1/tests/test_guided_script.py +510 -0
  137. repolens_audit-0.1.0a1/tests/test_heuristics.py +183 -0
  138. repolens_audit-0.1.0a1/tests/test_heuristics_deep_nesting.py +80 -0
  139. repolens_audit-0.1.0a1/tests/test_inventory.py +85 -0
  140. repolens_audit-0.1.0a1/tests/test_issue_ids.py +61 -0
  141. repolens_audit-0.1.0a1/tests/test_last_llm.py +130 -0
  142. repolens_audit-0.1.0a1/tests/test_learning.py +63 -0
  143. repolens_audit-0.1.0a1/tests/test_llm_consistency.py +45 -0
  144. repolens_audit-0.1.0a1/tests/test_llm_parse.py +137 -0
  145. repolens_audit-0.1.0a1/tests/test_llm_setup_prompt.py +15 -0
  146. repolens_audit-0.1.0a1/tests/test_llm_stream.py +120 -0
  147. repolens_audit-0.1.0a1/tests/test_llm_structured.py +111 -0
  148. repolens_audit-0.1.0a1/tests/test_llm_timeout.py +104 -0
  149. repolens_audit-0.1.0a1/tests/test_mega_file_filters.py +60 -0
  150. repolens_audit-0.1.0a1/tests/test_metrics.py +291 -0
  151. repolens_audit-0.1.0a1/tests/test_ollama_detect.py +77 -0
  152. repolens_audit-0.1.0a1/tests/test_packs.py +114 -0
  153. repolens_audit-0.1.0a1/tests/test_pipeline.py +69 -0
  154. repolens_audit-0.1.0a1/tests/test_pipeline_adaptive.py +212 -0
  155. repolens_audit-0.1.0a1/tests/test_pipeline_deep.py +375 -0
  156. repolens_audit-0.1.0a1/tests/test_plugins.py +190 -0
  157. repolens_audit-0.1.0a1/tests/test_pr_summary.py +100 -0
  158. repolens_audit-0.1.0a1/tests/test_progress.py +109 -0
  159. repolens_audit-0.1.0a1/tests/test_project_store.py +104 -0
  160. repolens_audit-0.1.0a1/tests/test_prose.py +59 -0
  161. repolens_audit-0.1.0a1/tests/test_provider_status.py +44 -0
  162. repolens_audit-0.1.0a1/tests/test_report.py +380 -0
  163. repolens_audit-0.1.0a1/tests/test_report_parse.py +93 -0
  164. repolens_audit-0.1.0a1/tests/test_rules_registry.py +92 -0
  165. repolens_audit-0.1.0a1/tests/test_sarif.py +154 -0
  166. repolens_audit-0.1.0a1/tests/test_sca_metadata.py +73 -0
  167. repolens_audit-0.1.0a1/tests/test_sca_sbom.py +419 -0
  168. repolens_audit-0.1.0a1/tests/test_scanners.py +208 -0
  169. repolens_audit-0.1.0a1/tests/test_schema.py +71 -0
  170. repolens_audit-0.1.0a1/tests/test_sources.py +206 -0
  171. repolens_audit-0.1.0a1/tests/test_suppressions.py +191 -0
  172. repolens_audit-0.1.0a1/tests/test_suppressions_report.py +77 -0
  173. repolens_audit-0.1.0a1/tests/test_themes.py +206 -0
  174. repolens_audit-0.1.0a1/tests/test_triage.py +193 -0
  175. repolens_audit-0.1.0a1/tests/test_trivy_checkov.py +145 -0
  176. repolens_audit-0.1.0a1/tests/test_usage_hints.py +39 -0
  177. repolens_audit-0.1.0a1/tests/test_vacuous_floor.py +413 -0
  178. repolens_audit-0.1.0a1/tests/test_verify_findings.py +50 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 RepoLens contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,296 @@
1
+ Metadata-Version: 2.4
2
+ Name: repolens-audit
3
+ Version: 0.1.0a1
4
+ Summary: Structured security and architecture reviews for any repository
5
+ Author: RepoLens contributors
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 RepoLens contributors
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Homepage, https://github.com/vksvicky/RepoLens
29
+ Project-URL: Documentation, https://github.com/vksvicky/RepoLens/tree/main/docs
30
+ Project-URL: Repository, https://github.com/vksvicky/RepoLens
31
+ Project-URL: Issues, https://github.com/vksvicky/RepoLens/issues
32
+ Keywords: security,architecture,code-review,cli,audit
33
+ Classifier: Development Status :: 3 - Alpha
34
+ Classifier: Environment :: Console
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Programming Language :: Python :: 3
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Topic :: Security
42
+ Classifier: Topic :: Software Development :: Quality Assurance
43
+ Requires-Python: >=3.11
44
+ Description-Content-Type: text/markdown
45
+ License-File: LICENSE
46
+ Requires-Dist: typer>=0.12
47
+ Requires-Dist: rich>=13.0
48
+ Requires-Dist: pydantic>=2.7
49
+ Requires-Dist: pydantic-settings>=2.3
50
+ Requires-Dist: httpx>=0.27
51
+ Provides-Extra: dev
52
+ Requires-Dist: pytest>=8.0; extra == "dev"
53
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
54
+ Requires-Dist: ruff>=0.6; extra == "dev"
55
+ Requires-Dist: mypy>=1.11; extra == "dev"
56
+ Provides-Extra: scanners
57
+ Requires-Dist: semgrep<2,>=1.100; extra == "scanners"
58
+ Provides-Extra: local-ml
59
+ Requires-Dist: sentence-transformers<4,>=3.0; extra == "local-ml"
60
+ Dynamic: license-file
61
+
62
+ # RepoLens
63
+
64
+ **See into any repository—security, reliability, and architecture—before you ship.**
65
+
66
+ RepoLens is an open-source CLI that runs structured code reviews against projects you care about: on your machine, or cloned from GitHub, Bitbucket, Hugging Face, or any Git URL. It follows a clear **P1 → P2 → P3** pass (security → bugs/reliability/performance → architecture/quality) and writes audit-friendly reports with impact, remediation steps, and code-example fixes for Critical/High findings.
67
+
68
+ > **Status:** Alpha `0.1.0a1` on PyPI as **`repolens-audit`** (CLI: `repolens`) — Phases **0–7** complete
69
+ > Local CLI · remotes · optional scanners · explain + diagrams · GitHub Action · opt-in local learning · enterprise CI recipes
70
+ > Install: `pip install "repolens-audit[scanners]==0.1.0a1"` · or from a clone: `pip install -e ".[dev]"`
71
+ > Docs: [phases](./docs/phases.md) · [FAQ](./docs/faq.md) · [rules](./docs/rules.md) · [install extras](./docs/install-extras.md) · [CI / Action](./docs/ci.md) · [remotes](./docs/remote-sources.md) · [scanners](./docs/scanners.md) · [local learning](./docs/local-learning.md) · [publishing](./docs/publishing.md)
72
+
73
+ ---
74
+
75
+ ## Why RepoLens?
76
+
77
+ | Need | How RepoLens helps |
78
+ |------|--------------------|
79
+ | Review **any** project, not one vendor’s stack | Local paths + Git remotes |
80
+ | Security without ignoring architecture | Full review + `sentinel` security-only mode |
81
+ | Actionable findings | Impact, fix plan, **code examples** on Critical/High |
82
+ | Shareable audits | Markdown reports (PDF via pandoc / Print) |
83
+ | Production honesty | Complements—does not replace—CI, tests, and scanners |
84
+
85
+ RepoLens is **not** a replacement for Semgrep, CodeQL, Dependabot, Snyk, or your test suite. Those stay in CI. RepoLens adds a consistent, human-readable due-diligence layer you can run anywhere.
86
+
87
+ ---
88
+
89
+ ## Modes
90
+
91
+ | Command | What it does |
92
+ |---------|--------------|
93
+ | `repolens review` | Full dual review: P1 security + P2 reliability + P3 architecture |
94
+ | `repolens sentinel` | **Security-only** scan (P1 playbook) |
95
+ | `repolens architecture` | Architecture / production-readiness audit |
96
+ | `repolens plugins` | Optional scanners: `status` / `list` / `install` |
97
+ | `repolens learn` | Opt-in local index: `build` / `status` / `clear` |
98
+ | `repolens init` | Write user config (cloud key, Ollama, or none) |
99
+ | `repolens explain` | Deep-dive one finding by ID (solutions + diagram) |
100
+ | `repolens export` | Export / convert a report (e.g. Markdown → PDF via pandoc) |
101
+ | `repolens version` | Print package version |
102
+
103
+ **What gets checked?** See **[docs/rules.md](./docs/rules.md)** — plain guide to rules, why they exist, and how to turn them on/off.
104
+
105
+ ---
106
+
107
+ ## Languages & tools
108
+
109
+ - **CLI:** Python 3.11+
110
+ - **Reviews:** language-agnostic, with first-class focus on JS/TS, Python, Go, JVM, C#, Ruby, PHP, Rust, Swift (+ IaC/config)
111
+ - **AI:** Bring your own cloud key (Anthropic, OpenAI, DeepSeek), run a local model (e.g. Ollama), or rely on automatic local fallback (`--fallback`)
112
+ - **CVE / SAST / secrets:** optional plugins (OSV, Semgrep, gitleaks)—not in the slim default install
113
+ - **Local learning:** opt-in on-disk FTS index (`repolens learn`), informed consent first
114
+ - **CI:** official GitHub Action (`action.yml`) — see [docs/ci.md](./docs/ci.md)
115
+
116
+ Full answers: **[docs/faq.md](./docs/faq.md)** · **[docs/design/ai-keys-scanners-and-local-learning.md](./docs/design/ai-keys-scanners-and-local-learning.md)**.
117
+ **Setup (cloud / Ollama / scanners):** **[docs/setup-ai-and-scanners.md](./docs/setup-ai-and-scanners.md)**.
118
+ **Try it (local + GitHub / Bitbucket / HF / git URL):** **[docs/try-on-your-repo.md](./docs/try-on-your-repo.md)**.
119
+ Interactive helper: `./scripts/repolens-guided.sh` (see [try-on-your-repo](docs/try-on-your-repo.md#guided-review-interactive)).
120
+
121
+ ---
122
+
123
+ ## Quick start
124
+
125
+ ```bash
126
+ # Preferred: PyPI alpha (CLI entry point is still `repolens`)
127
+ pip install "repolens-audit[scanners]==0.1.0a1"
128
+
129
+ # From a clone (contributors / dogfood)
130
+ python3 -m venv .venv
131
+ source .venv/bin/activate
132
+ pip install -e ".[dev]"
133
+ ```
134
+
135
+ ### Install extras (`[dev]`, `[scanners]`, …)
136
+
137
+ These are **optional parts of the RepoLens package** (defined in this repo’s [`pyproject.toml`](./pyproject.toml)). They are **not** settings inside the apps you review.
138
+
139
+ | Extra | Command | What you get |
140
+ |-------|---------|--------------|
141
+ | *(none)* | `pip install -e .` | CLI only |
142
+ | **dev** | `pip install -e ".[dev]"` | + pytest, pytest-cov, ruff, mypy |
143
+ | **scanners** | `pip install -e ".[scanners]"` | + Semgrep (gitleaks/osv still via `repolens plugins install`) |
144
+ | **local-ml** | `pip install -e ".[local-ml]"` | + sentence-transformers |
145
+
146
+ Full detail: **[docs/install-extras.md](./docs/install-extras.md)**.
147
+
148
+ ```bash
149
+ # From a clone
150
+ python3 -m venv .venv
151
+ source .venv/bin/activate
152
+ pip install -e ".[dev]"
153
+
154
+ # First-run: cloud key, local Ollama, or none
155
+ # Ollama: uses a model from `ollama list` (or pass --model NAME)
156
+ repolens init --provider ollama # or openai | anthropic | deepseek | none
157
+
158
+ # Inventory + report skeleton (no model call)
159
+ repolens review --path ./my-app --dry-run
160
+
161
+ # Optional scanners (secrets / SAST / CVE)
162
+ repolens plugins install all
163
+ repolens review --path ./my-app --scanners-only
164
+
165
+ # Opt-in local learning (stays on disk)
166
+ repolens learn build --path ./my-app --accept-local-learning
167
+
168
+ # Full local review (requires configured provider + key/Ollama)
169
+ # Progress lines + LLM heartbeats by default; add -v for more detail
170
+ # Deep coverage (multi-pass + heuristics) is on by default; use --no-deep for single-shot
171
+ repolens review --path ./my-app --verbose
172
+ # After first run: warm packs + recommended timeout
173
+ repolens adaptive status --path ./my-app
174
+ repolens sentinel --path ./my-app
175
+ ```
176
+
177
+ ### Sources (local + remotes)
178
+
179
+ ```bash
180
+ # Local folder
181
+ repolens review --path ./my-app --dry-run
182
+
183
+ # GitHub / Bitbucket / Hugging Face / any git URL
184
+ repolens review --github owner/repo --ref main --dry-run
185
+ repolens review --bitbucket workspace/repo --ref main --dry-run
186
+ repolens review --hf org/model --dry-run
187
+ repolens review --hf datasets/org/dataset-name --dry-run
188
+ repolens review --git-url https://github.com/owner/repo.git --ref main --dry-run
189
+ ```
190
+
191
+ Private remotes: `GITHUB_TOKEN` / `BITBUCKET_TOKEN` / `HF_TOKEN` (or `gh auth login`).
192
+ Full examples: [docs/try-on-your-repo.md](./docs/try-on-your-repo.md) · [docs/remote-sources.md](./docs/remote-sources.md) · [docs/scanners.md](./docs/scanners.md).
193
+
194
+ ### GitHub Actions
195
+
196
+ ```yaml
197
+ - uses: actions/checkout@v4
198
+ - uses: vksvicky/RepoLens@main
199
+ with:
200
+ path: .
201
+ run: auto # scanners always; LLM if API key secret is set
202
+ # or: run: dry-run
203
+ env:
204
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # optional
205
+ ```
206
+
207
+ Details: [docs/ci.md](./docs/ci.md).
208
+
209
+ Playbooks also work with any LLM chat: [docs/using-playbooks.md](./docs/using-playbooks.md).
210
+
211
+ ---
212
+
213
+ ## Reports
214
+
215
+ ### In the terminal
216
+ Summaries show **confidence %**, severity counts, and top findings.
217
+
218
+ ### Saved Markdown (default artifact)
219
+ ```text
220
+ reports/gate_review_report_{mode}_YYYY-MM-DD_HHMM.md
221
+ ```
222
+ `mode` is `review`, `sentinel`, or `architecture`. Each Critical/High finding includes explanation, **impact**, recommended fix, and a **code example**. Reports include an **Automated scanners** section when scanners run.
223
+
224
+ ### PDF
225
+ ```bash
226
+ pandoc reports/gate_review_report_review_YYYY-MM-DD_HHMM.md -o reports/gate_review_report_review_YYYY-MM-DD_HHMM.pdf
227
+ # or: Print → Save as PDF from a Markdown preview
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Playbooks & rules
233
+
234
+ | Playbook | File |
235
+ |----------|------|
236
+ | Security (P1 / `sentinel`) | [playbooks/security.md](./playbooks/security.md) |
237
+ | Architecture (release / full audit) | [playbooks/architecture.md](./playbooks/architecture.md) |
238
+
239
+ **Rules** (what is checked, why, enable/disable): **[docs/rules.md](./docs/rules.md)**.
240
+ Playbook files: [playbooks/README.md](./playbooks/README.md). Contributions: [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md).
241
+
242
+ ---
243
+
244
+ ## Repository layout
245
+
246
+ ```text
247
+ RepoLens/
248
+ ├── README.md # This page
249
+ ├── LICENSE # MIT
250
+ ├── action.yml # GitHub Action (composite)
251
+ ├── pyproject.toml # Python package
252
+ ├── src/repolens/ # CLI, pipeline, scanners, learning
253
+ ├── tests/ # pytest suite
254
+ ├── playbooks/ # Review instruction sources
255
+ ├── examples/monorepo/ # Sample project config
256
+ ├── docs/ # Guides, FAQ, ADR, design, phases
257
+ └── .github/workflows/ # CI, publish, Action example
258
+ ```
259
+
260
+ Naming conventions: [docs/README.md](./docs/README.md#naming-pattern).
261
+
262
+ ---
263
+
264
+ ## Roadmap
265
+
266
+ | Phase | Scope | Status |
267
+ |-------|--------|--------|
268
+ | **0** | Docs, playbooks, design | Done |
269
+ | **1** | Core CLI (local path, reports, BYOK / Ollama) | Done (alpha) |
270
+ | **2** | Remotes (`--git-url`, `--github`, `--bitbucket`, `--hf`) | Done |
271
+ | **3** | Optional scanners (gitleaks, Semgrep, OSV) | Done |
272
+ | **4** | GitHub Action, PyPI publish path, local learning | Done |
273
+ | **Next** | Harden publish / marketplace polish / richer embeddings | Open |
274
+
275
+ Tracker: **[docs/phases.md](./docs/phases.md)** · Design: **[docs/design/](./docs/design/)** · ADR: **[docs/adr/01_analysis_runtime_architecture.md](./docs/adr/01_analysis_runtime_architecture.md)**.
276
+
277
+ ---
278
+
279
+ ## Contributing
280
+
281
+ - [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)
282
+ - [docs/CODE_OF_CONDUCT.md](./docs/CODE_OF_CONDUCT.md)
283
+ - [docs/SECURITY.md](./docs/SECURITY.md) for vulnerability reports
284
+ - [docs/SUPPORT.md](./docs/SUPPORT.md)
285
+
286
+ ---
287
+
288
+ ## Disclaimer (AI / LLM output)
289
+
290
+ RepoLens findings and suggestions may be produced or assisted by AI/LLMs, heuristics, and optional scanners. They can be wrong or incomplete. **You** are responsible for verifying results before you act. Authors accept **no liability** for harm from reliance on AI/LLM or tool-assisted output. Reports are not a certification or professional audit engagement. Full text appears in every Markdown report under **Disclaimer**, and in the [FAQ](./docs/faq.md#disclaimer-ai--llm-output).
291
+
292
+ ---
293
+
294
+ ## License
295
+
296
+ [MIT](./LICENSE) — use it, fork it, adapt the playbooks for your org. Software is provided **as is** (see the licence).
@@ -0,0 +1,235 @@
1
+ # RepoLens
2
+
3
+ **See into any repository—security, reliability, and architecture—before you ship.**
4
+
5
+ RepoLens is an open-source CLI that runs structured code reviews against projects you care about: on your machine, or cloned from GitHub, Bitbucket, Hugging Face, or any Git URL. It follows a clear **P1 → P2 → P3** pass (security → bugs/reliability/performance → architecture/quality) and writes audit-friendly reports with impact, remediation steps, and code-example fixes for Critical/High findings.
6
+
7
+ > **Status:** Alpha `0.1.0a1` on PyPI as **`repolens-audit`** (CLI: `repolens`) — Phases **0–7** complete
8
+ > Local CLI · remotes · optional scanners · explain + diagrams · GitHub Action · opt-in local learning · enterprise CI recipes
9
+ > Install: `pip install "repolens-audit[scanners]==0.1.0a1"` · or from a clone: `pip install -e ".[dev]"`
10
+ > Docs: [phases](./docs/phases.md) · [FAQ](./docs/faq.md) · [rules](./docs/rules.md) · [install extras](./docs/install-extras.md) · [CI / Action](./docs/ci.md) · [remotes](./docs/remote-sources.md) · [scanners](./docs/scanners.md) · [local learning](./docs/local-learning.md) · [publishing](./docs/publishing.md)
11
+
12
+ ---
13
+
14
+ ## Why RepoLens?
15
+
16
+ | Need | How RepoLens helps |
17
+ |------|--------------------|
18
+ | Review **any** project, not one vendor’s stack | Local paths + Git remotes |
19
+ | Security without ignoring architecture | Full review + `sentinel` security-only mode |
20
+ | Actionable findings | Impact, fix plan, **code examples** on Critical/High |
21
+ | Shareable audits | Markdown reports (PDF via pandoc / Print) |
22
+ | Production honesty | Complements—does not replace—CI, tests, and scanners |
23
+
24
+ RepoLens is **not** a replacement for Semgrep, CodeQL, Dependabot, Snyk, or your test suite. Those stay in CI. RepoLens adds a consistent, human-readable due-diligence layer you can run anywhere.
25
+
26
+ ---
27
+
28
+ ## Modes
29
+
30
+ | Command | What it does |
31
+ |---------|--------------|
32
+ | `repolens review` | Full dual review: P1 security + P2 reliability + P3 architecture |
33
+ | `repolens sentinel` | **Security-only** scan (P1 playbook) |
34
+ | `repolens architecture` | Architecture / production-readiness audit |
35
+ | `repolens plugins` | Optional scanners: `status` / `list` / `install` |
36
+ | `repolens learn` | Opt-in local index: `build` / `status` / `clear` |
37
+ | `repolens init` | Write user config (cloud key, Ollama, or none) |
38
+ | `repolens explain` | Deep-dive one finding by ID (solutions + diagram) |
39
+ | `repolens export` | Export / convert a report (e.g. Markdown → PDF via pandoc) |
40
+ | `repolens version` | Print package version |
41
+
42
+ **What gets checked?** See **[docs/rules.md](./docs/rules.md)** — plain guide to rules, why they exist, and how to turn them on/off.
43
+
44
+ ---
45
+
46
+ ## Languages & tools
47
+
48
+ - **CLI:** Python 3.11+
49
+ - **Reviews:** language-agnostic, with first-class focus on JS/TS, Python, Go, JVM, C#, Ruby, PHP, Rust, Swift (+ IaC/config)
50
+ - **AI:** Bring your own cloud key (Anthropic, OpenAI, DeepSeek), run a local model (e.g. Ollama), or rely on automatic local fallback (`--fallback`)
51
+ - **CVE / SAST / secrets:** optional plugins (OSV, Semgrep, gitleaks)—not in the slim default install
52
+ - **Local learning:** opt-in on-disk FTS index (`repolens learn`), informed consent first
53
+ - **CI:** official GitHub Action (`action.yml`) — see [docs/ci.md](./docs/ci.md)
54
+
55
+ Full answers: **[docs/faq.md](./docs/faq.md)** · **[docs/design/ai-keys-scanners-and-local-learning.md](./docs/design/ai-keys-scanners-and-local-learning.md)**.
56
+ **Setup (cloud / Ollama / scanners):** **[docs/setup-ai-and-scanners.md](./docs/setup-ai-and-scanners.md)**.
57
+ **Try it (local + GitHub / Bitbucket / HF / git URL):** **[docs/try-on-your-repo.md](./docs/try-on-your-repo.md)**.
58
+ Interactive helper: `./scripts/repolens-guided.sh` (see [try-on-your-repo](docs/try-on-your-repo.md#guided-review-interactive)).
59
+
60
+ ---
61
+
62
+ ## Quick start
63
+
64
+ ```bash
65
+ # Preferred: PyPI alpha (CLI entry point is still `repolens`)
66
+ pip install "repolens-audit[scanners]==0.1.0a1"
67
+
68
+ # From a clone (contributors / dogfood)
69
+ python3 -m venv .venv
70
+ source .venv/bin/activate
71
+ pip install -e ".[dev]"
72
+ ```
73
+
74
+ ### Install extras (`[dev]`, `[scanners]`, …)
75
+
76
+ These are **optional parts of the RepoLens package** (defined in this repo’s [`pyproject.toml`](./pyproject.toml)). They are **not** settings inside the apps you review.
77
+
78
+ | Extra | Command | What you get |
79
+ |-------|---------|--------------|
80
+ | *(none)* | `pip install -e .` | CLI only |
81
+ | **dev** | `pip install -e ".[dev]"` | + pytest, pytest-cov, ruff, mypy |
82
+ | **scanners** | `pip install -e ".[scanners]"` | + Semgrep (gitleaks/osv still via `repolens plugins install`) |
83
+ | **local-ml** | `pip install -e ".[local-ml]"` | + sentence-transformers |
84
+
85
+ Full detail: **[docs/install-extras.md](./docs/install-extras.md)**.
86
+
87
+ ```bash
88
+ # From a clone
89
+ python3 -m venv .venv
90
+ source .venv/bin/activate
91
+ pip install -e ".[dev]"
92
+
93
+ # First-run: cloud key, local Ollama, or none
94
+ # Ollama: uses a model from `ollama list` (or pass --model NAME)
95
+ repolens init --provider ollama # or openai | anthropic | deepseek | none
96
+
97
+ # Inventory + report skeleton (no model call)
98
+ repolens review --path ./my-app --dry-run
99
+
100
+ # Optional scanners (secrets / SAST / CVE)
101
+ repolens plugins install all
102
+ repolens review --path ./my-app --scanners-only
103
+
104
+ # Opt-in local learning (stays on disk)
105
+ repolens learn build --path ./my-app --accept-local-learning
106
+
107
+ # Full local review (requires configured provider + key/Ollama)
108
+ # Progress lines + LLM heartbeats by default; add -v for more detail
109
+ # Deep coverage (multi-pass + heuristics) is on by default; use --no-deep for single-shot
110
+ repolens review --path ./my-app --verbose
111
+ # After first run: warm packs + recommended timeout
112
+ repolens adaptive status --path ./my-app
113
+ repolens sentinel --path ./my-app
114
+ ```
115
+
116
+ ### Sources (local + remotes)
117
+
118
+ ```bash
119
+ # Local folder
120
+ repolens review --path ./my-app --dry-run
121
+
122
+ # GitHub / Bitbucket / Hugging Face / any git URL
123
+ repolens review --github owner/repo --ref main --dry-run
124
+ repolens review --bitbucket workspace/repo --ref main --dry-run
125
+ repolens review --hf org/model --dry-run
126
+ repolens review --hf datasets/org/dataset-name --dry-run
127
+ repolens review --git-url https://github.com/owner/repo.git --ref main --dry-run
128
+ ```
129
+
130
+ Private remotes: `GITHUB_TOKEN` / `BITBUCKET_TOKEN` / `HF_TOKEN` (or `gh auth login`).
131
+ Full examples: [docs/try-on-your-repo.md](./docs/try-on-your-repo.md) · [docs/remote-sources.md](./docs/remote-sources.md) · [docs/scanners.md](./docs/scanners.md).
132
+
133
+ ### GitHub Actions
134
+
135
+ ```yaml
136
+ - uses: actions/checkout@v4
137
+ - uses: vksvicky/RepoLens@main
138
+ with:
139
+ path: .
140
+ run: auto # scanners always; LLM if API key secret is set
141
+ # or: run: dry-run
142
+ env:
143
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # optional
144
+ ```
145
+
146
+ Details: [docs/ci.md](./docs/ci.md).
147
+
148
+ Playbooks also work with any LLM chat: [docs/using-playbooks.md](./docs/using-playbooks.md).
149
+
150
+ ---
151
+
152
+ ## Reports
153
+
154
+ ### In the terminal
155
+ Summaries show **confidence %**, severity counts, and top findings.
156
+
157
+ ### Saved Markdown (default artifact)
158
+ ```text
159
+ reports/gate_review_report_{mode}_YYYY-MM-DD_HHMM.md
160
+ ```
161
+ `mode` is `review`, `sentinel`, or `architecture`. Each Critical/High finding includes explanation, **impact**, recommended fix, and a **code example**. Reports include an **Automated scanners** section when scanners run.
162
+
163
+ ### PDF
164
+ ```bash
165
+ pandoc reports/gate_review_report_review_YYYY-MM-DD_HHMM.md -o reports/gate_review_report_review_YYYY-MM-DD_HHMM.pdf
166
+ # or: Print → Save as PDF from a Markdown preview
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Playbooks & rules
172
+
173
+ | Playbook | File |
174
+ |----------|------|
175
+ | Security (P1 / `sentinel`) | [playbooks/security.md](./playbooks/security.md) |
176
+ | Architecture (release / full audit) | [playbooks/architecture.md](./playbooks/architecture.md) |
177
+
178
+ **Rules** (what is checked, why, enable/disable): **[docs/rules.md](./docs/rules.md)**.
179
+ Playbook files: [playbooks/README.md](./playbooks/README.md). Contributions: [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md).
180
+
181
+ ---
182
+
183
+ ## Repository layout
184
+
185
+ ```text
186
+ RepoLens/
187
+ ├── README.md # This page
188
+ ├── LICENSE # MIT
189
+ ├── action.yml # GitHub Action (composite)
190
+ ├── pyproject.toml # Python package
191
+ ├── src/repolens/ # CLI, pipeline, scanners, learning
192
+ ├── tests/ # pytest suite
193
+ ├── playbooks/ # Review instruction sources
194
+ ├── examples/monorepo/ # Sample project config
195
+ ├── docs/ # Guides, FAQ, ADR, design, phases
196
+ └── .github/workflows/ # CI, publish, Action example
197
+ ```
198
+
199
+ Naming conventions: [docs/README.md](./docs/README.md#naming-pattern).
200
+
201
+ ---
202
+
203
+ ## Roadmap
204
+
205
+ | Phase | Scope | Status |
206
+ |-------|--------|--------|
207
+ | **0** | Docs, playbooks, design | Done |
208
+ | **1** | Core CLI (local path, reports, BYOK / Ollama) | Done (alpha) |
209
+ | **2** | Remotes (`--git-url`, `--github`, `--bitbucket`, `--hf`) | Done |
210
+ | **3** | Optional scanners (gitleaks, Semgrep, OSV) | Done |
211
+ | **4** | GitHub Action, PyPI publish path, local learning | Done |
212
+ | **Next** | Harden publish / marketplace polish / richer embeddings | Open |
213
+
214
+ Tracker: **[docs/phases.md](./docs/phases.md)** · Design: **[docs/design/](./docs/design/)** · ADR: **[docs/adr/01_analysis_runtime_architecture.md](./docs/adr/01_analysis_runtime_architecture.md)**.
215
+
216
+ ---
217
+
218
+ ## Contributing
219
+
220
+ - [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)
221
+ - [docs/CODE_OF_CONDUCT.md](./docs/CODE_OF_CONDUCT.md)
222
+ - [docs/SECURITY.md](./docs/SECURITY.md) for vulnerability reports
223
+ - [docs/SUPPORT.md](./docs/SUPPORT.md)
224
+
225
+ ---
226
+
227
+ ## Disclaimer (AI / LLM output)
228
+
229
+ RepoLens findings and suggestions may be produced or assisted by AI/LLMs, heuristics, and optional scanners. They can be wrong or incomplete. **You** are responsible for verifying results before you act. Authors accept **no liability** for harm from reliance on AI/LLM or tool-assisted output. Reports are not a certification or professional audit engagement. Full text appears in every Markdown report under **Disclaimer**, and in the [FAQ](./docs/faq.md#disclaimer-ai--llm-output).
230
+
231
+ ---
232
+
233
+ ## License
234
+
235
+ [MIT](./LICENSE) — use it, fork it, adapt the playbooks for your org. Software is provided **as is** (see the licence).
@@ -0,0 +1,86 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "repolens-audit"
7
+ version = "0.1.0a1"
8
+ description = "Structured security and architecture reviews for any repository"
9
+ readme = "README.md"
10
+ license = { file = "LICENSE" }
11
+ requires-python = ">=3.11"
12
+ authors = [{ name = "RepoLens contributors" }]
13
+ keywords = ["security", "architecture", "code-review", "cli", "audit"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Environment :: Console",
17
+ "Intended Audience :: Developers",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Programming Language :: Python :: 3.13",
23
+ "Topic :: Security",
24
+ "Topic :: Software Development :: Quality Assurance",
25
+ ]
26
+ dependencies = [
27
+ "typer>=0.12",
28
+ "rich>=13.0",
29
+ "pydantic>=2.7",
30
+ "pydantic-settings>=2.3",
31
+ "httpx>=0.27",
32
+ ]
33
+
34
+ [project.optional-dependencies]
35
+ dev = [
36
+ "pytest>=8.0",
37
+ "pytest-cov>=5.0",
38
+ "ruff>=0.6",
39
+ "mypy>=1.11",
40
+ ]
41
+ # Meta extra: Semgrep via pip; also run `repolens plugins install` for gitleaks/osv binaries.
42
+ scanners = [
43
+ "semgrep>=1.100,<2",
44
+ ]
45
+ local-ml = [
46
+ "sentence-transformers>=3.0,<4",
47
+ ]
48
+
49
+ [project.scripts]
50
+ repolens = "repolens.cli:run"
51
+
52
+ [project.urls]
53
+ Homepage = "https://github.com/vksvicky/RepoLens"
54
+ Documentation = "https://github.com/vksvicky/RepoLens/tree/main/docs"
55
+ Repository = "https://github.com/vksvicky/RepoLens"
56
+ Issues = "https://github.com/vksvicky/RepoLens/issues"
57
+
58
+ [tool.setuptools.packages.find]
59
+ where = ["src"]
60
+
61
+ [tool.setuptools.package-data]
62
+ repolens = [
63
+ "playbooks/*.md",
64
+ "rules/defaults/*.md",
65
+ "rules/defaults/*.json",
66
+ "packs/**/*.md",
67
+ "py.typed",
68
+ ]
69
+
70
+ [tool.pytest.ini_options]
71
+ testpaths = ["tests"]
72
+ pythonpath = ["src"]
73
+
74
+ [tool.ruff]
75
+ line-length = 100
76
+ target-version = "py311"
77
+
78
+ [tool.ruff.lint]
79
+ select = ["E", "F", "I", "UP", "B"]
80
+ ignore = ["B008"] # Typer Option/Argument defaults are intentional
81
+
82
+ [tool.mypy]
83
+ python_version = "3.11"
84
+ strict = true
85
+ packages = ["repolens"]
86
+ mypy_path = "src"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """RepoLens — structured security and architecture reviews for any repository."""
2
+
3
+ __version__ = "0.1.0a1"
@@ -0,0 +1,4 @@
1
+ from repolens.cli import app
2
+
3
+ if __name__ == "__main__":
4
+ app()