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.
- checksums.yaml +4 -4
- data/.coderabbit.yaml +68 -0
- data/.markdownlint.json +8 -0
- data/.reek.yml +954 -0
- data/.rubocop.yml +56 -6
- data/AGENTS.md +55 -0
- data/CHANGELOG.md +139 -37
- data/CLAUDE.md +9 -3
- data/README.md +74 -18
- data/Rakefile +2 -5
- data/SECURITY.md +66 -26
- data/docs/COVERAGE.md +33 -42
- data/docs/GUIDE.md +49 -0
- data/docs/roadmaps.md +5 -2
- data/lib/generators/rails_ai_bridge/install/install_generator.rb +198 -89
- data/lib/generators/rails_ai_bridge/install/profile_resolver.rb +104 -0
- data/lib/rails-ai-bridge.rb +1 -1
- data/lib/rails_ai_bridge/assistant_formats_preference.rb +8 -11
- data/lib/rails_ai_bridge/config/auth.rb +1 -1
- data/lib/rails_ai_bridge/config/introspection.rb +23 -19
- data/lib/rails_ai_bridge/config/mcp.rb +29 -8
- data/lib/rails_ai_bridge/config/output.rb +5 -0
- data/lib/rails_ai_bridge/config/server.rb +3 -3
- data/lib/rails_ai_bridge/configuration.rb +42 -41
- data/lib/rails_ai_bridge/context_provider.rb +4 -10
- data/lib/rails_ai_bridge/doctor/checkers/base_checker.rb +1 -1
- data/lib/rails_ai_bridge/doctor/checkers/bridge_metadata_checker.rb +5 -4
- data/lib/rails_ai_bridge/doctor/checkers/context_files_checker.rb +5 -4
- data/lib/rails_ai_bridge/doctor/checkers/controllers_checker.rb +4 -3
- data/lib/rails_ai_bridge/doctor/checkers/gems_checker.rb +4 -4
- data/lib/rails_ai_bridge/doctor/checkers/i18n_checker.rb +4 -3
- data/lib/rails_ai_bridge/doctor/checkers/mcp_buildable_checker.rb +4 -3
- data/lib/rails_ai_bridge/doctor/checkers/migrations_checker.rb +4 -3
- data/lib/rails_ai_bridge/doctor/checkers/models_checker.rb +4 -3
- data/lib/rails_ai_bridge/doctor/checkers/ripgrep_checker.rb +5 -4
- data/lib/rails_ai_bridge/doctor/checkers/routes_checker.rb +5 -4
- data/lib/rails_ai_bridge/doctor/checkers/schema_checker.rb +4 -4
- data/lib/rails_ai_bridge/doctor/checkers/stimulus_mcp_tool_checker.rb +13 -10
- data/lib/rails_ai_bridge/doctor/checkers/tests_checker.rb +6 -5
- data/lib/rails_ai_bridge/doctor/checkers/view_mcp_tool_checker.rb +13 -10
- data/lib/rails_ai_bridge/doctor/checkers/views_checker.rb +4 -3
- data/lib/rails_ai_bridge/engine.rb +5 -5
- data/lib/rails_ai_bridge/exclusion_helper.rb +1 -1
- data/lib/rails_ai_bridge/fingerprinter.rb +2 -2
- data/lib/rails_ai_bridge/http_transport_app.rb +10 -9
- data/lib/rails_ai_bridge/introspector.rb +3 -5
- data/lib/rails_ai_bridge/introspectors/action_mailbox_introspector.rb +11 -9
- data/lib/rails_ai_bridge/introspectors/action_text_introspector.rb +7 -7
- data/lib/rails_ai_bridge/introspectors/active_storage_introspector.rb +20 -18
- data/lib/rails_ai_bridge/introspectors/api_introspector.rb +19 -17
- data/lib/rails_ai_bridge/introspectors/asset_pipeline_introspector.rb +26 -22
- data/lib/rails_ai_bridge/introspectors/auth_introspector.rb +18 -19
- data/lib/rails_ai_bridge/introspectors/config_introspector.rb +17 -18
- data/lib/rails_ai_bridge/introspectors/controller_introspector.rb +25 -19
- data/lib/rails_ai_bridge/introspectors/convention_detector.rb +50 -45
- data/lib/rails_ai_bridge/introspectors/database_stats_introspector.rb +7 -9
- data/lib/rails_ai_bridge/introspectors/devops_introspector.rb +17 -14
- data/lib/rails_ai_bridge/introspectors/engine_introspector.rb +38 -35
- data/lib/rails_ai_bridge/introspectors/gem_introspector.rb +24 -125
- data/lib/rails_ai_bridge/introspectors/gem_registry.rb +122 -0
- data/lib/rails_ai_bridge/introspectors/i18n_introspector.rb +16 -12
- data/lib/rails_ai_bridge/introspectors/job_introspector.rb +27 -15
- data/lib/rails_ai_bridge/introspectors/middleware_introspector.rb +28 -28
- data/lib/rails_ai_bridge/introspectors/migration_introspector.rb +32 -32
- data/lib/rails_ai_bridge/introspectors/model_introspector.rb +61 -31
- data/lib/rails_ai_bridge/introspectors/multi_database_introspector.rb +25 -23
- data/lib/rails_ai_bridge/introspectors/non_ar_models_introspector.rb +16 -16
- data/lib/rails_ai_bridge/introspectors/rake_task_introspector.rb +16 -16
- data/lib/rails_ai_bridge/introspectors/route_introspector.rb +15 -14
- data/lib/rails_ai_bridge/introspectors/schema/static_schema_parser.rb +13 -12
- data/lib/rails_ai_bridge/introspectors/schema_introspector.rb +10 -10
- data/lib/rails_ai_bridge/introspectors/seeds_introspector.rb +14 -13
- data/lib/rails_ai_bridge/introspectors/stimulus_introspector.rb +12 -9
- data/lib/rails_ai_bridge/introspectors/test_introspector.rb +42 -35
- data/lib/rails_ai_bridge/introspectors/turbo_introspector.rb +12 -12
- data/lib/rails_ai_bridge/introspectors/view_introspector.rb +30 -26
- data/lib/rails_ai_bridge/mcp/auth/base_strategy.rb +1 -1
- data/lib/rails_ai_bridge/mcp/auth/strategies/bearer_token.rb +4 -3
- data/lib/rails_ai_bridge/mcp/auth/strategies/jwt.rb +4 -5
- data/lib/rails_ai_bridge/mcp/authenticator.rb +7 -9
- data/lib/rails_ai_bridge/mcp/http_rate_limiter.rb +1 -1
- data/lib/rails_ai_bridge/mcp/http_structured_log.rb +4 -4
- data/lib/rails_ai_bridge/middleware.rb +3 -3
- data/lib/rails_ai_bridge/model_semantic_classifier.rb +20 -17
- data/lib/rails_ai_bridge/resources.rb +164 -83
- data/lib/rails_ai_bridge/serializers/context_file_serializer.rb +63 -55
- data/lib/rails_ai_bridge/serializers/context_summary.rb +43 -13
- data/lib/rails_ai_bridge/serializers/formatters/providers/claude_header_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/codex_footer_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/codex_header_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/copilot_footer_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/copilot_header_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/footer_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/gemini_footer_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/gemini_header_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/header_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/mcp_guide_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/providers/rules_footer_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/action_mailbox_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/action_text_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/active_storage_formatter.rb +3 -7
- data/lib/rails_ai_bridge/serializers/formatters/sections/api_formatter.rb +4 -6
- data/lib/rails_ai_bridge/serializers/formatters/sections/app_overview_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/assets_formatter.rb +3 -5
- data/lib/rails_ai_bridge/serializers/formatters/sections/auth_formatter.rb +3 -7
- data/lib/rails_ai_bridge/serializers/formatters/sections/config_formatter.rb +4 -4
- data/lib/rails_ai_bridge/serializers/formatters/sections/controllers_formatter.rb +6 -10
- data/lib/rails_ai_bridge/serializers/formatters/sections/conventions_formatter.rb +29 -29
- data/lib/rails_ai_bridge/serializers/formatters/sections/devops_formatter.rb +5 -5
- data/lib/rails_ai_bridge/serializers/formatters/sections/engines_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/gems_formatter.rb +4 -4
- data/lib/rails_ai_bridge/serializers/formatters/sections/i18n_formatter.rb +2 -2
- data/lib/rails_ai_bridge/serializers/formatters/sections/jobs_formatter.rb +2 -2
- data/lib/rails_ai_bridge/serializers/formatters/sections/middleware_formatter.rb +2 -2
- data/lib/rails_ai_bridge/serializers/formatters/sections/migrations_formatter.rb +3 -3
- data/lib/rails_ai_bridge/serializers/formatters/sections/models_formatter.rb +4 -3
- data/lib/rails_ai_bridge/serializers/formatters/sections/multi_database_formatter.rb +3 -3
- data/lib/rails_ai_bridge/serializers/formatters/sections/rake_tasks_formatter.rb +2 -2
- data/lib/rails_ai_bridge/serializers/formatters/sections/routes_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/schema_formatter.rb +2 -2
- data/lib/rails_ai_bridge/serializers/formatters/sections/seeds_formatter.rb +4 -4
- data/lib/rails_ai_bridge/serializers/formatters/sections/tests_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/formatters/sections/turbo_formatter.rb +4 -4
- data/lib/rails_ai_bridge/serializers/formatters/sections/views_formatter.rb +3 -3
- data/lib/rails_ai_bridge/serializers/json_serializer.rb +1 -1
- data/lib/rails_ai_bridge/serializers/providers/base.rb +3 -0
- data/lib/rails_ai_bridge/serializers/providers/base_provider_serializer.rb +151 -124
- data/lib/rails_ai_bridge/serializers/providers/claude_rules_serializer.rb +94 -89
- data/lib/rails_ai_bridge/serializers/providers/claude_serializer.rb +3 -4
- data/lib/rails_ai_bridge/serializers/providers/codex_serializer.rb +23 -24
- data/lib/rails_ai_bridge/serializers/providers/codex_support_serializer.rb +4 -4
- data/lib/rails_ai_bridge/serializers/providers/collaborators/line_enforcer.rb +64 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/model_line_formatter.rb +335 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_architecture_builder.rb +40 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_document_builder.rb +66 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_key_considerations_builder.rb +92 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_model_section_builder.rb +103 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_notable_gems_builder.rb +110 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/rules_stack_overview_builder.rb +49 -0
- data/lib/rails_ai_bridge/serializers/providers/collaborators/stack_overview_builder.rb +169 -0
- data/lib/rails_ai_bridge/serializers/providers/copilot_instructions_serializer.rb +62 -60
- data/lib/rails_ai_bridge/serializers/providers/copilot_serializer.rb +51 -51
- data/lib/rails_ai_bridge/serializers/providers/cursor_rules_serializer.rb +87 -89
- data/lib/rails_ai_bridge/serializers/providers/factory.rb +55 -0
- data/lib/rails_ai_bridge/serializers/providers/gemini_serializer.rb +3 -4
- data/lib/rails_ai_bridge/serializers/providers/mcp_tool_reference_formatter.rb +1 -1
- data/lib/rails_ai_bridge/serializers/providers/rules_orchestrator.rb +7 -121
- data/lib/rails_ai_bridge/serializers/providers/rules_serializer.rb +42 -43
- data/lib/rails_ai_bridge/serializers/providers/windsurf_rules_serializer.rb +29 -28
- data/lib/rails_ai_bridge/serializers/providers/windsurf_serializer.rb +30 -30
- data/lib/rails_ai_bridge/serializers/regeneration_footer.rb +1 -1
- data/lib/rails_ai_bridge/serializers/shared_assistant_guidance.rb +77 -75
- data/lib/rails_ai_bridge/server.rb +105 -30
- data/lib/rails_ai_bridge/service/result.rb +92 -0
- data/lib/rails_ai_bridge/service.rb +56 -0
- data/lib/rails_ai_bridge/service_errors.rb +43 -0
- data/lib/rails_ai_bridge/services/app_introspection_service.rb +72 -0
- data/lib/rails_ai_bridge/services/configuration_service.rb +59 -0
- data/lib/rails_ai_bridge/services/context_generation_service.rb +64 -0
- data/lib/rails_ai_bridge/services/file_management_service.rb +141 -0
- data/lib/rails_ai_bridge/tasks/rails_ai_bridge.rake +62 -65
- data/lib/rails_ai_bridge/tools/base_tool.rb +7 -7
- data/lib/rails_ai_bridge/tools/get_config.rb +9 -9
- data/lib/rails_ai_bridge/tools/get_controllers.rb +26 -26
- data/lib/rails_ai_bridge/tools/get_conventions.rb +41 -40
- data/lib/rails_ai_bridge/tools/get_gems.rb +15 -13
- data/lib/rails_ai_bridge/tools/get_model_details.rb +20 -17
- data/lib/rails_ai_bridge/tools/get_routes.rb +36 -31
- data/lib/rails_ai_bridge/tools/get_schema.rb +26 -23
- data/lib/rails_ai_bridge/tools/get_stimulus.rb +24 -24
- data/lib/rails_ai_bridge/tools/get_test_info.rb +7 -7
- data/lib/rails_ai_bridge/tools/get_view/base_formatter.rb +3 -3
- data/lib/rails_ai_bridge/tools/get_view/full_formatter.rb +4 -4
- data/lib/rails_ai_bridge/tools/get_view/specific_view_formatter.rb +5 -5
- data/lib/rails_ai_bridge/tools/get_view/standard_formatter.rb +4 -4
- data/lib/rails_ai_bridge/tools/get_view/summary_formatter.rb +3 -3
- data/lib/rails_ai_bridge/tools/get_view.rb +15 -14
- data/lib/rails_ai_bridge/tools/model_details/full_formatter.rb +3 -3
- data/lib/rails_ai_bridge/tools/model_details/non_ar_models_appendix.rb +10 -10
- data/lib/rails_ai_bridge/tools/model_details/single_model_formatter.rb +15 -13
- data/lib/rails_ai_bridge/tools/model_details/standard_formatter.rb +3 -3
- data/lib/rails_ai_bridge/tools/model_details/summary_formatter.rb +1 -1
- data/lib/rails_ai_bridge/tools/schema/full_formatter.rb +3 -5
- data/lib/rails_ai_bridge/tools/schema/standard_formatter.rb +4 -4
- data/lib/rails_ai_bridge/tools/schema/summary_formatter.rb +3 -3
- data/lib/rails_ai_bridge/tools/schema/table_formatter.rb +6 -6
- data/lib/rails_ai_bridge/tools/search_code/formatter.rb +1 -2
- data/lib/rails_ai_bridge/tools/search_code.rb +143 -82
- data/lib/rails_ai_bridge/version.rb +1 -1
- data/lib/rails_ai_bridge/view_file_analyzer.rb +4 -6
- data/lib/rails_ai_bridge/watcher/bridge_regenerator.rb +5 -2
- data/lib/rails_ai_bridge/watcher.rb +13 -13
- data/lib/rails_ai_bridge.rb +22 -9
- data/rails-ai-bridge.gemspec +22 -31
- data/server.json +1 -1
- data/test_table.md +3 -0
- metadata +36 -112
- data/exe/rails-ai-bridge +0 -95
- data/tasks/prd-enhanced-context.md +0 -223
- data/tasks/prd-freshness-stamp.md +0 -229
- data/tasks/prd-incremental-ci.md +0 -138
- data/tasks/prd-overrides-ux.md +0 -308
- data/tasks/prd-v2-architecture-and-quality.md +0 -222
- 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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 57b5b16d9e952041e81f752dc1a31049d576d63ff62ea99286508ae20f377043
|
|
4
|
+
data.tar.gz: 65f2dd6a121e3b3ac7b3ad23e081a5426d1d7e9212e65574db6dbb130c4ef583
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|