rails-ai-bridge 2.2.1 → 3.0.0

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/.coderabbit.yaml +68 -0
  3. data/.markdownlint.json +8 -0
  4. data/.reek.yml +954 -0
  5. data/.rubocop.yml +56 -6
  6. data/AGENTS.md +55 -0
  7. data/CHANGELOG.md +139 -37
  8. data/CLAUDE.md +9 -3
  9. data/README.md +74 -18
  10. data/Rakefile +2 -5
  11. data/SECURITY.md +66 -26
  12. data/docs/COVERAGE.md +33 -42
  13. data/docs/GUIDE.md +49 -0
  14. data/docs/roadmaps.md +5 -2
  15. data/lib/generators/rails_ai_bridge/install/install_generator.rb +198 -89
  16. data/lib/generators/rails_ai_bridge/install/profile_resolver.rb +104 -0
  17. data/lib/rails-ai-bridge.rb +1 -1
  18. data/lib/rails_ai_bridge/assistant_formats_preference.rb +8 -11
  19. data/lib/rails_ai_bridge/config/auth.rb +1 -1
  20. data/lib/rails_ai_bridge/config/introspection.rb +23 -19
  21. data/lib/rails_ai_bridge/config/mcp.rb +29 -8
  22. data/lib/rails_ai_bridge/config/output.rb +5 -0
  23. data/lib/rails_ai_bridge/config/server.rb +3 -3
  24. data/lib/rails_ai_bridge/configuration.rb +42 -41
  25. data/lib/rails_ai_bridge/context_provider.rb +4 -10
  26. data/lib/rails_ai_bridge/doctor/checkers/base_checker.rb +1 -1
  27. data/lib/rails_ai_bridge/doctor/checkers/bridge_metadata_checker.rb +5 -4
  28. data/lib/rails_ai_bridge/doctor/checkers/context_files_checker.rb +5 -4
  29. data/lib/rails_ai_bridge/doctor/checkers/controllers_checker.rb +4 -3
  30. data/lib/rails_ai_bridge/doctor/checkers/gems_checker.rb +4 -4
  31. data/lib/rails_ai_bridge/doctor/checkers/i18n_checker.rb +4 -3
  32. data/lib/rails_ai_bridge/doctor/checkers/mcp_buildable_checker.rb +4 -3
  33. data/lib/rails_ai_bridge/doctor/checkers/migrations_checker.rb +4 -3
  34. data/lib/rails_ai_bridge/doctor/checkers/models_checker.rb +4 -3
  35. data/lib/rails_ai_bridge/doctor/checkers/ripgrep_checker.rb +5 -4
  36. data/lib/rails_ai_bridge/doctor/checkers/routes_checker.rb +5 -4
  37. data/lib/rails_ai_bridge/doctor/checkers/schema_checker.rb +4 -4
  38. data/lib/rails_ai_bridge/doctor/checkers/stimulus_mcp_tool_checker.rb +13 -10
  39. data/lib/rails_ai_bridge/doctor/checkers/tests_checker.rb +6 -5
  40. data/lib/rails_ai_bridge/doctor/checkers/view_mcp_tool_checker.rb +13 -10
  41. data/lib/rails_ai_bridge/doctor/checkers/views_checker.rb +4 -3
  42. data/lib/rails_ai_bridge/engine.rb +5 -5
  43. data/lib/rails_ai_bridge/exclusion_helper.rb +1 -1
  44. data/lib/rails_ai_bridge/fingerprinter.rb +2 -2
  45. data/lib/rails_ai_bridge/http_transport_app.rb +10 -9
  46. data/lib/rails_ai_bridge/introspector.rb +3 -5
  47. data/lib/rails_ai_bridge/introspectors/action_mailbox_introspector.rb +11 -9
  48. data/lib/rails_ai_bridge/introspectors/action_text_introspector.rb +7 -7
  49. data/lib/rails_ai_bridge/introspectors/active_storage_introspector.rb +20 -18
  50. data/lib/rails_ai_bridge/introspectors/api_introspector.rb +19 -17
  51. data/lib/rails_ai_bridge/introspectors/asset_pipeline_introspector.rb +26 -22
  52. data/lib/rails_ai_bridge/introspectors/auth_introspector.rb +18 -19
  53. data/lib/rails_ai_bridge/introspectors/config_introspector.rb +17 -18
  54. data/lib/rails_ai_bridge/introspectors/controller_introspector.rb +25 -19
  55. data/lib/rails_ai_bridge/introspectors/convention_detector.rb +50 -45
  56. data/lib/rails_ai_bridge/introspectors/database_stats_introspector.rb +7 -9
  57. data/lib/rails_ai_bridge/introspectors/devops_introspector.rb +17 -14
  58. data/lib/rails_ai_bridge/introspectors/engine_introspector.rb +38 -35
  59. data/lib/rails_ai_bridge/introspectors/gem_introspector.rb +24 -125
  60. data/lib/rails_ai_bridge/introspectors/gem_registry.rb +122 -0
  61. data/lib/rails_ai_bridge/introspectors/i18n_introspector.rb +16 -12
  62. data/lib/rails_ai_bridge/introspectors/job_introspector.rb +27 -15
  63. data/lib/rails_ai_bridge/introspectors/middleware_introspector.rb +28 -28
  64. data/lib/rails_ai_bridge/introspectors/migration_introspector.rb +32 -32
  65. data/lib/rails_ai_bridge/introspectors/model_introspector.rb +61 -31
  66. data/lib/rails_ai_bridge/introspectors/multi_database_introspector.rb +25 -23
  67. data/lib/rails_ai_bridge/introspectors/non_ar_models_introspector.rb +16 -16
  68. data/lib/rails_ai_bridge/introspectors/rake_task_introspector.rb +16 -16
  69. data/lib/rails_ai_bridge/introspectors/route_introspector.rb +15 -14
  70. data/lib/rails_ai_bridge/introspectors/schema/static_schema_parser.rb +13 -12
  71. data/lib/rails_ai_bridge/introspectors/schema_introspector.rb +10 -10
  72. data/lib/rails_ai_bridge/introspectors/seeds_introspector.rb +14 -13
  73. data/lib/rails_ai_bridge/introspectors/stimulus_introspector.rb +12 -9
  74. data/lib/rails_ai_bridge/introspectors/test_introspector.rb +42 -35
  75. data/lib/rails_ai_bridge/introspectors/turbo_introspector.rb +12 -12
  76. data/lib/rails_ai_bridge/introspectors/view_introspector.rb +30 -26
  77. data/lib/rails_ai_bridge/mcp/auth/base_strategy.rb +1 -1
  78. data/lib/rails_ai_bridge/mcp/auth/strategies/bearer_token.rb +4 -3
  79. data/lib/rails_ai_bridge/mcp/auth/strategies/jwt.rb +4 -5
  80. data/lib/rails_ai_bridge/mcp/authenticator.rb +7 -9
  81. data/lib/rails_ai_bridge/mcp/http_rate_limiter.rb +1 -1
  82. data/lib/rails_ai_bridge/mcp/http_structured_log.rb +4 -4
  83. data/lib/rails_ai_bridge/middleware.rb +3 -3
  84. data/lib/rails_ai_bridge/model_semantic_classifier.rb +20 -17
  85. data/lib/rails_ai_bridge/resources.rb +164 -83
  86. data/lib/rails_ai_bridge/serializers/context_file_serializer.rb +63 -55
  87. data/lib/rails_ai_bridge/serializers/context_summary.rb +43 -13
  88. data/lib/rails_ai_bridge/serializers/formatters/providers/claude_header_formatter.rb +1 -1
  89. data/lib/rails_ai_bridge/serializers/formatters/providers/codex_footer_formatter.rb +1 -1
  90. data/lib/rails_ai_bridge/serializers/formatters/providers/codex_header_formatter.rb +1 -1
  91. data/lib/rails_ai_bridge/serializers/formatters/providers/copilot_footer_formatter.rb +1 -1
  92. data/lib/rails_ai_bridge/serializers/formatters/providers/copilot_header_formatter.rb +1 -1
  93. data/lib/rails_ai_bridge/serializers/formatters/providers/footer_formatter.rb +1 -1
  94. data/lib/rails_ai_bridge/serializers/formatters/providers/gemini_footer_formatter.rb +1 -1
  95. data/lib/rails_ai_bridge/serializers/formatters/providers/gemini_header_formatter.rb +1 -1
  96. data/lib/rails_ai_bridge/serializers/formatters/providers/header_formatter.rb +1 -1
  97. data/lib/rails_ai_bridge/serializers/formatters/providers/mcp_guide_formatter.rb +1 -1
  98. data/lib/rails_ai_bridge/serializers/formatters/providers/rules_footer_formatter.rb +1 -1
  99. data/lib/rails_ai_bridge/serializers/formatters/sections/action_mailbox_formatter.rb +1 -1
  100. data/lib/rails_ai_bridge/serializers/formatters/sections/action_text_formatter.rb +1 -1
  101. data/lib/rails_ai_bridge/serializers/formatters/sections/active_storage_formatter.rb +3 -7
  102. data/lib/rails_ai_bridge/serializers/formatters/sections/api_formatter.rb +4 -6
  103. data/lib/rails_ai_bridge/serializers/formatters/sections/app_overview_formatter.rb +1 -1
  104. data/lib/rails_ai_bridge/serializers/formatters/sections/assets_formatter.rb +3 -5
  105. data/lib/rails_ai_bridge/serializers/formatters/sections/auth_formatter.rb +3 -7
  106. data/lib/rails_ai_bridge/serializers/formatters/sections/config_formatter.rb +4 -4
  107. data/lib/rails_ai_bridge/serializers/formatters/sections/controllers_formatter.rb +6 -10
  108. data/lib/rails_ai_bridge/serializers/formatters/sections/conventions_formatter.rb +29 -29
  109. data/lib/rails_ai_bridge/serializers/formatters/sections/devops_formatter.rb +5 -5
  110. data/lib/rails_ai_bridge/serializers/formatters/sections/engines_formatter.rb +1 -1
  111. data/lib/rails_ai_bridge/serializers/formatters/sections/gems_formatter.rb +4 -4
  112. data/lib/rails_ai_bridge/serializers/formatters/sections/i18n_formatter.rb +2 -2
  113. data/lib/rails_ai_bridge/serializers/formatters/sections/jobs_formatter.rb +2 -2
  114. data/lib/rails_ai_bridge/serializers/formatters/sections/middleware_formatter.rb +2 -2
  115. data/lib/rails_ai_bridge/serializers/formatters/sections/migrations_formatter.rb +3 -3
  116. data/lib/rails_ai_bridge/serializers/formatters/sections/models_formatter.rb +4 -3
  117. data/lib/rails_ai_bridge/serializers/formatters/sections/multi_database_formatter.rb +3 -3
  118. data/lib/rails_ai_bridge/serializers/formatters/sections/rake_tasks_formatter.rb +2 -2
  119. data/lib/rails_ai_bridge/serializers/formatters/sections/routes_formatter.rb +1 -1
  120. data/lib/rails_ai_bridge/serializers/formatters/sections/schema_formatter.rb +2 -2
  121. data/lib/rails_ai_bridge/serializers/formatters/sections/seeds_formatter.rb +4 -4
  122. data/lib/rails_ai_bridge/serializers/formatters/sections/tests_formatter.rb +1 -1
  123. data/lib/rails_ai_bridge/serializers/formatters/sections/turbo_formatter.rb +4 -4
  124. data/lib/rails_ai_bridge/serializers/formatters/sections/views_formatter.rb +3 -3
  125. data/lib/rails_ai_bridge/serializers/json_serializer.rb +1 -1
  126. data/lib/rails_ai_bridge/serializers/providers/base.rb +3 -0
  127. data/lib/rails_ai_bridge/serializers/providers/base_provider_serializer.rb +151 -124
  128. data/lib/rails_ai_bridge/serializers/providers/claude_rules_serializer.rb +94 -89
  129. data/lib/rails_ai_bridge/serializers/providers/claude_serializer.rb +3 -4
  130. data/lib/rails_ai_bridge/serializers/providers/codex_serializer.rb +23 -24
  131. data/lib/rails_ai_bridge/serializers/providers/codex_support_serializer.rb +4 -4
  132. data/lib/rails_ai_bridge/serializers/providers/collaborators/line_enforcer.rb +64 -0
  133. data/lib/rails_ai_bridge/serializers/providers/collaborators/model_line_formatter.rb +335 -0
  134. data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_architecture_builder.rb +40 -0
  135. data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_document_builder.rb +66 -0
  136. data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_key_considerations_builder.rb +92 -0
  137. data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_model_section_builder.rb +103 -0
  138. data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_notable_gems_builder.rb +110 -0
  139. data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_stack_overview_builder.rb +49 -0
  140. data/lib/rails_ai_bridge/serializers/providers/collaborators/stack_overview_builder.rb +169 -0
  141. data/lib/rails_ai_bridge/serializers/providers/copilot_instructions_serializer.rb +62 -60
  142. data/lib/rails_ai_bridge/serializers/providers/copilot_serializer.rb +51 -51
  143. data/lib/rails_ai_bridge/serializers/providers/cursor_rules_serializer.rb +87 -89
  144. data/lib/rails_ai_bridge/serializers/providers/factory.rb +55 -0
  145. data/lib/rails_ai_bridge/serializers/providers/gemini_serializer.rb +3 -4
  146. data/lib/rails_ai_bridge/serializers/providers/mcp_tool_reference_formatter.rb +1 -1
  147. data/lib/rails_ai_bridge/serializers/providers/rules_orchestrator.rb +7 -121
  148. data/lib/rails_ai_bridge/serializers/providers/rules_serializer.rb +42 -43
  149. data/lib/rails_ai_bridge/serializers/providers/windsurf_rules_serializer.rb +29 -28
  150. data/lib/rails_ai_bridge/serializers/providers/windsurf_serializer.rb +30 -30
  151. data/lib/rails_ai_bridge/serializers/regeneration_footer.rb +1 -1
  152. data/lib/rails_ai_bridge/serializers/shared_assistant_guidance.rb +77 -75
  153. data/lib/rails_ai_bridge/server.rb +105 -30
  154. data/lib/rails_ai_bridge/service/result.rb +92 -0
  155. data/lib/rails_ai_bridge/service.rb +56 -0
  156. data/lib/rails_ai_bridge/service_errors.rb +43 -0
  157. data/lib/rails_ai_bridge/services/app_introspection_service.rb +72 -0
  158. data/lib/rails_ai_bridge/services/configuration_service.rb +59 -0
  159. data/lib/rails_ai_bridge/services/context_generation_service.rb +64 -0
  160. data/lib/rails_ai_bridge/services/file_management_service.rb +141 -0
  161. data/lib/rails_ai_bridge/tasks/rails_ai_bridge.rake +62 -65
  162. data/lib/rails_ai_bridge/tools/base_tool.rb +7 -7
  163. data/lib/rails_ai_bridge/tools/get_config.rb +9 -9
  164. data/lib/rails_ai_bridge/tools/get_controllers.rb +26 -26
  165. data/lib/rails_ai_bridge/tools/get_conventions.rb +41 -40
  166. data/lib/rails_ai_bridge/tools/get_gems.rb +15 -13
  167. data/lib/rails_ai_bridge/tools/get_model_details.rb +20 -17
  168. data/lib/rails_ai_bridge/tools/get_routes.rb +36 -31
  169. data/lib/rails_ai_bridge/tools/get_schema.rb +26 -23
  170. data/lib/rails_ai_bridge/tools/get_stimulus.rb +24 -24
  171. data/lib/rails_ai_bridge/tools/get_test_info.rb +7 -7
  172. data/lib/rails_ai_bridge/tools/get_view/base_formatter.rb +3 -3
  173. data/lib/rails_ai_bridge/tools/get_view/full_formatter.rb +4 -4
  174. data/lib/rails_ai_bridge/tools/get_view/specific_view_formatter.rb +5 -5
  175. data/lib/rails_ai_bridge/tools/get_view/standard_formatter.rb +4 -4
  176. data/lib/rails_ai_bridge/tools/get_view/summary_formatter.rb +3 -3
  177. data/lib/rails_ai_bridge/tools/get_view.rb +15 -14
  178. data/lib/rails_ai_bridge/tools/model_details/full_formatter.rb +3 -3
  179. data/lib/rails_ai_bridge/tools/model_details/non_ar_models_appendix.rb +10 -10
  180. data/lib/rails_ai_bridge/tools/model_details/single_model_formatter.rb +15 -13
  181. data/lib/rails_ai_bridge/tools/model_details/standard_formatter.rb +3 -3
  182. data/lib/rails_ai_bridge/tools/model_details/summary_formatter.rb +1 -1
  183. data/lib/rails_ai_bridge/tools/schema/full_formatter.rb +3 -5
  184. data/lib/rails_ai_bridge/tools/schema/standard_formatter.rb +4 -4
  185. data/lib/rails_ai_bridge/tools/schema/summary_formatter.rb +3 -3
  186. data/lib/rails_ai_bridge/tools/schema/table_formatter.rb +6 -6
  187. data/lib/rails_ai_bridge/tools/search_code/formatter.rb +1 -2
  188. data/lib/rails_ai_bridge/tools/search_code.rb +143 -82
  189. data/lib/rails_ai_bridge/version.rb +1 -1
  190. data/lib/rails_ai_bridge/view_file_analyzer.rb +4 -6
  191. data/lib/rails_ai_bridge/watcher/bridge_regenerator.rb +5 -2
  192. data/lib/rails_ai_bridge/watcher.rb +13 -13
  193. data/lib/rails_ai_bridge.rb +22 -9
  194. data/rails-ai-bridge.gemspec +22 -31
  195. data/server.json +1 -1
  196. data/test_table.md +3 -0
  197. metadata +36 -112
  198. data/exe/rails-ai-bridge +0 -95
  199. data/tasks/prd-enhanced-context.md +0 -223
  200. data/tasks/prd-freshness-stamp.md +0 -229
  201. data/tasks/prd-incremental-ci.md +0 -138
  202. data/tasks/prd-overrides-ux.md +0 -308
  203. data/tasks/prd-v2-architecture-and-quality.md +0 -222
  204. data/tasks/tasks-v2-architecture-and-quality.md +0 -258
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70867e1bc29b66979111806711304a319895660a492f22c32664945cbd9a0172
4
- data.tar.gz: 157d6edc614ab44ce75bd26a67180d52f972309c6e40442aebf597885573f27b
3
+ metadata.gz: 57b5b16d9e952041e81f752dc1a31049d576d63ff62ea99286508ae20f377043
4
+ data.tar.gz: 65f2dd6a121e3b3ac7b3ad23e081a5426d1d7e9212e65574db6dbb130c4ef583
5
5
  SHA512:
6
- metadata.gz: 7443118e1519437db85760ccf3ab74149c089cc5c11df0a07f3265ef32f7715f11bff08ac77e71c6630b6e84a38139f5d34e3240b8daf7a15de978e0647c2cb7
7
- data.tar.gz: 496f69091bc4d8fce29527bc0445868250b3a34fb5a7192cd19d5334940c857e022a6b71a1268e0035f6c6f65a71de90f5b4deb1dd26250bfcc9e4cc98f63bdd
6
+ metadata.gz: '09c4d837c7fb6166f2d8f1480010a509404875b1080be01406f9efe886f17e8fbe8def7d28afcfc76e64a98ed4d56809f9c5acf4da601f11b954008451247e04'
7
+ data.tar.gz: d85e4f45e131a8f4475f3fb48171fa268927d8a7ee78df599e482278580fb9100b7f0f5bcc5bd06a2563cdfad83ee69a73a98d6e69e4b652a6de2e81e051b4b0
data/.coderabbit.yaml ADDED
@@ -0,0 +1,68 @@
1
+ # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
2
+ language: "en-US"
3
+ early_access: false
4
+
5
+ reviews:
6
+ profile: assertive
7
+ request_changes_workflow: true
8
+ high_level_summary: true
9
+ review_status: true
10
+ review_details: true
11
+ collapse_walkthrough: false
12
+ poem: false
13
+ in_progress_fortune: false
14
+ auto_review:
15
+ enabled: true
16
+ drafts: false
17
+ auto_incremental_review: true
18
+ tools:
19
+ actionlint:
20
+ enabled: true
21
+ gitleaks:
22
+ enabled: true
23
+ semgrep:
24
+ enabled: true
25
+ rubocop:
26
+ enabled: true
27
+ brakeman:
28
+ enabled: true
29
+ osvScanner:
30
+ enabled: true
31
+ path_filters:
32
+ - "!coverage/**"
33
+ - "!log/**"
34
+ - "!tmp/**"
35
+ - "!pkg/**"
36
+ - "!*.gem"
37
+ path_instructions:
38
+ - path: "**"
39
+ instructions: |
40
+ You are acting as a Senior Ruby on Rails Architect and AI Tooling Expert.
41
+ When reviewing rails-ai-bridge, enforce the following standards (this gem introspects Rails
42
+ apps and exposes structure via MCP and static context files):
43
+ (1) Ruby Idioms: prefer early returns, predicate methods end with ?.
44
+ (2) Architecture: introspectors must stay lightweight; MCP tools use rails_ prefix;
45
+ changes under lib/rails_ai_bridge/tools/, introspectors/, serializers/, or services/
46
+ need spec coverage and must preserve Service::Result and read-only tool semantics.
47
+ (3) Security (Critical): flag leaks of credentials, ENV values, raw PII, or unsafe paths.
48
+ (4) Docs: meaningful changes update CHANGELOG.md; do not approve PRs that fail the
49
+ code quality gates (Reek, Rubocop, and security tooling).
50
+ (5) Vibe Coding Prevention: challenge magic numbers and opaque literals; prefer clear,
51
+ deterministic logic over heavy metaprogramming.
52
+ - path: ".github/**"
53
+ instructions: >
54
+ Review workflows and Dependabot configuration for least-privilege permissions,
55
+ safe secret usage, fork pull request behavior, OIDC scope, release publishing
56
+ boundaries, and supply-chain risk from third-party actions.
57
+ - path: "lib/**"
58
+ instructions: >
59
+ Prioritize leaks of credentials, ENV values, Rails credentials, raw PII,
60
+ unsafe filesystem traversal, unbounded host-app introspection, destructive
61
+ MCP tool behavior, and public API compatibility for this gem.
62
+ - path: "spec/**"
63
+ instructions: >
64
+ Watch for order-dependent tests, lazy fixture backups, global Rails state
65
+ leakage, and missing coverage for security-sensitive behavior.
66
+
67
+ chat:
68
+ auto_reply: true
@@ -0,0 +1,8 @@
1
+ {
2
+ "MD060": false,
3
+ "MD013": {
4
+ "line_length": 120,
5
+ "code_blocks": false,
6
+ "tables": false
7
+ }
8
+ }