repotoire 0.1.4__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.
Files changed (455) hide show
  1. {repotoire-0.1.4 → repotoire-0.1.7}/PKG-INFO +28 -10
  2. {repotoire-0.1.4 → repotoire-0.1.7}/README.md +24 -6
  3. {repotoire-0.1.4 → repotoire-0.1.7}/pyproject.toml +7 -9
  4. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/__init__.py +2 -1
  5. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/auth/__init__.py +2 -0
  6. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/auth/clerk.py +27 -0
  7. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/__init__.py +1 -3
  8. repotoire-0.1.7/repotoire/api/shared/services/stripe_service.py +251 -0
  9. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/__init__.py +0 -12
  10. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/__init__.py +0 -2
  11. repotoire-0.1.7/repotoire/api/v1/routes/admin/__init__.py +5 -0
  12. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/usage.py +3 -3
  13. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/webhooks.py +0 -249
  14. repotoire-0.1.7/repotoire/api/v1/schemas/__init__.py +3 -0
  15. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/__init__.py +161 -23
  16. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/ml.py +36 -2
  17. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/tier_limits.py +2 -2
  18. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/__init__.py +0 -28
  19. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/audit.py +3 -6
  20. repotoire-0.1.7/repotoire/db/session.py +464 -0
  21. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/dead_code.py +4 -4
  22. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/engine.py +29 -1
  23. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/graph_algorithms.py +32 -3
  24. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/cloud_client.py +40 -2
  25. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/historical/git_rag.py +2 -2
  26. repotoire-0.1.7/repotoire/insights/__init__.py +12 -0
  27. repotoire-0.1.7/repotoire/insights/engine.py +631 -0
  28. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/models.py +4 -0
  29. repotoire-0.1.7/repotoire/web/node_modules/@monaco-editor/loader/playground/index.html +13 -0
  30. repotoire-0.1.7/repotoire/web/node_modules/decimal.js-light/doc/API.html +1312 -0
  31. repotoire-0.1.7/repotoire/web/node_modules/lz-string/tests/SpecRunner.html +51 -0
  32. repotoire-0.1.7/repotoire/web/node_modules/playwright-core/lib/vite/htmlReport/index.html +84 -0
  33. repotoire-0.1.7/repotoire/web/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  34. repotoire-0.1.7/repotoire/web/node_modules/playwright-core/lib/vite/traceViewer/index.html +43 -0
  35. repotoire-0.1.7/repotoire/web/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
  36. repotoire-0.1.7/repotoire/web/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +17 -0
  37. repotoire-0.1.7/repotoire/web/node_modules/recharts/umd/report.html +39 -0
  38. repotoire-0.1.7/repotoire/web/node_modules/tslib/tslib.es6.html +1 -0
  39. repotoire-0.1.7/repotoire/web/node_modules/tslib/tslib.html +1 -0
  40. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/celery_app.py +0 -25
  41. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/Cargo.lock +53 -53
  42. repotoire-0.1.4/repotoire/api/services/asset_packager.py +0 -283
  43. repotoire-0.1.4/repotoire/api/services/asset_storage.py +0 -456
  44. repotoire-0.1.4/repotoire/api/services/asset_validator.py +0 -376
  45. repotoire-0.1.4/repotoire/api/services/marketplace.py +0 -1405
  46. repotoire-0.1.4/repotoire/api/shared/services/stripe_service.py +0 -616
  47. repotoire-0.1.4/repotoire/api/v1/routes/admin/__init__.py +0 -5
  48. repotoire-0.1.4/repotoire/api/v1/routes/admin/reports.py +0 -666
  49. repotoire-0.1.4/repotoire/api/v1/routes/admin/reviews.py +0 -677
  50. repotoire-0.1.4/repotoire/api/v1/routes/marketplace.py +0 -2762
  51. repotoire-0.1.4/repotoire/api/v1/schemas/__init__.py +0 -69
  52. repotoire-0.1.4/repotoire/api/v1/schemas/marketplace.py +0 -1001
  53. repotoire-0.1.4/repotoire/cli/marketplace.py +0 -1711
  54. repotoire-0.1.4/repotoire/cli/marketplace_client.py +0 -734
  55. repotoire-0.1.4/repotoire/cli/marketplace_sync.py +0 -491
  56. repotoire-0.1.4/repotoire/db/models/marketplace.py +0 -1606
  57. repotoire-0.1.4/repotoire/db/session.py +0 -357
  58. repotoire-0.1.4/repotoire/marketplace/__init__.py +0 -143
  59. repotoire-0.1.4/repotoire/marketplace/analytics.py +0 -846
  60. repotoire-0.1.4/repotoire/marketplace/claude_integration.py +0 -853
  61. repotoire-0.1.4/repotoire/marketplace/claudeai_export.py +0 -610
  62. repotoire-0.1.4/repotoire/marketplace/scanner.py +0 -414
  63. repotoire-0.1.4/repotoire/marketplace/versioning.py +0 -1006
  64. repotoire-0.1.4/repotoire/mcp_marketplace/__init__.py +0 -14
  65. repotoire-0.1.4/repotoire/mcp_marketplace/http_server.py +0 -378
  66. repotoire-0.1.4/repotoire/mcp_marketplace/server.py +0 -454
  67. repotoire-0.1.4/repotoire/workers/analytics_tasks.py +0 -169
  68. {repotoire-0.1.4 → repotoire-0.1.7}/LICENSE +0 -0
  69. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/__init__.py +0 -0
  70. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/compression.py +0 -0
  71. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/contextual.py +0 -0
  72. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/embeddings.py +0 -0
  73. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/hybrid.py +0 -0
  74. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/llm.py +0 -0
  75. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/reranker.py +0 -0
  76. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/retrieval.py +0 -0
  77. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/spacy_clue_generator.py +0 -0
  78. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ai/vector_store.py +0 -0
  79. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/__init__.py +0 -0
  80. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/app.py +0 -0
  81. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/auth/__init__.py +0 -0
  82. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/docs/__init__.py +0 -0
  83. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/docs/webhooks.py +0 -0
  84. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/middleware/__init__.py +0 -0
  85. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/models.py +0 -0
  86. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/schemas/__init__.py +0 -0
  87. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/schemas/fix.py +0 -0
  88. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/schemas/quota_override.py +0 -0
  89. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/__init__.py +0 -0
  90. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/billing.py +0 -0
  91. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/changelog.py +0 -0
  92. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/cloud_storage.py +0 -0
  93. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/encryption.py +0 -0
  94. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/gdpr.py +0 -0
  95. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/github.py +0 -0
  96. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/narrative.py +0 -0
  97. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/notifications.py +0 -0
  98. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/status_emails.py +0 -0
  99. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/services/stripe_service.py +0 -0
  100. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/__init__.py +0 -0
  101. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/auth/password_utils.py +0 -0
  102. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/auth/state_store.py +0 -0
  103. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/docs/__init__.py +0 -0
  104. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/docs/webhooks.py +0 -0
  105. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/helpers/__init__.py +0 -0
  106. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/helpers/errors.py +0 -0
  107. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/helpers/user.py +0 -0
  108. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/__init__.py +0 -0
  109. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/csrf.py +0 -0
  110. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/deprecation.py +0 -0
  111. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/idempotency.py +0 -0
  112. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/rate_limit.py +0 -0
  113. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/security_headers.py +0 -0
  114. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/tenant.py +0 -0
  115. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/usage.py +0 -0
  116. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/middleware/version.py +0 -0
  117. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/schemas/__init__.py +0 -0
  118. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/schemas/fix.py +0 -0
  119. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/schemas/quota_override.py +0 -0
  120. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/billing.py +0 -0
  121. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/circuit_breaker.py +0 -0
  122. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/encryption.py +0 -0
  123. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/gdpr.py +0 -0
  124. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/github.py +0 -0
  125. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/shared/services/s3_client.py +0 -0
  126. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/account.py +0 -0
  127. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/admin/changelog.py +0 -0
  128. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/admin/overrides.py +0 -0
  129. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/admin/status.py +0 -0
  130. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/analysis.py +0 -0
  131. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/analytics.py +0 -0
  132. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/audit.py +0 -0
  133. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/billing.py +0 -0
  134. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/changelog.py +0 -0
  135. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/cli_auth.py +0 -0
  136. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/code.py +0 -0
  137. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/customer_webhooks.py +0 -0
  138. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/detector_settings.py +0 -0
  139. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/findings.py +0 -0
  140. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/fixes.py +0 -0
  141. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/github.py +0 -0
  142. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/graph.py +0 -0
  143. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/historical.py +0 -0
  144. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/monorepo.py +0 -0
  145. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/narratives.py +0 -0
  146. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/notifications.py +0 -0
  147. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/organizations.py +0 -0
  148. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/preferences.py +0 -0
  149. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/provenance_settings.py +0 -0
  150. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/rules.py +0 -0
  151. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/sandbox.py +0 -0
  152. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/security.py +0 -0
  153. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/status.py +0 -0
  154. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v1/routes/team.py +0 -0
  155. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v2/__init__.py +0 -0
  156. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/api/v2/routes/__init__.py +0 -0
  157. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/__init__.py +0 -0
  158. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/applicator.py +0 -0
  159. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/best_of_n.py +0 -0
  160. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/ci.py +0 -0
  161. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/engine.py +0 -0
  162. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/entitlements.py +0 -0
  163. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/languages/__init__.py +0 -0
  164. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/languages/base.py +0 -0
  165. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/languages/go.py +0 -0
  166. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/languages/java.py +0 -0
  167. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/languages/python.py +0 -0
  168. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/languages/typescript.py +0 -0
  169. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/learning/__init__.py +0 -0
  170. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/learning/adaptive.py +0 -0
  171. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/learning/models.py +0 -0
  172. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/learning/store.py +0 -0
  173. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/models.py +0 -0
  174. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/reviewer.py +0 -0
  175. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/scorer.py +0 -0
  176. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/style/__init__.py +0 -0
  177. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/style/analyzer.py +0 -0
  178. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/style/enforcer.py +0 -0
  179. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/style/models.py +0 -0
  180. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/templates/__init__.py +0 -0
  181. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/templates/models.py +0 -0
  182. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/templates/registry.py +0 -0
  183. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/autofix/verifier.py +0 -0
  184. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cache/__init__.py +0 -0
  185. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cache/base.py +0 -0
  186. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cache/preview.py +0 -0
  187. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cache/scan.py +0 -0
  188. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cache/skill.py +0 -0
  189. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/api_keys.py +0 -0
  190. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/auth.py +0 -0
  191. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/auth_commands.py +0 -0
  192. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/credentials.py +0 -0
  193. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/graph.py +0 -0
  194. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/historical.py +0 -0
  195. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/monorepo.py +0 -0
  196. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/org_commands.py +0 -0
  197. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/repo_utils.py +0 -0
  198. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/sandbox.py +0 -0
  199. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/cli/security.py +0 -0
  200. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/config.py +0 -0
  201. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/__init__.py +0 -0
  202. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/analysis.py +0 -0
  203. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/api_deprecation.py +0 -0
  204. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/base.py +0 -0
  205. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/billing.py +0 -0
  206. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/changelog.py +0 -0
  207. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/cli_token.py +0 -0
  208. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/detector_settings.py +0 -0
  209. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/email.py +0 -0
  210. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/finding.py +0 -0
  211. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/fix.py +0 -0
  212. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/gdpr.py +0 -0
  213. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/github.py +0 -0
  214. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/notification.py +0 -0
  215. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/organization.py +0 -0
  216. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/provenance_settings.py +0 -0
  217. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/quota_override.py +0 -0
  218. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/repository.py +0 -0
  219. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/status.py +0 -0
  220. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/uptime.py +0 -0
  221. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/user.py +0 -0
  222. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/user_preferences.py +0 -0
  223. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/models/webhook.py +0 -0
  224. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/repositories/__init__.py +0 -0
  225. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/repositories/fix.py +0 -0
  226. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/db/repositories/quota_override.py +0 -0
  227. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/__init__.py +0 -0
  228. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/architectural_bottleneck.py +0 -0
  229. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/async_antipattern.py +0 -0
  230. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/bandit_detector.py +0 -0
  231. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/base.py +0 -0
  232. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/circular_dependency.py +0 -0
  233. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/core_utility.py +0 -0
  234. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/data_clumps.py +0 -0
  235. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/deduplicator.py +0 -0
  236. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/degree_centrality.py +0 -0
  237. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/duplicate_rust.py +0 -0
  238. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/eslint_detector.py +0 -0
  239. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/external_tool_runner.py +0 -0
  240. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/feature_envy.py +0 -0
  241. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/generator_misuse.py +0 -0
  242. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/god_class.py +0 -0
  243. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/graphsage_detector.py +0 -0
  244. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/grouping.py +0 -0
  245. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/health_delta.py +0 -0
  246. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/inappropriate_intimacy.py +0 -0
  247. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/infinite_loop_detector.py +0 -0
  248. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/influential_code.py +0 -0
  249. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/jscpd_detector.py +0 -0
  250. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/lazy_class.py +0 -0
  251. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/long_parameter_list.py +0 -0
  252. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/message_chain.py +0 -0
  253. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/middle_man.py +0 -0
  254. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/ml_bug_detector.py +0 -0
  255. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/module_cohesion.py +0 -0
  256. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/multimodal_detector.py +0 -0
  257. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/mypy_detector.py +0 -0
  258. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/npm_audit_detector.py +0 -0
  259. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/pylint_detector.py +0 -0
  260. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/radon_detector.py +0 -0
  261. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/refused_bequest.py +0 -0
  262. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/risk_analyzer.py +0 -0
  263. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/root_cause_analyzer.py +0 -0
  264. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/ruff_import_detector.py +0 -0
  265. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/ruff_lint_detector.py +0 -0
  266. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/rust_graph_detectors.py +0 -0
  267. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/satd_detector.py +0 -0
  268. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/semgrep_detector.py +0 -0
  269. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/shotgun_surgery.py +0 -0
  270. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/taint_detector.py +0 -0
  271. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/temporal_metrics.py +0 -0
  272. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/test_smell.py +0 -0
  273. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/truly_unused_imports.py +0 -0
  274. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/tsc_detector.py +0 -0
  275. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/type_hint_coverage.py +0 -0
  276. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/voting_engine.py +0 -0
  277. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/detectors/vulture_detector.py +0 -0
  278. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/github/__init__.py +0 -0
  279. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/github/pr_analyzer.py +0 -0
  280. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/github/pr_commenter.py +0 -0
  281. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/__init__.py +0 -0
  282. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/base.py +0 -0
  283. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/enricher.py +0 -0
  284. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/external_labels.py +0 -0
  285. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/factory.py +0 -0
  286. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/falkordb_client.py +0 -0
  287. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/incremental_scc.py +0 -0
  288. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/migration.py +0 -0
  289. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/queries/__init__.py +0 -0
  290. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/queries/builders.py +0 -0
  291. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/queries/patterns.py +0 -0
  292. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/queries/traversal.py +0 -0
  293. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/schema.py +0 -0
  294. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/graph/tenant_factory.py +0 -0
  295. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/historical/__init__.py +0 -0
  296. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/historical/git_extractor.py +0 -0
  297. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/historical/metrics_collector.py +0 -0
  298. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/historical/timescale_client.py +0 -0
  299. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/hooks/__init__.py +0 -0
  300. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/hooks/pre_commit.py +0 -0
  301. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/http_client.py +0 -0
  302. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/integrations/__init__.py +0 -0
  303. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/integrations/git.py +0 -0
  304. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/logging_config.py +0 -0
  305. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/__init__.py +0 -0
  306. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/__main__.py +0 -0
  307. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/api_server.py +0 -0
  308. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/execution_env.py +0 -0
  309. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/models.py +0 -0
  310. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/pattern_detector.py +0 -0
  311. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/resources.py +0 -0
  312. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/schema_generator.py +0 -0
  313. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/mcp/server_generator.py +0 -0
  314. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/migrations/001_initial_schema.py +0 -0
  315. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/migrations/002_add_clue_nodes.py +0 -0
  316. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/migrations/003_add_session_nodes.py +0 -0
  317. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/migrations/__init__.py +0 -0
  318. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/migrations/manager.py +0 -0
  319. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/migrations/migration.py +0 -0
  320. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/__init__.py +0 -0
  321. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/bug_predictor.py +0 -0
  322. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/contrastive_learning.py +0 -0
  323. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/cross_project_trainer.py +0 -0
  324. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/graph_embeddings.py +0 -0
  325. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/graphsage_predictor.py +0 -0
  326. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/multimodal_analyzer.py +0 -0
  327. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/multimodal_fusion.py +0 -0
  328. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/node2vec_embeddings.py +0 -0
  329. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/similarity.py +0 -0
  330. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/ml/training_data.py +0 -0
  331. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/monorepo/__init__.py +0 -0
  332. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/monorepo/affected.py +0 -0
  333. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/monorepo/analyzer.py +0 -0
  334. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/monorepo/cross_package.py +0 -0
  335. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/monorepo/detector.py +0 -0
  336. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/monorepo/models.py +0 -0
  337. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/observability/__init__.py +0 -0
  338. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/observability/metrics.py +0 -0
  339. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/observability/tracing.py +0 -0
  340. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/__init__.py +0 -0
  341. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/base.py +0 -0
  342. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/base_tree_sitter_parser.py +0 -0
  343. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/generic_fallback_parser.py +0 -0
  344. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/python_parser.py +0 -0
  345. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/rust_parser.py +0 -0
  346. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/tree_sitter_adapter.py +0 -0
  347. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/tree_sitter_go.py +0 -0
  348. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/tree_sitter_java.py +0 -0
  349. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/tree_sitter_python.py +0 -0
  350. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/parsers/tree_sitter_typescript.py +0 -0
  351. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/pipeline/__init__.py +0 -0
  352. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/pipeline/ingestion.py +0 -0
  353. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/pipeline/temporal_ingestion.py +0 -0
  354. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/__init__.py +0 -0
  355. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/base_reporter.py +0 -0
  356. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/excel_reporter.py +0 -0
  357. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/html_reporter.py +0 -0
  358. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/markdown_reporter.py +0 -0
  359. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/pdf_reporter.py +0 -0
  360. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/reporters/sarif_reporter.py +0 -0
  361. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/rules/__init__.py +0 -0
  362. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/rules/daemon.py +0 -0
  363. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/rules/engine.py +0 -0
  364. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/rules/validator.py +0 -0
  365. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/__init__.py +0 -0
  366. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/alerts.py +0 -0
  367. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/billing.py +0 -0
  368. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/client.py +0 -0
  369. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/code_validator.py +0 -0
  370. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/config.py +0 -0
  371. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/enforcement.py +0 -0
  372. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/exceptions.py +0 -0
  373. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/metrics.py +0 -0
  374. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/override_service.py +0 -0
  375. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/quotas.py +0 -0
  376. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/session_tracker.py +0 -0
  377. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/skill_executor.py +0 -0
  378. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/test_executor.py +0 -0
  379. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/tiers.py +0 -0
  380. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/tool_executor.py +0 -0
  381. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/trial.py +0 -0
  382. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/sandbox/usage.py +0 -0
  383. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/security/__init__.py +0 -0
  384. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/security/compliance_reporter.py +0 -0
  385. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/security/dependency_scanner.py +0 -0
  386. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/security/sbom_generator.py +0 -0
  387. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/security/secrets_scanner.py +0 -0
  388. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/services/__init__.py +0 -0
  389. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/services/audit.py +0 -0
  390. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/services/email.py +0 -0
  391. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/services/github_status.py +0 -0
  392. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/services/quality_gates.py +0 -0
  393. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/services/webhook_payloads.py +0 -0
  394. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/analysis_complete.html +0 -0
  395. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/analysis_failed.html +0 -0
  396. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/base.html +0 -0
  397. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/deletion_cancelled.html +0 -0
  398. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/deletion_confirmation.html +0 -0
  399. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/health_regression.html +0 -0
  400. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/payment_failed.html +0 -0
  401. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/team_invite.html +0 -0
  402. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/templates/emails/welcome.html +0 -0
  403. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/tenant/__init__.py +0 -0
  404. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/tenant/context.py +0 -0
  405. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/tenant/logging.py +0 -0
  406. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/tenant/resolver.py +0 -0
  407. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/utils/encryption.py +0 -0
  408. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/validation.py +0 -0
  409. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/__init__.py +0 -0
  410. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/audit_tasks.py +0 -0
  411. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/changelog.py +0 -0
  412. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/cleanup.py +0 -0
  413. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/debounce.py +0 -0
  414. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/health_checks.py +0 -0
  415. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/hooks.py +0 -0
  416. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/limits.py +0 -0
  417. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/progress.py +0 -0
  418. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/tasks.py +0 -0
  419. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/webhook_delivery.py +0 -0
  420. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire/workers/webhooks.py +0 -0
  421. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/CONTRIBUTING.md +0 -0
  422. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/Cargo.toml +0 -0
  423. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/ROADMAP.md +0 -0
  424. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/benches/duplicate_bench.rs +0 -0
  425. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/benches/graph_bench.rs +0 -0
  426. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/benches/node2vec_bench.rs +0 -0
  427. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/benches/word2vec_bench.rs +0 -0
  428. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/docs/RUST_ARCHITECTURE.md +0 -0
  429. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/docs/RUST_DEVELOPMENT.md +0 -0
  430. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/call_resolver.rs +0 -0
  431. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/cfg.rs +0 -0
  432. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/complexity.rs +0 -0
  433. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/data_clumps.rs +0 -0
  434. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/dataflow.rs +0 -0
  435. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/duplicate.rs +0 -0
  436. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/errors.rs +0 -0
  437. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/findings_serde.rs +0 -0
  438. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/graph_algo.rs +0 -0
  439. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/graph_detectors.rs +0 -0
  440. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/hashing.rs +0 -0
  441. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/incremental_scc.rs +0 -0
  442. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/lcom.rs +0 -0
  443. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/lib.rs +0 -0
  444. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/path_cache.rs +0 -0
  445. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/pylint_rules.rs +0 -0
  446. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/satd.rs +0 -0
  447. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/similarity.rs +0 -0
  448. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/string_ops.rs +0 -0
  449. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/taint.rs +0 -0
  450. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/traversal.rs +0 -0
  451. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/tree_sitter_parser.rs +0 -0
  452. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/type_inference.rs +0 -0
  453. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/voting.rs +0 -0
  454. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire-fast/src/word2vec.rs +0 -0
  455. {repotoire-0.1.4 → repotoire-0.1.7}/repotoire_fast/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repotoire
3
- Version: 0.1.4
3
+ Version: 0.1.7
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -45,9 +45,6 @@ Requires-Dist: python-slugify>=8.0.0
45
45
  Requires-Dist: bleach>=6.0.0
46
46
  Requires-Dist: slowapi>=0.1.9
47
47
  Requires-Dist: uv-secure>=0.15.0
48
- Requires-Dist: datasets>=2.14.0
49
- Requires-Dist: sentence-transformers>=2.2.0
50
- Requires-Dist: accelerate>=0.26.0
51
48
  Requires-Dist: ruff>=0.1.0
52
49
  Requires-Dist: mypy>=1.7.0
53
50
  Requires-Dist: pylint>=3.0.0
@@ -79,6 +76,9 @@ Requires-Dist: tomli>=2.0.0 ; extra == 'dev'
79
76
  Requires-Dist: tenacity>=8.2.0 ; extra == 'dev'
80
77
  Requires-Dist: lancedb>=0.4.0 ; extra == 'lancedb'
81
78
  Requires-Dist: pyarrow>=14.0.0 ; extra == 'lancedb'
79
+ Requires-Dist: datasets>=2.14.0 ; extra == 'local-embeddings'
80
+ Requires-Dist: sentence-transformers>=2.2.0 ; extra == 'local-embeddings'
81
+ Requires-Dist: accelerate>=0.26.0 ; extra == 'local-embeddings'
82
82
  Requires-Dist: questionary>=2.0.0 ; extra == 'ml'
83
83
  Requires-Dist: scikit-learn>=1.3.0 ; extra == 'ml'
84
84
  Requires-Dist: joblib>=1.3.0 ; extra == 'ml'
@@ -138,12 +138,30 @@ This enables detection of complex issues like circular dependencies, architectur
138
138
 
139
139
  ## Features
140
140
 
141
- ### 🔍 Detection Capabilities
142
- - **Circular Dependencies** - Find import cycles using Tarjan's algorithm
143
- - **God Classes** - Detect classes with too many responsibilities
144
- - **Dead Code** - Identify unused functions and classes
145
- - **Tight Coupling** - Find architectural bottlenecks
146
- - **Modularity Analysis** - Suggest module boundaries using community detection
141
+ ### 🔍 30+ Graph-Powered Detectors
142
+
143
+ **Architectural Issues**
144
+ - **Circular Dependencies** - Import cycles via Tarjan's SCC algorithm
145
+ - **Hub Dependencies** - Fragile central nodes everything depends on
146
+ - **Layered Architecture Violations** - Cross-layer dependency detection
147
+ - **Change Coupling** - Files that always change together (temporal coupling)
148
+ - **Architectural Bottlenecks** - Single points of failure in call graphs
149
+
150
+ **Code Smells (Cross-File)**
151
+ - **Dead Code** - Functions/classes nothing in the codebase calls
152
+ - **God Classes** - Classes with too many responsibilities
153
+ - **Feature Envy** - Methods using other classes more than their own
154
+ - **Shotgun Surgery** - Changes requiring edits across many files
155
+ - **Inappropriate Intimacy** - Classes too tightly coupled
156
+ - **Middle Man** - Classes that just delegate everything
157
+
158
+ **Quality Metrics**
159
+ - **Module Cohesion** - How well modules stick together
160
+ - **Degree Centrality** - Most connected code (complexity hotspots)
161
+ - **Technical Debt Hotspots** - Areas with compounding issues
162
+ - **Package Stability** - Dependency direction analysis
163
+
164
+ **Plus:** Data clumps, long parameter lists, message chains, lazy classes, refused bequest, async antipatterns, generator misuse, test smells, type hint coverage, and more.
147
165
 
148
166
  ### 🤖 AI-Powered Insights
149
167
  - Semantic concept extraction from code
@@ -19,12 +19,30 @@ This enables detection of complex issues like circular dependencies, architectur
19
19
 
20
20
  ## Features
21
21
 
22
- ### 🔍 Detection Capabilities
23
- - **Circular Dependencies** - Find import cycles using Tarjan's algorithm
24
- - **God Classes** - Detect classes with too many responsibilities
25
- - **Dead Code** - Identify unused functions and classes
26
- - **Tight Coupling** - Find architectural bottlenecks
27
- - **Modularity Analysis** - Suggest module boundaries using community detection
22
+ ### 🔍 30+ Graph-Powered Detectors
23
+
24
+ **Architectural Issues**
25
+ - **Circular Dependencies** - Import cycles via Tarjan's SCC algorithm
26
+ - **Hub Dependencies** - Fragile central nodes everything depends on
27
+ - **Layered Architecture Violations** - Cross-layer dependency detection
28
+ - **Change Coupling** - Files that always change together (temporal coupling)
29
+ - **Architectural Bottlenecks** - Single points of failure in call graphs
30
+
31
+ **Code Smells (Cross-File)**
32
+ - **Dead Code** - Functions/classes nothing in the codebase calls
33
+ - **God Classes** - Classes with too many responsibilities
34
+ - **Feature Envy** - Methods using other classes more than their own
35
+ - **Shotgun Surgery** - Changes requiring edits across many files
36
+ - **Inappropriate Intimacy** - Classes too tightly coupled
37
+ - **Middle Man** - Classes that just delegate everything
38
+
39
+ **Quality Metrics**
40
+ - **Module Cohesion** - How well modules stick together
41
+ - **Degree Centrality** - Most connected code (complexity hotspots)
42
+ - **Technical Debt Hotspots** - Areas with compounding issues
43
+ - **Package Stability** - Dependency direction analysis
44
+
45
+ **Plus:** Data clumps, long parameter lists, message chains, lazy classes, refused bequest, async antipatterns, generator misuse, test smells, type hint coverage, and more.
28
46
 
29
47
  ### 🤖 AI-Powered Insights
30
48
  - Semantic concept extraction from code
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "repotoire"
7
- version = "0.1.4"
7
+ version = "0.1.7"
8
8
  description = "Graph-Powered Code Health Platform"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -63,10 +63,6 @@ dependencies = [
63
63
  "slowapi>=0.1.9", # Rate limiting for FastAPI endpoints
64
64
  # Security scanning (core feature)
65
65
  "uv-secure>=0.15.0", # Fast uv.lock vulnerability scanning
66
- # ML dependencies
67
- "datasets>=2.14.0", # Required for sentence-transformers fine-tuning
68
- "sentence-transformers>=2.2.0", # Local embedding models + contrastive learning
69
- "accelerate>=0.26.0", # Required for PyTorch Trainer
70
66
  # Hybrid detector dependencies (core feature)
71
67
  "ruff>=0.1.0", # Fast linting detector (RuffLintDetector)
72
68
  "mypy>=1.7.0", # Type checking detector
@@ -122,7 +118,11 @@ security = [
122
118
  ]
123
119
 
124
120
  local-embeddings = [
125
- # sentence-transformers now in core deps
121
+ # Heavy ML deps for local embedding models (2GB+ with CUDA)
122
+ # Only needed if NOT using deepinfra/API-based embeddings
123
+ "datasets>=2.14.0",
124
+ "sentence-transformers>=2.2.0",
125
+ "accelerate>=0.26.0",
126
126
  ]
127
127
 
128
128
  observability = [
@@ -165,8 +165,6 @@ anthropic = [
165
165
  repotoire = "repotoire.cli:main"
166
166
  repotoire-pre-commit = "repotoire.hooks.pre_commit:main"
167
167
  repotoire-mcp = "repotoire.mcp.api_server:main"
168
- repotoire-marketplace-mcp = "repotoire.mcp_marketplace.server:run_server"
169
- repotoire-marketplace-mcp-http = "repotoire.mcp_marketplace.http_server:run_http_server"
170
168
 
171
169
  [project.urls]
172
170
  Homepage = "https://github.com/yourusername/repotoire"
@@ -243,7 +241,7 @@ dev = [
243
241
 
244
242
  # Bump My Version configuration for semantic versioning
245
243
  [tool.bumpversion]
246
- current_version = "0.1.4"
244
+ current_version = "0.1.5"
247
245
  commit = true
248
246
  commit_args = "--no-verify"
249
247
  tag = true
@@ -5,7 +5,7 @@ Analyzes codebases using knowledge graphs to detect code smells,
5
5
  architectural issues, and technical debt.
6
6
  """
7
7
 
8
- __version__ = "0.1.4"
8
+ __version__ = "0.1.5"
9
9
 
10
10
  from repotoire.pipeline import IngestionPipeline
11
11
  from repotoire.graph import FalkorDBClient
@@ -19,3 +19,4 @@ __all__ = [
19
19
  "CodebaseHealth",
20
20
  "Finding",
21
21
  ]
22
+ # Cache bust Wed Feb 4 07:23:32 PM EST 2026
@@ -18,6 +18,7 @@ from repotoire.api.shared.auth.clerk import (
18
18
  get_optional_user_or_api_key,
19
19
  require_org,
20
20
  require_org_admin,
21
+ require_org_api_key,
21
22
  require_scope,
22
23
  )
23
24
 
@@ -49,6 +50,7 @@ __all__ = [
49
50
  "get_optional_user_or_api_key",
50
51
  "require_org",
51
52
  "require_org_admin",
53
+ "require_org_api_key",
52
54
  "require_scope",
53
55
  # State store
54
56
  "StateTokenStore",
@@ -159,6 +159,8 @@ async def get_optional_user(
159
159
  def require_org(user: ClerkUser = Depends(get_current_user)) -> ClerkUser:
160
160
  """
161
161
  Dependency that requires the user to be part of an organization.
162
+
163
+ NOTE: Only supports JWT authentication. For API key support, use require_org_api_key.
162
164
 
163
165
  Usage:
164
166
  @router.get("/org-only")
@@ -292,6 +294,31 @@ async def get_current_user_or_api_key(
292
294
  )
293
295
 
294
296
 
297
+ def require_org_api_key(user: ClerkUser = Depends(get_current_user_or_api_key)) -> ClerkUser:
298
+ """
299
+ Dependency that requires the user to be part of an organization.
300
+
301
+ Supports both JWT tokens and API keys. Use this for endpoints that need to
302
+ support CLI/API key access.
303
+
304
+ Usage:
305
+ @router.get("/org-only")
306
+ async def org_route(user: ClerkUser = Depends(require_org_api_key)):
307
+ return {"org_id": user.org_id}
308
+ """
309
+ if not user.org_id:
310
+ raise HTTPException(
311
+ status_code=status.HTTP_403_FORBIDDEN,
312
+ detail={
313
+ "error": "ORG_REQUIRED",
314
+ "message": "Organization membership required. Your current session is not associated with an organization.",
315
+ "user_id": user.user_id,
316
+ "hint": "Please select an organization in the web UI, or use 'repotoire login' to authenticate with an org-scoped API key."
317
+ },
318
+ )
319
+ return user
320
+
321
+
295
322
  async def get_optional_user_or_api_key(
296
323
  request: Request,
297
324
  credentials: Optional[HTTPAuthorizationCredentials] = Depends(security),
@@ -41,7 +41,6 @@ from .github import GitHubAppClient, get_github_client
41
41
  from .stripe_service import (
42
42
  PRICE_IDS,
43
43
  SEAT_PRICE_IDS,
44
- StripeConnectService,
45
44
  StripeService,
46
45
  price_id_to_tier,
47
46
  )
@@ -75,10 +74,9 @@ __all__ = [
75
74
  "get_plan_limits",
76
75
  "has_feature",
77
76
  "increment_usage",
78
- # Stripe (legacy webhook handling + Connect)
77
+ # Stripe (legacy webhook handling)
79
78
  "PRICE_IDS",
80
79
  "SEAT_PRICE_IDS",
81
- "StripeConnectService",
82
80
  "StripeService",
83
81
  "price_id_to_tier",
84
82
  # GDPR
@@ -0,0 +1,251 @@
1
+ """Stripe service for legacy webhook handling.
2
+
3
+ This module provides:
4
+ 1. Legacy webhook handling for existing subscriptions (migrated to Clerk Billing)
5
+
6
+ Migration Note (2026-01):
7
+ - NEW subscriptions are managed via Clerk Billing
8
+ - EXISTING subscriptions may still send Stripe webhooks until migrated
9
+ - Use Clerk's <PricingTable /> and <AccountPortal /> for new subscription management
10
+ """
11
+
12
+ import logging
13
+ import os
14
+ from typing import Any, Dict
15
+
16
+ import stripe
17
+ from fastapi import HTTPException
18
+
19
+ from repotoire.db.models import PlanTier
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+ # Configure Stripe API key (still needed for webhooks)
24
+ stripe.api_key = os.environ.get("STRIPE_SECRET_KEY", "")
25
+
26
+
27
+ class StripeConfigError(Exception):
28
+ """Raised when Stripe configuration is invalid or missing."""
29
+
30
+ pass
31
+
32
+
33
+ def validate_stripe_config() -> dict[str, Any]:
34
+ """Validate Stripe configuration at startup.
35
+
36
+ Checks that all required environment variables are set and valid.
37
+ Should be called during application startup to fail fast on misconfiguration.
38
+
39
+ Returns:
40
+ Dict with configuration status and any warnings
41
+
42
+ Raises:
43
+ StripeConfigError: If critical configuration is missing
44
+ """
45
+ errors: list[str] = []
46
+ warnings: list[str] = []
47
+
48
+ # Check API key
49
+ api_key = os.environ.get("STRIPE_SECRET_KEY", "")
50
+ if not api_key:
51
+ errors.append("STRIPE_SECRET_KEY is not set")
52
+ elif api_key.startswith("sk_live_") and os.environ.get("ENVIRONMENT") == "development":
53
+ # SECURITY: Live keys in development can result in real charges
54
+ # This must be a hard error to prevent accidental financial transactions
55
+ errors.append(
56
+ "SECURITY ERROR: Using Stripe LIVE key in development environment. "
57
+ "This could result in real charges. Use a test key (sk_test_*) for development. "
58
+ "Set ENVIRONMENT=production if this is intentional."
59
+ )
60
+ elif api_key.startswith("sk_test_") and os.environ.get("ENVIRONMENT") == "production":
61
+ errors.append("Using test Stripe key in production environment")
62
+
63
+ # Check webhook secret
64
+ webhook_secret = os.environ.get("STRIPE_WEBHOOK_SECRET", "")
65
+ if not webhook_secret:
66
+ warnings.append("STRIPE_WEBHOOK_SECRET not set - webhooks will fail")
67
+
68
+ # Check price IDs (optional but recommended)
69
+ price_vars = [
70
+ "STRIPE_PRICE_PRO_BASE",
71
+ "STRIPE_PRICE_PRO_SEAT",
72
+ "STRIPE_PRICE_ENTERPRISE_BASE",
73
+ "STRIPE_PRICE_ENTERPRISE_SEAT",
74
+ ]
75
+ missing_prices = [v for v in price_vars if not os.environ.get(v)]
76
+ if missing_prices:
77
+ warnings.append(f"Missing price IDs: {', '.join(missing_prices)} - tier mapping may fail")
78
+
79
+ if errors:
80
+ error_msg = "Stripe configuration errors:\n" + "\n".join(f" - {e}" for e in errors)
81
+ logger.critical(error_msg)
82
+ raise StripeConfigError(error_msg)
83
+
84
+ if warnings:
85
+ for warning in warnings:
86
+ logger.warning(f"Stripe config warning: {warning}")
87
+
88
+ return {
89
+ "valid": True,
90
+ "warnings": warnings,
91
+ "mode": "live" if api_key.startswith("sk_live_") else "test",
92
+ }
93
+
94
+
95
+ def handle_stripe_error(error: stripe.error.StripeError, context: str) -> HTTPException:
96
+ """Convert Stripe errors to appropriate HTTP exceptions.
97
+
98
+ Maps Stripe error types to HTTP status codes:
99
+ - CardError: 402 (Payment Required) - card was declined
100
+ - RateLimitError: 429 (Too Many Requests) - rate limited
101
+ - InvalidRequestError: 400 (Bad Request) - invalid parameters
102
+ - AuthenticationError: 401 (Unauthorized) - API key issue
103
+ - APIConnectionError: 503 (Service Unavailable) - network issue
104
+ - StripeError: 500 (Internal Server Error) - generic fallback
105
+
106
+ Args:
107
+ error: The Stripe error
108
+ context: Description of what operation failed
109
+
110
+ Returns:
111
+ HTTPException with appropriate status code and user-friendly message
112
+ """
113
+ logger.error(f"Stripe error in {context}: {type(error).__name__}: {error}")
114
+
115
+ if isinstance(error, stripe.error.CardError):
116
+ # Card was declined
117
+ return HTTPException(
118
+ status_code=402,
119
+ detail=error.user_message or "Your card was declined. Please try a different payment method.",
120
+ )
121
+ elif isinstance(error, stripe.error.RateLimitError):
122
+ # Too many requests to Stripe
123
+ return HTTPException(
124
+ status_code=429,
125
+ detail="Too many payment requests. Please wait a moment and try again.",
126
+ )
127
+ elif isinstance(error, stripe.error.InvalidRequestError):
128
+ # Invalid parameters sent to Stripe
129
+ return HTTPException(
130
+ status_code=400,
131
+ detail="Invalid payment request. Please check your details and try again.",
132
+ )
133
+ elif isinstance(error, stripe.error.AuthenticationError):
134
+ # API key issues - log as critical, return generic error
135
+ logger.critical(f"Stripe authentication failed: {error}")
136
+ return HTTPException(
137
+ status_code=500,
138
+ detail="Payment service configuration error. Please contact support.",
139
+ )
140
+ elif isinstance(error, stripe.error.APIConnectionError):
141
+ # Network issues connecting to Stripe
142
+ return HTTPException(
143
+ status_code=503,
144
+ detail="Payment service temporarily unavailable. Please try again.",
145
+ )
146
+ else:
147
+ # Generic Stripe error
148
+ return HTTPException(
149
+ status_code=500,
150
+ detail="Payment processing failed. Please try again or contact support.",
151
+ )
152
+
153
+
154
+ # ============================================================================
155
+ # Price ID Mapping (for legacy webhook handling)
156
+ # ============================================================================
157
+
158
+ # Maps Stripe price IDs to plan tiers
159
+ PRICE_IDS: Dict[str, str] = {
160
+ os.environ.get("STRIPE_PRICE_PRO_BASE", ""): "pro",
161
+ os.environ.get("STRIPE_PRICE_ENTERPRISE_BASE", ""): "enterprise",
162
+ }
163
+
164
+ SEAT_PRICE_IDS: Dict[str, str] = {
165
+ os.environ.get("STRIPE_PRICE_PRO_SEAT", ""): "pro",
166
+ os.environ.get("STRIPE_PRICE_ENTERPRISE_SEAT", ""): "enterprise",
167
+ }
168
+
169
+
170
+ def price_id_to_tier(price_id: str) -> PlanTier:
171
+ """Convert Stripe price ID to PlanTier enum.
172
+
173
+ Args:
174
+ price_id: Stripe price ID
175
+
176
+ Returns:
177
+ Corresponding PlanTier
178
+
179
+ Note:
180
+ Returns FREE for unknown price IDs (fail-safe)
181
+ """
182
+ tier_str = PRICE_IDS.get(price_id) or SEAT_PRICE_IDS.get(price_id)
183
+ if tier_str == "pro":
184
+ return PlanTier.PRO
185
+ elif tier_str == "enterprise":
186
+ return PlanTier.ENTERPRISE
187
+ else:
188
+ logger.warning(f"Unknown price ID: {price_id}, defaulting to FREE")
189
+ return PlanTier.FREE
190
+
191
+
192
+ # ============================================================================
193
+ # Legacy StripeService (for webhook handling)
194
+ # ============================================================================
195
+
196
+
197
+ class StripeService:
198
+ """Legacy Stripe service for webhook handling.
199
+
200
+ Note: New subscription management should use Clerk Billing.
201
+ This class exists only for handling webhooks from existing subscriptions.
202
+ """
203
+
204
+ @staticmethod
205
+ def construct_webhook_event(
206
+ payload: bytes,
207
+ signature: str,
208
+ webhook_secret: str,
209
+ ) -> Dict[str, Any]:
210
+ """Construct and verify a Stripe webhook event.
211
+
212
+ Args:
213
+ payload: Raw request body
214
+ signature: Stripe-Signature header
215
+ webhook_secret: Webhook secret for verification
216
+
217
+ Returns:
218
+ Verified Stripe event dict
219
+
220
+ Raises:
221
+ HTTPException: If signature verification fails
222
+ """
223
+ try:
224
+ event = stripe.Webhook.construct_event(
225
+ payload, signature, webhook_secret
226
+ )
227
+ return event
228
+ except stripe.error.SignatureVerificationError:
229
+ raise HTTPException(status_code=400, detail="Invalid signature")
230
+ except Exception as e:
231
+ logger.error(f"Webhook construction error: {e}")
232
+ raise HTTPException(status_code=400, detail="Invalid webhook")
233
+
234
+ @staticmethod
235
+ def get_subscription(subscription_id: str) -> Dict[str, Any]:
236
+ """Get a Stripe subscription by ID.
237
+
238
+ Args:
239
+ subscription_id: Stripe subscription ID
240
+
241
+ Returns:
242
+ Stripe subscription object as dict
243
+ """
244
+ try:
245
+ return stripe.Subscription.retrieve(subscription_id)
246
+ except stripe.error.StripeError as e:
247
+ logger.error(f"Error retrieving subscription {subscription_id}: {e}")
248
+ raise HTTPException(
249
+ status_code=500,
250
+ detail="Failed to retrieve subscription. Please try again or contact support."
251
+ )
@@ -22,7 +22,6 @@ from repotoire.api.v1.routes import (
22
22
  github,
23
23
  graph,
24
24
  historical,
25
- marketplace,
26
25
  monorepo,
27
26
  narratives,
28
27
  notifications,
@@ -39,8 +38,6 @@ from repotoire.api.v1.routes import (
39
38
  )
40
39
  from repotoire.api.v1.routes.admin import changelog as admin_changelog
41
40
  from repotoire.api.v1.routes.admin import overrides as admin_overrides
42
- from repotoire.api.v1.routes.admin import reports as admin_reports
43
- from repotoire.api.v1.routes.admin import reviews as admin_reviews
44
41
  from repotoire.api.v1.routes.admin import status as admin_status
45
42
 
46
43
  # v1-specific OpenAPI tags
@@ -155,11 +152,6 @@ V1_OPENAPI_TAGS = [
155
152
  "description": "Public changelog and release notes. View new features, improvements, "
156
153
  "bug fixes, and subscribe to updates. No authentication required for public endpoints.",
157
154
  },
158
- {
159
- "name": "marketplace",
160
- "description": "Repotoire Marketplace for AI skills, commands, styles, and prompts. "
161
- "Browse, install, publish, and manage marketplace assets.",
162
- },
163
155
  {
164
156
  "name": "narratives",
165
157
  "description": "AI-powered narrative generation. Executive summaries, metric insights, "
@@ -260,7 +252,6 @@ v1_app.include_router(fixes.router)
260
252
  v1_app.include_router(github.router)
261
253
  v1_app.include_router(graph.router)
262
254
  v1_app.include_router(historical.router)
263
- v1_app.include_router(marketplace.router)
264
255
  v1_app.include_router(monorepo.router)
265
256
  v1_app.include_router(narratives.router)
266
257
  v1_app.include_router(notifications.router)
@@ -276,9 +267,6 @@ v1_app.include_router(webhooks.router)
276
267
  v1_app.include_router(status.router)
277
268
  v1_app.include_router(changelog.router)
278
269
  v1_app.include_router(admin_overrides.router)
279
- v1_app.include_router(admin_reports.router)
280
- v1_app.include_router(admin_reports.admin_router) # Admin report management endpoints
281
- v1_app.include_router(admin_reviews.router)
282
270
  v1_app.include_router(admin_status.router)
283
271
  v1_app.include_router(admin_changelog.router)
284
272
 
@@ -17,7 +17,6 @@ from repotoire.api.v1.routes import (
17
17
  github,
18
18
  graph,
19
19
  historical,
20
- marketplace,
21
20
  monorepo,
22
21
  narratives,
23
22
  notifications,
@@ -50,7 +49,6 @@ __all__ = [
50
49
  "github",
51
50
  "graph",
52
51
  "historical",
53
- "marketplace",
54
52
  "monorepo",
55
53
  "narratives",
56
54
  "notifications",
@@ -0,0 +1,5 @@
1
+ """Admin API routes for Repotoire."""
2
+
3
+ from repotoire.api.v1.routes.admin import overrides, status
4
+
5
+ __all__ = ["overrides", "status"]
@@ -9,7 +9,7 @@ from pydantic import BaseModel, Field
9
9
  from sqlalchemy import select
10
10
  from sqlalchemy.ext.asyncio import AsyncSession
11
11
 
12
- from repotoire.api.shared.auth import ClerkUser, get_current_user
12
+ from repotoire.api.shared.auth import ClerkUser, get_current_user_or_api_key
13
13
  from repotoire.api.shared.services.billing import (
14
14
  PLAN_LIMITS,
15
15
  get_current_tier,
@@ -39,7 +39,7 @@ class UsageResponse(BaseModel):
39
39
 
40
40
  @router.get("", response_model=UsageResponse)
41
41
  async def get_usage(
42
- user: ClerkUser = Depends(get_current_user),
42
+ user: ClerkUser = Depends(get_current_user_or_api_key),
43
43
  db: AsyncSession = Depends(get_db),
44
44
  ) -> UsageResponse:
45
45
  """Get current usage for the authenticated user's organization.
@@ -152,7 +152,7 @@ class UsageIncrementResponse(BaseModel):
152
152
  @router.post("/increment", response_model=UsageIncrementResponse)
153
153
  async def increment_usage_counter(
154
154
  request: UsageIncrementRequest,
155
- user: ClerkUser = Depends(get_current_user),
155
+ user: ClerkUser = Depends(get_current_user_or_api_key),
156
156
  db: AsyncSession = Depends(get_db),
157
157
  ) -> UsageIncrementResponse:
158
158
  """Increment a usage counter for the organization.