rosett-ai 1.3.3 → 1.5.9
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/CHANGELOG.md +398 -22
- data/README.md +56 -42
- data/bin/raictl +13 -0
- data/conf/adopt_redactions.yml +2 -0
- data/conf/compliance/cra_rules.yml +2 -0
- data/conf/compliance/license_rules.yml +2 -0
- data/conf/mcp/server_defaults.yml +2 -0
- data/conf/mcp/trust.yml +1 -0
- data/conf/packaging/core.yml +2 -0
- data/conf/packaging/gtk4.yml +2 -0
- data/conf/packaging/qt6.yml +2 -0
- data/conf/policy/default_deny_list.yml +2 -0
- data/conf/review/cli-command-audit.yml +2 -0
- data/conf/review/design-docs.yml +2 -0
- data/conf/review/design-questionnaire.yml +2 -0
- data/conf/review/questionnaire.yml +2 -0
- data/conf/review/rosett-ai-core.yml +2 -0
- data/conf/schemas/ai_config_schema.json +14 -2
- data/conf/schemas/autoqueue.schema.json +153 -0
- data/conf/schemas/behaviour_schema.json +31 -7
- data/conf/schemas/compliance_rule_schema.json +17 -4
- data/conf/schemas/content_pack_manifest_schema.json +23 -4
- data/conf/schemas/design_schema.json +177 -42
- data/conf/schemas/engine_manifest_schema.json +22 -5
- data/conf/schemas/lockfile_schema.json +26 -4
- data/conf/schemas/mcp_server_schema.json +50 -9
- data/conf/schemas/packaging_schema.json +23 -5
- data/conf/schemas/policy_schema.json +35 -9
- data/conf/schemas/provenance_schema.json +33 -5
- data/conf/schemas/rai_config_schema.json +6 -2
- data/conf/schemas/rai_project_schema.json +8 -2
- data/conf/schemas/scope_hierarchy_schema.json +22 -5
- data/conf/schemas/target_schema.json +33 -6
- data/conf/schemas/tooling_schema.json +53 -12
- data/conf/schemas/workflow_schema.json +39 -9
- data/conf/targets/agents_md.yml +1 -0
- data/conf/targets/claude.yml +2 -0
- data/conf/tooling/tools.yml +2 -0
- data/lib/rosett_ai/adopter/local_analysis_collector.rb +5 -0
- data/lib/rosett_ai/adopter/rule_adopter.rb +40 -0
- data/lib/rosett_ai/ai_config/context_window.rb +3 -0
- data/lib/rosett_ai/ai_config/cost_controls.rb +1 -0
- data/lib/rosett_ai/ai_config/fallback_chain.rb +1 -0
- data/lib/rosett_ai/ai_config/model_router.rb +1 -0
- data/lib/rosett_ai/ai_config/validator.rb +2 -0
- data/lib/rosett_ai/authorship/attribution_compiler.rb +1 -0
- data/lib/rosett_ai/authorship/disclosure_policy.rb +2 -0
- data/lib/rosett_ai/authorship/review_validator.rb +1 -0
- data/lib/rosett_ai/authorship/trailer_generator.rb +1 -0
- data/lib/rosett_ai/backup/compressor.rb +3 -0
- data/lib/rosett_ai/backup/destination.rb +1 -0
- data/lib/rosett_ai/behaviour/manager.rb +1 -0
- data/lib/rosett_ai/compiler/backend.rb +3 -0
- data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +1 -0
- data/lib/rosett_ai/compiler/backends/claude_backend.rb +1 -0
- data/lib/rosett_ai/compiler/behaviour_compiler.rb +1 -0
- data/lib/rosett_ai/compiler/compilation_pipeline.rb +1 -7
- data/lib/rosett_ai/compiler/locale_compiler.rb +2 -0
- data/lib/rosett_ai/compiler/target_profile.rb +11 -0
- data/lib/rosett_ai/completion/generator.rb +2 -0
- data/lib/rosett_ai/completion/shells/zsh_generator.rb +1 -0
- data/lib/rosett_ai/comply/checkers/cra_checker.rb +1 -0
- data/lib/rosett_ai/comply/checkers/license_checker.rb +2 -0
- data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +4 -0
- data/lib/rosett_ai/comply/runner.rb +2 -0
- data/lib/rosett_ai/composition/composer.rb +1 -0
- data/lib/rosett_ai/composition/lockfile.rb +1 -0
- data/lib/rosett_ai/composition/merge_strategy.rb +1 -0
- data/lib/rosett_ai/config/masking_secret_resolver.rb +9 -0
- data/lib/rosett_ai/config/secret_resolver.rb +4 -0
- data/lib/rosett_ai/configuration.rb +4 -0
- data/lib/rosett_ai/content/content_client.rb +15 -0
- data/lib/rosett_ai/content/pack_installer.rb +1 -0
- data/lib/rosett_ai/content/pack_manifest.rb +21 -0
- data/lib/rosett_ai/content_packs/manager.rb +1 -0
- data/lib/rosett_ai/dbus/compositor_detector.rb +2 -0
- data/lib/rosett_ai/dbus/focus_adapters/base.rb +1 -0
- data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +5 -0
- data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_monitor_interface.rb +1 -0
- data/lib/rosett_ai/dbus/manager_interface.rb +1 -0
- data/lib/rosett_ai/dbus/plugin_manager_interface.rb +2 -0
- data/lib/rosett_ai/dbus/rate_limiter.rb +1 -0
- data/lib/rosett_ai/dbus/service.rb +3 -0
- data/lib/rosett_ai/dbus/status_notifier_interface.rb +14 -0
- data/lib/rosett_ai/desktop/dbus_client.rb +6 -0
- data/lib/rosett_ai/desktop/gtk4_app.rb +3 -0
- data/lib/rosett_ai/desktop/gtk4_preferences.rb +1 -0
- data/lib/rosett_ai/desktop/gui_logger.rb +2 -0
- data/lib/rosett_ai/doctor/check.rb +1 -1
- data/lib/rosett_ai/doctor/checks/cache_health_check.rb +1 -0
- data/lib/rosett_ai/doctor.rb +1 -0
- data/lib/rosett_ai/documentation/reference_compiler.rb +9 -0
- data/lib/rosett_ai/documentation/translator.rb +8 -0
- data/lib/rosett_ai/engines/base_config_compiler.rb +71 -1
- data/lib/rosett_ai/engines/detector.rb +5 -0
- data/lib/rosett_ai/engines/registry.rb +7 -0
- data/lib/rosett_ai/exit_codes.rb +6 -0
- data/lib/rosett_ai/formatting.rb +1 -0
- data/lib/rosett_ai/gem_consistency_checker.rb +6 -0
- data/lib/rosett_ai/git_hooks/chain_detector.rb +1 -0
- data/lib/rosett_ai/git_hooks/installer.rb +4 -0
- data/lib/rosett_ai/git_hooks/script_generator.rb +2 -0
- data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +6 -0
- data/lib/rosett_ai/i18n/utf8_checker.rb +1 -0
- data/lib/rosett_ai/init/config_file_writer.rb +4 -0
- data/lib/rosett_ai/init/directory_builder.rb +15 -0
- data/lib/rosett_ai/init/file_copier.rb +51 -0
- data/lib/rosett_ai/init/mcp_registrar.rb +1 -0
- data/lib/rosett_ai/init/project_initializer.rb +1 -0
- data/lib/rosett_ai/licensing/license_key.rb +4 -0
- data/lib/rosett_ai/licensing/license_store.rb +11 -0
- data/lib/rosett_ai/licensing/tier.rb +9 -0
- data/lib/rosett_ai/mcp/admin/auditor.rb +1 -0
- data/lib/rosett_ai/mcp/admin/health_checker.rb +1 -0
- data/lib/rosett_ai/mcp/admin/registry.rb +1 -0
- data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +27 -4
- data/lib/rosett_ai/mcp/enforcement/validator.rb +24 -3
- data/lib/rosett_ai/mcp/governance.rb +9 -0
- data/lib/rosett_ai/mcp/http_security_config.rb +22 -0
- data/lib/rosett_ai/mcp/key_hasher.rb +4 -2
- data/lib/rosett_ai/mcp/keyfile.rb +4 -0
- data/lib/rosett_ai/mcp/middleware/cors.rb +4 -0
- data/lib/rosett_ai/mcp/middleware/origin_validation.rb +1 -0
- data/lib/rosett_ai/mcp/middleware/rate_limit.rb +3 -0
- data/lib/rosett_ai/mcp/plugins.rb +1 -0
- data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +2 -0
- data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +3 -0
- data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +2 -0
- data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +2 -0
- data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +2 -0
- data/lib/rosett_ai/mcp/resources/config_resource.rb +2 -0
- data/lib/rosett_ai/mcp/resources/design_resource.rb +1 -0
- data/lib/rosett_ai/mcp/resources/hooks_resource.rb +3 -0
- data/lib/rosett_ai/mcp/resources/provenance_resource.rb +2 -0
- data/lib/rosett_ai/mcp/resources/rules_resource.rb +1 -0
- data/lib/rosett_ai/mcp/resources/schema_resource.rb +1 -0
- data/lib/rosett_ai/mcp/server.rb +7 -1
- data/lib/rosett_ai/mcp/settings/trust_manager.rb +3 -0
- data/lib/rosett_ai/mcp/tools/adopt_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/backup_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/compile_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/comply_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/config_status_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/content_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/context_query_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/design_list_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/design_show_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/doctor_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/engines_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +7 -0
- data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +33 -8
- data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/init_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/license_status_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/project_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/provenance_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/tooling_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/validate_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/workflow_tool.rb +5 -0
- data/lib/rosett_ai/migration/detector.rb +1 -0
- data/lib/rosett_ai/migration/nncc_config_migrator.rb +2 -0
- data/lib/rosett_ai/migration/xdg_migrator.rb +3 -1
- data/lib/rosett_ai/package_manager/apt.rb +5 -0
- data/lib/rosett_ai/package_manager/base.rb +1 -0
- data/lib/rosett_ai/package_manager/gem_backend.rb +1 -0
- data/lib/rosett_ai/packaging/variant_config.rb +12 -0
- data/lib/rosett_ai/plugins/contract.rb +1 -0
- data/lib/rosett_ai/plugins/engine_contract.rb +2 -0
- data/lib/rosett_ai/plugins/gui_contract.rb +2 -0
- data/lib/rosett_ai/plugins/mcp_contract.rb +2 -0
- data/lib/rosett_ai/plugins/registry.rb +10 -0
- data/lib/rosett_ai/policy/auditor.rb +1 -0
- data/lib/rosett_ai/policy/opt_out_scanner.rb +1 -0
- data/lib/rosett_ai/policy/tier_hierarchy.rb +2 -0
- data/lib/rosett_ai/policy/validator.rb +1 -0
- data/lib/rosett_ai/profiler.rb +7 -0
- data/lib/rosett_ai/project/drift_detector.rb +1 -0
- data/lib/rosett_ai/project/manager.rb +1 -0
- data/lib/rosett_ai/project/template_applier.rb +1 -0
- data/lib/rosett_ai/provenance/entry.rb +2 -0
- data/lib/rosett_ai/provenance/source.rb +1 -0
- data/lib/rosett_ai/provenance/store.rb +3 -0
- data/lib/rosett_ai/provenance/validator.rb +1 -0
- data/lib/rosett_ai/quorum/collector.rb +1 -0
- data/lib/rosett_ai/quorum/comparator.rb +2 -0
- data/lib/rosett_ai/quorum/strategies/adopt.rb +1 -0
- data/lib/rosett_ai/rai_config.rb +9 -0
- data/lib/rosett_ai/retrofit/engine.rb +2 -0
- data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +8 -0
- data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +10 -0
- data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +9 -0
- data/lib/rosett_ai/retrofit/secret_detector.rb +3 -0
- data/lib/rosett_ai/secrets_resolver.rb +1 -0
- data/lib/rosett_ai/session_hooks/installer.rb +130 -0
- data/lib/rosett_ai/smart_feedback/suggester.rb +4 -0
- data/lib/rosett_ai/smart_feedback/thor_middleware.rb +7 -0
- data/lib/rosett_ai/structured_logger.rb +1 -0
- data/lib/rosett_ai/telemetry/log_rotator.rb +1 -0
- data/lib/rosett_ai/telemetry.rb +1 -0
- data/lib/rosett_ai/thor/cli.rb +9 -0
- data/lib/rosett_ai/thor/tasks/adopt.rb +2 -0
- data/lib/rosett_ai/thor/tasks/backfill_user_yml.rb +207 -0
- data/lib/rosett_ai/thor/tasks/backup.rb +6 -0
- data/lib/rosett_ai/thor/tasks/behaviour.rb +12 -0
- data/lib/rosett_ai/thor/tasks/build.rb +87 -4
- data/lib/rosett_ai/thor/tasks/compile.rb +76 -32
- data/lib/rosett_ai/thor/tasks/completion.rb +9 -0
- data/lib/rosett_ai/thor/tasks/comply.rb +2 -0
- data/lib/rosett_ai/thor/tasks/config.rb +21 -5
- data/lib/rosett_ai/thor/tasks/content.rb +8 -0
- data/lib/rosett_ai/thor/tasks/dbus.rb +13 -0
- data/lib/rosett_ai/thor/tasks/design.rb +2 -0
- data/lib/rosett_ai/thor/tasks/desktop.rb +4 -0
- data/lib/rosett_ai/thor/tasks/doctor.rb +2 -0
- data/lib/rosett_ai/thor/tasks/documentation.rb +7 -0
- data/lib/rosett_ai/thor/tasks/engines.rb +8 -0
- data/lib/rosett_ai/thor/tasks/hooks.rb +8 -0
- data/lib/rosett_ai/thor/tasks/init.rb +1 -0
- data/lib/rosett_ai/thor/tasks/license.rb +8 -0
- data/lib/rosett_ai/thor/tasks/mcp.rb +40 -0
- data/lib/rosett_ai/thor/tasks/migrate.rb +2 -0
- data/lib/rosett_ai/thor/tasks/plugins.rb +15 -0
- data/lib/rosett_ai/thor/tasks/project.rb +8 -0
- data/lib/rosett_ai/thor/tasks/provenance.rb +8 -0
- data/lib/rosett_ai/thor/tasks/release.rb +8 -0
- data/lib/rosett_ai/thor/tasks/retrofit.rb +4 -0
- data/lib/rosett_ai/thor/tasks/validate.rb +1 -0
- data/lib/rosett_ai/thor/tasks/workflow.rb +14 -0
- data/lib/rosett_ai/tooling/version_checker.rb +1 -0
- data/lib/rosett_ai/ui/accessible_tui.rb +18 -0
- data/lib/rosett_ai/ui/base.rb +3 -0
- data/lib/rosett_ai/ui/gtk4.rb +19 -0
- data/lib/rosett_ai/ui/kde.rb +1 -0
- data/lib/rosett_ai/ui/qt6.rb +1 -0
- data/lib/rosett_ai/ui/registry.rb +15 -0
- data/lib/rosett_ai/ui/tui.rb +22 -0
- data/lib/rosett_ai/validators/behaviour_validator.rb +1 -0
- data/lib/rosett_ai/validators/design_validator.rb +2 -0
- data/lib/rosett_ai/validators/schema_validator.rb +4 -0
- data/lib/rosett_ai/validators/tooling_validator.rb +1 -0
- data/lib/rosett_ai/version.rb +2 -1
- data/lib/rosett_ai/version_consistency_checker.rb +6 -0
- data/lib/rosett_ai/workflow/engine.rb +1 -0
- data/lib/rosett_ai/workflow/manager.rb +1 -0
- data/lib/rosett_ai/workflow/schema_validator.rb +2 -0
- data/lib/rosett_ai/workflow/step_runner.rb +1 -0
- data/lib/rosett_ai/workflow/steps/rai_step.rb +1 -0
- data/lib/rosett_ai/yaml_loader.rb +2 -0
- data/lib/rosett_ai.rb +2 -0
- data/lib/scripts/generated/docker_hub_tags.rb +2 -0
- data/locales/ar.yml +2 -0
- data/locales/en.yml +5 -0
- data/locales/fr.yml +2 -0
- metadata +9 -189
- data/.ai-provenance.yml +0 -119
- data/.debride_whitelist +0 -186
- data/.fasterer.yml +0 -29
- data/.mdl_style.rb +0 -10
- data/.mdlrc +0 -3
- data/.mutant.yml +0 -49
- data/.namespace-allowlist +0 -42
- data/.reek.yml +0 -1040
- data/.rosett-ai/config.yml +0 -3
- data/.rspec +0 -5
- data/.rubocop.yml +0 -380
- data/.ruby-version +0 -1
- data/.yamllint +0 -51
- data/.yardopts +0 -12
- data/AI-DISCLOSURE.md +0 -48
- data/CLAUDE.md +0 -141
- data/CONTRIBUTING.md +0 -734
- data/INSTALL.md +0 -154
- data/LICENSE.md +0 -675
- data/QUICKSTART.md +0 -73
- data/Rakefile +0 -200
- data/SECURITY.md +0 -114
- data/cliff.toml +0 -52
- data/conf/behaviour/.gitkeep +0 -0
- data/conf/design/aaif_alignment.yml +0 -181
- data/conf/design/ab_testing.yml +0 -172
- data/conf/design/accessibility.yml +0 -84
- data/conf/design/ai_authorship.yml +0 -210
- data/conf/design/ai_provenance.yml +0 -224
- data/conf/design/ai_tool_configuration.yml +0 -207
- data/conf/design/architecture.yml +0 -139
- data/conf/design/autocompletion.yml +0 -115
- data/conf/design/backward_compatibility.yml +0 -112
- data/conf/design/behaviour_composition.yml +0 -246
- data/conf/design/build_rake_extraction.yml +0 -57
- data/conf/design/ci_pipeline.yml +0 -100
- data/conf/design/claude_code_configuration.yml +0 -157
- data/conf/design/compiler.yml +0 -128
- data/conf/design/comply.yml +0 -153
- data/conf/design/content_packs.yml +0 -84
- data/conf/design/desktop_integration.yml +0 -289
- data/conf/design/distribution.yml +0 -216
- data/conf/design/doctor.yml +0 -184
- data/conf/design/documentation.yml +0 -152
- data/conf/design/engine_architecture.yml +0 -257
- data/conf/design/error_handling.yml +0 -103
- data/conf/design/feature_flags.yml +0 -142
- data/conf/design/git_hooks.yml +0 -165
- data/conf/design/gui_plugins.yml +0 -475
- data/conf/design/i18n.yml +0 -84
- data/conf/design/integration_testing.yml +0 -56
- data/conf/design/licensing_system.yml +0 -88
- data/conf/design/lifecycle_management.yml +0 -208
- data/conf/design/mcp_integration.yml +0 -207
- data/conf/design/mcp_settings.yml +0 -126
- data/conf/design/migration.yml +0 -56
- data/conf/design/monitoring_observability.yml +0 -194
- data/conf/design/namespace_cleanup.yml +0 -145
- data/conf/design/plugin_test_segregation.yml +0 -145
- data/conf/design/policy_management.yml +0 -229
- data/conf/design/project_management.yml +0 -183
- data/conf/design/rai_mcp_asset_discovery.yml +0 -164
- data/conf/design/rai_mcp_server.yml +0 -605
- data/conf/design/release_management.yml +0 -117
- data/conf/design/retrofit.yml +0 -199
- data/conf/design/retrospective_analyzer.yml +0 -79
- data/conf/design/scope_hierarchy.yml +0 -352
- data/conf/design/security.yml +0 -115
- data/conf/design/session_retrospective.yml +0 -85
- data/conf/design/smart_ui_feedback.yml +0 -89
- data/conf/design/structured_logging.yml +0 -148
- data/conf/design/styles.yml +0 -123
- data/conf/design/test_peer_review.yml +0 -89
- data/conf/design/testing.yml +0 -136
- data/conf/design/threat_model.yml +0 -108
- data/conf/design/ui_framework.yml +0 -111
- data/conf/design/usage_optimization.yml +0 -122
- data/conf/design/version_management.yml +0 -60
- data/conf/design/workflow.yml +0 -227
- data/doc/AAIF_POSITIONING.md +0 -58
- data/doc/ADOPT.md +0 -224
- data/doc/AI_PROVENANCE.md +0 -139
- data/doc/ARCHITECTURE.md +0 -920
- data/doc/BEHAVIOUR.md +0 -409
- data/doc/BUILD.md +0 -138
- data/doc/CI_CD_RECIPES.md +0 -171
- data/doc/CLAUDE_SESSIONS_MOVED.md +0 -16
- data/doc/COMMAND_ANALYSIS.md +0 -229
- data/doc/CONFIGURATION.md +0 -281
- data/doc/DESIGN_AUDIT.md +0 -235
- data/doc/DESIGN_PEER_REVIEW.md +0 -771
- data/doc/DESKTOP.md +0 -447
- data/doc/ENGINES.md +0 -567
- data/doc/ENGINE_DEVELOPMENT_GUIDE.md +0 -417
- data/doc/FEATURE_AUDIT.md +0 -218
- data/doc/IMPLEMENTATION_PLAN.md +0 -669
- data/doc/INCIDENT_REPORT_2026-02-02.md +0 -251
- data/doc/MIGRATION_GUIDE.md +0 -88
- data/doc/PACKAGING.md +0 -232
- data/doc/PROJECT_DASHBOARD.md +0 -153
- data/doc/PULP_DEPLOYMENT.md +0 -164
- data/doc/QUALITY_FIX_SUMMARY.md +0 -110
- data/doc/QUICK_START.md +0 -162
- data/doc/REEK_CONFIGURATION.md +0 -166
- data/doc/REFERENCE.md +0 -253
- data/doc/REFERENCES.md +0 -324
- data/doc/SECURITY_REVIEW_CHECKLIST.md +0 -72
- data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +0 -359
- data/doc/SETUP.md +0 -202
- data/doc/TEST_PEER_REVIEW.md +0 -152
- data/doc/THREAT_MODEL.md +0 -230
- data/doc/USAGE.md +0 -545
- data/doc/USER_MANUAL.md +0 -585
- data/doc/ai_test_review_checklist.md +0 -110
- data/doc/changes/2026-02-18-packaging-fpm.md +0 -155
- data/doc/changes/2026-02-19-testing-infrastructure.md +0 -221
- data/doc/changes/2026-02-20-security-implementation.md +0 -281
- data/doc/changes/2026-02-20-styles-implementation.md +0 -220
- data/doc/changes/2026-02-21-architecture-completion.md +0 -95
- data/doc/changes/2026-02-21-architecture-ui-layer.md +0 -253
- data/doc/changes/2026-02-21-cc-config-implementation.md +0 -108
- data/doc/changes/2026-02-21-ci-pipeline-implementation.md +0 -214
- data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +0 -241
- data/doc/changes/2026-02-21-config-design-show-commands.md +0 -61
- data/doc/changes/2026-02-21-design-implementation-overview.md +0 -455
- data/doc/changes/2026-02-21-lifecycle-management.md +0 -196
- data/doc/changes/2026-02-21-path-resolver.md +0 -128
- data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +0 -45
- data/doc/changes/2026-03-01-ci-bundler-strategy.md +0 -120
- data/doc/changes/2026-03-20-security-hardening-phase2.md +0 -163
- data/doc/context/SESSION-HANDOFF.md +0 -69
- data/doc/context/ai-engine-usage-trends-2026.md +0 -80
- data/doc/context/plan-pluggable-engines.md +0 -590
- data/doc/decisions/001-flog-deferred.md +0 -32
- data/doc/decisions/002-path-resolution-strategy.md +0 -158
- data/doc/decisions/003-ui-adapter-selection.md +0 -193
- data/doc/decisions/004-design-document-validation.md +0 -179
- data/doc/decisions/005-package-splitting-strategy.md +0 -200
- data/doc/decisions/006-multi-engine-architecture.md +0 -147
- data/doc/decisions/007-engine-agnostic-pivot.md +0 -219
- data/doc/decisions/008-ci-bundler-strategy.md +0 -129
- data/doc/decisions/009-core-only-v1-release.md +0 -60
- data/doc/decisions/010-engine-debian-packaging.md +0 -66
- data/doc/decisions/011-context-aware-cli.md +0 -71
- data/doc/dependency_decisions.yml +0 -247
- data/doc/issues/001-wrapper-missing-environment-variables.md +0 -197
- data/doc/issues/002-embedded-ruby-wrong-prefix.md +0 -217
- data/doc/issues/003-smoke-test-false-positive.md +0 -127
- data/doc/issues/004-market-research-design-updates.md +0 -109
- data/doc/issues/005-compile-scope-coexistence.md +0 -161
- data/doc/locales/.gitkeep +0 -0
- data/doc/man/rai.1.ronn +0 -505
- data/doc/operations/packaging.md +0 -133
- data/doc/operations/rosett-ai-release.md +0 -65
- data/doc/reference/error-catalog.md +0 -107
- data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
- data/doc/reference/src/Pictures/cover.jpg +0 -0
- data/doc/reference/src/Pictures/head1.jpg +0 -0
- data/doc/reference/src/Pictures/head2.jpg +0 -0
- data/doc/reference/src/Pictures/head3.jpg +0 -0
- data/doc/reference/src/Pictures/head4.jpg +0 -0
- data/doc/reference/src/Pictures/head5.jpg +0 -0
- data/doc/reference/src/Pictures/head6.jpg +0 -0
- data/doc/reference/src/Pictures/head7.jpg +0 -0
- data/doc/reference/src/Pictures/head8.jpg +0 -0
- data/doc/reference/src/StyleInd.ist +0 -4
- data/doc/reference/src/bibliography.bib +0 -79
- data/doc/reference/src/main.tex +0 -1288
- data/doc/reference/src/structure.tex +0 -303
- data/doc/rosett-ai-bookmarks.html +0 -301
- data/kitchen.yml +0 -46
- data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
- data/locales/.gitkeep +0 -0
- data/packaging/build-engine-deb.sh +0 -81
- data/packaging/scripts/postinst +0 -17
- data/packaging/scripts/postrm +0 -19
- data/packaging/scripts/prerm +0 -10
- data/packaging/wrapper.sh.template +0 -38
- data/rosett-ai.gemspec +0 -63
- data/rules/.gitkeep +0 -0
- data/scripts/publish/pulp_upload.sh +0 -123
- data/settings.json +0 -29
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class LicenseStatusTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_license_status'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Show rai license activation status'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => true,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class ProjectTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_project'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Show rai project status, info, or drift detection'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => true,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -24,8 +27,10 @@ module RosettAi
|
|
|
24
27
|
'openWorldHint' => false
|
|
25
28
|
}.freeze
|
|
26
29
|
|
|
30
|
+
# @return [Array] Set of permitted action values.
|
|
27
31
|
VALID_ACTIONS = ['status', 'info', 'drift'].freeze
|
|
28
32
|
|
|
33
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
29
34
|
INPUT_SCHEMA = {
|
|
30
35
|
type: 'object',
|
|
31
36
|
properties: {
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class ProvenanceTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_provenance'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Query AI provenance (validate, show, log)'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => true,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -24,8 +27,10 @@ module RosettAi
|
|
|
24
27
|
'openWorldHint' => false
|
|
25
28
|
}.freeze
|
|
26
29
|
|
|
30
|
+
# @return [Array] Set of permitted action values.
|
|
27
31
|
VALID_ACTIONS = ['validate', 'show', 'log'].freeze
|
|
28
32
|
|
|
33
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
29
34
|
INPUT_SCHEMA = {
|
|
30
35
|
type: 'object',
|
|
31
36
|
properties: {
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class ProvenanceWriteTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_provenance_init'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Initialize AI provenance tracking in a project'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => false,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class RetrofitTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_retrofit'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Scan and convert native AI configs to rosett-ai format'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => false,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -24,8 +27,10 @@ module RosettAi
|
|
|
24
27
|
'openWorldHint' => false
|
|
25
28
|
}.freeze
|
|
26
29
|
|
|
30
|
+
# @return [Array] Set of permitted action values.
|
|
27
31
|
VALID_ACTIONS = ['engines', 'scan', 'convert'].freeze
|
|
28
32
|
|
|
33
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
29
34
|
INPUT_SCHEMA = {
|
|
30
35
|
type: 'object',
|
|
31
36
|
properties: {
|
|
@@ -18,9 +18,12 @@ module RosettAi
|
|
|
18
18
|
# @author hugo
|
|
19
19
|
# @author claude
|
|
20
20
|
class RuleSearchTool
|
|
21
|
+
# @return [String] MCP tool identifier string.
|
|
21
22
|
TOOL_NAME = 'rai_rule_search'
|
|
23
|
+
# @return [String] Human-readable description of this tool.
|
|
22
24
|
DESCRIPTION = 'Search rules by keyword with optional priority/scope/enabled filters'
|
|
23
25
|
|
|
26
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
24
27
|
ANNOTATIONS = {
|
|
25
28
|
'readOnlyHint' => true,
|
|
26
29
|
'destructiveHint' => false,
|
|
@@ -28,6 +31,7 @@ module RosettAi
|
|
|
28
31
|
'openWorldHint' => false
|
|
29
32
|
}.freeze
|
|
30
33
|
|
|
34
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
31
35
|
INPUT_SCHEMA = {
|
|
32
36
|
type: 'object',
|
|
33
37
|
properties: {
|
|
@@ -17,9 +17,12 @@ module RosettAi
|
|
|
17
17
|
# @author hugo
|
|
18
18
|
# @author claude
|
|
19
19
|
class SchemaGetTool
|
|
20
|
+
# @return [String] MCP tool identifier string.
|
|
20
21
|
TOOL_NAME = 'rai_schema_get'
|
|
22
|
+
# @return [String] Human-readable description of this tool.
|
|
21
23
|
DESCRIPTION = 'Get JSON Schema content for behaviour/design/tooling validation'
|
|
22
24
|
|
|
25
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
23
26
|
ANNOTATIONS = {
|
|
24
27
|
'readOnlyHint' => true,
|
|
25
28
|
'destructiveHint' => false,
|
|
@@ -27,6 +30,7 @@ module RosettAi
|
|
|
27
30
|
'openWorldHint' => false
|
|
28
31
|
}.freeze
|
|
29
32
|
|
|
33
|
+
# @return [Hash] Valid schemas constant.
|
|
30
34
|
VALID_SCHEMAS = {
|
|
31
35
|
'behaviour' => 'behaviour_schema.json',
|
|
32
36
|
'design' => 'design_schema.json',
|
|
@@ -36,6 +40,7 @@ module RosettAi
|
|
|
36
40
|
'policy' => 'policy_schema.json'
|
|
37
41
|
}.freeze
|
|
38
42
|
|
|
43
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
39
44
|
INPUT_SCHEMA = {
|
|
40
45
|
type: 'object',
|
|
41
46
|
properties: {
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class ToolingTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_tooling'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Run tooling validation (CI YAML, version checks)'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => true,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -24,8 +27,10 @@ module RosettAi
|
|
|
24
27
|
'openWorldHint' => false
|
|
25
28
|
}.freeze
|
|
26
29
|
|
|
30
|
+
# @return [Array] Set of permitted action values.
|
|
27
31
|
VALID_ACTIONS = ['validate-ci-yaml', 'check-versions'].freeze
|
|
28
32
|
|
|
33
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
29
34
|
INPUT_SCHEMA = {
|
|
30
35
|
type: 'object',
|
|
31
36
|
properties: {
|
|
@@ -17,9 +17,12 @@ module RosettAi
|
|
|
17
17
|
# @author hugo
|
|
18
18
|
# @author claude
|
|
19
19
|
class ValidateTool
|
|
20
|
+
# @return [String] MCP tool identifier string.
|
|
20
21
|
TOOL_NAME = 'rai_validate'
|
|
22
|
+
# @return [String] Human-readable description of this tool.
|
|
21
23
|
DESCRIPTION = 'Validate rai configuration files (behaviours, designs, tooling)'
|
|
22
24
|
|
|
25
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
23
26
|
ANNOTATIONS = {
|
|
24
27
|
'readOnlyHint' => true,
|
|
25
28
|
'destructiveHint' => false,
|
|
@@ -27,6 +30,7 @@ module RosettAi
|
|
|
27
30
|
'openWorldHint' => false
|
|
28
31
|
}.freeze
|
|
29
32
|
|
|
33
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
30
34
|
INPUT_SCHEMA = {
|
|
31
35
|
type: 'object',
|
|
32
36
|
properties: {
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class WorkflowExecuteTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_workflow_execute'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'Execute a named rai workflow'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => false,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -24,6 +27,7 @@ module RosettAi
|
|
|
24
27
|
'openWorldHint' => false
|
|
25
28
|
}.freeze
|
|
26
29
|
|
|
30
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
27
31
|
INPUT_SCHEMA = {
|
|
28
32
|
type: 'object',
|
|
29
33
|
properties: {
|
|
@@ -14,9 +14,12 @@ module RosettAi
|
|
|
14
14
|
# @author hugo
|
|
15
15
|
# @author claude
|
|
16
16
|
class WorkflowTool
|
|
17
|
+
# @return [String] MCP tool identifier string.
|
|
17
18
|
TOOL_NAME = 'rai_workflow'
|
|
19
|
+
# @return [String] Human-readable description of this tool.
|
|
18
20
|
DESCRIPTION = 'List, validate, or simulate rai workflows'
|
|
19
21
|
|
|
22
|
+
# @return [Hash] MCP protocol annotations describing tool capabilities.
|
|
20
23
|
ANNOTATIONS = {
|
|
21
24
|
'readOnlyHint' => true,
|
|
22
25
|
'destructiveHint' => false,
|
|
@@ -24,8 +27,10 @@ module RosettAi
|
|
|
24
27
|
'openWorldHint' => false
|
|
25
28
|
}.freeze
|
|
26
29
|
|
|
30
|
+
# @return [Array] Set of permitted action values.
|
|
27
31
|
VALID_ACTIONS = ['list', 'validate', 'simulate'].freeze
|
|
28
32
|
|
|
33
|
+
# @return [Hash] JSON Schema defining the tool input parameters.
|
|
29
34
|
INPUT_SCHEMA = {
|
|
30
35
|
type: 'object',
|
|
31
36
|
properties: {
|
|
@@ -18,7 +18,9 @@ module RosettAi
|
|
|
18
18
|
# @author hugo
|
|
19
19
|
# @author claude
|
|
20
20
|
class NnccConfigMigrator
|
|
21
|
+
# @return [String] Default source directory for NNCC config migration.
|
|
21
22
|
DEFAULT_SOURCE = '~/.config/nncc'
|
|
23
|
+
# @return [String] Default target directory for NNCC config migration.
|
|
22
24
|
DEFAULT_TARGET = '~/.config/rosett-ai'
|
|
23
25
|
|
|
24
26
|
attr_reader :source, :target, :migrated
|
|
@@ -10,11 +10,13 @@ module RosettAi
|
|
|
10
10
|
# Migrates behaviour/schema files from legacy ~/.claude/conf/ to
|
|
11
11
|
# XDG-compliant ~/.config/rosett-ai/conf/.
|
|
12
12
|
#
|
|
13
|
-
# Created after
|
|
13
|
+
# Created after discovering that global compile scope was reading from the
|
|
14
14
|
# installation directory because init placed files at ~/.claude/conf/
|
|
15
15
|
# instead of the XDG path specified in scope_hierarchy.yml.
|
|
16
16
|
class XdgMigrator
|
|
17
|
+
# @return [Object] Path to the legacy XDG configuration directory.
|
|
17
18
|
LEGACY_CONF = File.expand_path('~/.claude/conf')
|
|
19
|
+
# @return [String] Suffix appended to migrated legacy directories.
|
|
18
20
|
MIGRATED_SUFFIX = '.migrated-to-xdg'
|
|
19
21
|
|
|
20
22
|
attr_reader :legacy_dir, :xdg_dir, :migrated
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
|
|
5
5
|
|
|
6
6
|
module RosettAi
|
|
7
|
+
# System package manager abstraction (apt, gem).
|
|
7
8
|
module PackageManager
|
|
8
9
|
# APT package manager backend for Debian-based systems.
|
|
9
10
|
#
|
|
@@ -13,9 +14,13 @@ module RosettAi
|
|
|
13
14
|
# @author hugo
|
|
14
15
|
# @author claude
|
|
15
16
|
class Apt < Base
|
|
17
|
+
# @return [String] Path to the dpkg-query binary.
|
|
16
18
|
DPKG_QUERY = 'dpkg-query'
|
|
19
|
+
# @return [String] Path to the apt-cache binary.
|
|
17
20
|
APT_CACHE = 'apt-cache'
|
|
21
|
+
# @return [String] Path to the pkexec binary for privilege escalation.
|
|
18
22
|
PKEXEC = 'pkexec'
|
|
23
|
+
# @return [String] Path to the apt-get binary.
|
|
19
24
|
APT_GET = 'apt-get'
|
|
20
25
|
|
|
21
26
|
# @return [String]
|
|
@@ -7,6 +7,7 @@ require 'json'
|
|
|
7
7
|
require 'json_schemer'
|
|
8
8
|
|
|
9
9
|
module RosettAi
|
|
10
|
+
# Debian package variant configuration.
|
|
10
11
|
module Packaging
|
|
11
12
|
# Loads and validates packaging variant configs from conf/packaging/<name>.yml.
|
|
12
13
|
#
|
|
@@ -15,6 +16,7 @@ module RosettAi
|
|
|
15
16
|
# "current" resolves to ">= #{RosettAi::VERSION}" at load time, ensuring
|
|
16
17
|
# atomic version updates per lifecycle_management.yml constraints.
|
|
17
18
|
class VariantConfig
|
|
19
|
+
# @return [Array] Attribute field names for this data object.
|
|
18
20
|
FIELDS = [
|
|
19
21
|
:name, :variant, :description, :ui_adapter,
|
|
20
22
|
:system_dependencies, :package_dependencies
|
|
@@ -30,6 +32,10 @@ module RosettAi
|
|
|
30
32
|
@package_dependencies ||= []
|
|
31
33
|
end
|
|
32
34
|
|
|
35
|
+
# Load the license key from persistent storage.
|
|
36
|
+
#
|
|
37
|
+
# @param variant_name [Object] the variant name
|
|
38
|
+
# @return [LicenseKey, nil]
|
|
33
39
|
def self.load(variant_name)
|
|
34
40
|
path = variants_dir.join("#{variant_name}.yml")
|
|
35
41
|
unless path.exist?
|
|
@@ -42,16 +48,22 @@ module RosettAi
|
|
|
42
48
|
new(data)
|
|
43
49
|
end
|
|
44
50
|
|
|
51
|
+
# List all available registered items.
|
|
52
|
+
# @return [Array]
|
|
45
53
|
def self.available
|
|
46
54
|
Dir.glob(variants_dir.join('*.yml')).map do |file|
|
|
47
55
|
File.basename(file, '.yml')
|
|
48
56
|
end.sort
|
|
49
57
|
end
|
|
50
58
|
|
|
59
|
+
# Return the packaging variants directory path.
|
|
60
|
+
# @return [Pathname]
|
|
51
61
|
def self.variants_dir
|
|
52
62
|
RosettAi.root.join('conf', 'packaging')
|
|
53
63
|
end
|
|
54
64
|
|
|
65
|
+
# Return the FPM dependency flags for this variant.
|
|
66
|
+
# @return [Array<String>]
|
|
55
67
|
def fpm_depends
|
|
56
68
|
deps = system_dependencies.dup
|
|
57
69
|
package_dependencies.each do |dep|
|
|
@@ -21,6 +21,8 @@ module RosettAi
|
|
|
21
21
|
|
|
22
22
|
# Engine-specific class methods beyond the base Contract.
|
|
23
23
|
module ClassMethods
|
|
24
|
+
# Return the plugin type identifier.
|
|
25
|
+
# @return [Symbol]
|
|
24
26
|
def plugin_type = :engine
|
|
25
27
|
|
|
26
28
|
# @return [String] engine identifier (e.g. 'claude', 'goose')
|
|
@@ -14,8 +14,10 @@ module RosettAi
|
|
|
14
14
|
# Replaces the hardcoded ENGINES and BACKENDS maps from
|
|
15
15
|
# RosettAi::Engines::Registry and RosettAi::Compiler::Backend.
|
|
16
16
|
class Registry
|
|
17
|
+
# @return [Array] Supported plugin type categories.
|
|
17
18
|
PLUGIN_TYPES = [:engine, :gui, :mcp].freeze
|
|
18
19
|
|
|
20
|
+
# PluginNotFoundError implementation.
|
|
19
21
|
class PluginNotFoundError < RosettAi::Error; end
|
|
20
22
|
|
|
21
23
|
@plugins = Hash.new { |h, k| h[k] = {} }
|
|
@@ -61,7 +63,15 @@ module RosettAi
|
|
|
61
63
|
|
|
62
64
|
# Convenience accessors for each plugin type.
|
|
63
65
|
def engines = @plugins[:engine]
|
|
66
|
+
|
|
67
|
+
# List registered GUI plugins.
|
|
68
|
+
#
|
|
69
|
+
# @return [Hash]
|
|
64
70
|
def guis = @plugins[:gui]
|
|
71
|
+
|
|
72
|
+
# List registered MCP plugins.
|
|
73
|
+
#
|
|
74
|
+
# @return [Hash]
|
|
65
75
|
def mcps = @plugins[:mcp]
|
|
66
76
|
|
|
67
77
|
# Discover and load all installed plugin gems.
|
|
@@ -10,6 +10,7 @@ module RosettAi
|
|
|
10
10
|
# Files containing +# AI-MODIFICATION: disabled+ are added to the
|
|
11
11
|
# protected files list during compilation.
|
|
12
12
|
class OptOutScanner
|
|
13
|
+
# @return [String] File marker for AI opt-out declarations.
|
|
13
14
|
MARKER = 'AI-MODIFICATION: disabled'
|
|
14
15
|
|
|
15
16
|
# Scans a single file for opt-out markers.
|
|
@@ -10,7 +10,9 @@ module RosettAi
|
|
|
10
10
|
# Policy hierarchy: org > team > project. Child tiers can add patterns
|
|
11
11
|
# or restrictions but can never remove patterns set by parent tiers.
|
|
12
12
|
class TierHierarchy
|
|
13
|
+
# @return [Array] Defined tier levels.
|
|
13
14
|
TIERS = ['mandatory', 'advisory', 'informational'].freeze
|
|
15
|
+
# @return [Array] Supported configuration scope names.
|
|
14
16
|
SCOPES = ['org', 'team', 'project'].freeze
|
|
15
17
|
|
|
16
18
|
# Validates that a child policy does not loosen a parent policy.
|
|
@@ -15,6 +15,7 @@ module RosettAi
|
|
|
15
15
|
# @author hugo
|
|
16
16
|
# @author claude
|
|
17
17
|
class Validator
|
|
18
|
+
# @return [Object] Path to the JSON Schema file used for validation.
|
|
18
19
|
SCHEMA_PATH = File.expand_path('../../../conf/schemas/policy_schema.json', __dir__)
|
|
19
20
|
|
|
20
21
|
# @return [Array<String>] validation errors (empty if valid)
|
data/lib/rosett_ai/profiler.rb
CHANGED
|
@@ -69,10 +69,17 @@ module RosettAi
|
|
|
69
69
|
# No-op profiler when RAI_PROFILE is not set.
|
|
70
70
|
# Zero overhead — all methods are empty.
|
|
71
71
|
class NullProfiler
|
|
72
|
+
# Measure execution time of a block (no-op in null profiler).
|
|
73
|
+
#
|
|
74
|
+
# @param _phase_name [String] ignored phase name
|
|
75
|
+
# @return [Object] block return value
|
|
72
76
|
def measure(_phase_name)
|
|
73
77
|
yield
|
|
74
78
|
end
|
|
75
79
|
|
|
80
|
+
# Return the profiling report (no-op in null profiler).
|
|
81
|
+
#
|
|
82
|
+
# @return [void]
|
|
76
83
|
def report; end
|
|
77
84
|
end
|
|
78
85
|
end
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
# Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
|
|
5
5
|
|
|
6
6
|
module RosettAi
|
|
7
|
+
# AI contribution provenance tracking.
|
|
7
8
|
module Provenance
|
|
8
9
|
# A single provenance entry recording AI involvement in a commit.
|
|
9
10
|
#
|
|
10
11
|
# Each entry captures the commit SHA, contributor identity, AI tool used,
|
|
11
12
|
# the AI's role, and which files were involved.
|
|
12
13
|
class Entry
|
|
14
|
+
# @return [Array] Permitted AI contribution role values.
|
|
13
15
|
ALLOWED_ROLES = [
|
|
14
16
|
'AI-Generated-By',
|
|
15
17
|
'AI-Co-Author',
|
|
@@ -10,6 +10,7 @@ module RosettAi
|
|
|
10
10
|
# Source types track where AI-generated code drew its knowledge from,
|
|
11
11
|
# enabling license traceability and compliance auditing.
|
|
12
12
|
class Source
|
|
13
|
+
# @return [Array] Permitted provenance source type values.
|
|
13
14
|
ALLOWED_TYPES = [
|
|
14
15
|
'library_api',
|
|
15
16
|
'project_code',
|
|
@@ -18,9 +18,12 @@ module RosettAi
|
|
|
18
18
|
# @author hugo
|
|
19
19
|
# @author claude
|
|
20
20
|
class Store
|
|
21
|
+
# @return [String] Default filename for this artifact.
|
|
21
22
|
FILENAME = '.ai-provenance.yml'
|
|
22
23
|
MAX_FILE_SIZE = 1_048_576 # 1 MB
|
|
24
|
+
# @return [Integer] Current provenance schema version.
|
|
23
25
|
SCHEMA_VERSION = 1
|
|
26
|
+
# @return [Object] Placeholder hash for initial provenance entries.
|
|
24
27
|
ZERO_HASH = ('0' * 64).freeze
|
|
25
28
|
|
|
26
29
|
attr_reader :root
|
|
@@ -10,6 +10,7 @@ module RosettAi
|
|
|
10
10
|
module Provenance
|
|
11
11
|
# Validates provenance entries against the provenance JSON Schema.
|
|
12
12
|
class Validator
|
|
13
|
+
# @return [Object] Path to the JSON Schema file used for validation.
|
|
13
14
|
SCHEMA_PATH = File.join(RosettAi.root, 'conf', 'schemas', 'provenance_schema.json')
|
|
14
15
|
|
|
15
16
|
# Validates provenance data against the schema.
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
|
|
5
5
|
|
|
6
6
|
module RosettAi
|
|
7
|
+
# Multi-engine consensus analysis.
|
|
7
8
|
module Quorum
|
|
8
9
|
# Normalizes per-engine responses to the standard adopt contract:
|
|
9
10
|
# { findings: [...], overall_status: "pass|warn|fail", summary: "..." }
|
|
@@ -11,7 +11,9 @@ module RosettAi
|
|
|
11
11
|
# are promoted by severity. Unique findings are annotated with their
|
|
12
12
|
# source engine for transparency.
|
|
13
13
|
class Comparator
|
|
14
|
+
# @return [Array] Severity levels that cause a check to fail.
|
|
14
15
|
FAIL_SEVERITIES = ['high', 'critical'].freeze
|
|
16
|
+
# @return [Hash] Numeric ranking for severity comparison.
|
|
15
17
|
SEVERITY_RANK = { 'low' => 0, 'medium' => 1, 'high' => 2, 'critical' => 3 }.freeze
|
|
16
18
|
|
|
17
19
|
# Compare and aggregate collected engine results.
|
data/lib/rosett_ai/rai_config.rb
CHANGED
|
@@ -11,6 +11,7 @@ module RosettAi
|
|
|
11
11
|
# Returns compiled defaults when no config file exists. User values are
|
|
12
12
|
# deep-merged over defaults and validated against the rai config JSON Schema.
|
|
13
13
|
class RaiConfig
|
|
14
|
+
# @return [Hash] Default configuration values.
|
|
14
15
|
DEFAULTS = {
|
|
15
16
|
'default_engine' => 'claude',
|
|
16
17
|
'cache' => { 'enabled' => true, 'ttl_hours' => 24 },
|
|
@@ -25,12 +26,20 @@ module RosettAi
|
|
|
25
26
|
@data = load_config
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# Return the default engine name.
|
|
30
|
+
# @return [String]
|
|
28
31
|
def default_engine = @data['default_engine']
|
|
29
32
|
def cache_enabled? = @data.dig('cache', 'enabled')
|
|
33
|
+
# Return the cache TTL in hours.
|
|
34
|
+
# @return [Integer]
|
|
30
35
|
def cache_ttl_hours = @data.dig('cache', 'ttl_hours')
|
|
31
36
|
def detect_on_init? = @data.dig('detect', 'on_init')
|
|
32
37
|
def dbus_allow_plugin_management? = @data.dig('dbus', 'allow_plugin_management') == true
|
|
33
38
|
|
|
39
|
+
# Load the license key from persistent storage.
|
|
40
|
+
#
|
|
41
|
+
# @param config_path [Object] the config path
|
|
42
|
+
# @return [LicenseKey, nil]
|
|
34
43
|
def self.load(config_path: nil)
|
|
35
44
|
new(config_path: config_path)
|
|
36
45
|
end
|
|
@@ -7,6 +7,7 @@ require 'yaml'
|
|
|
7
7
|
require 'fileutils'
|
|
8
8
|
|
|
9
9
|
module RosettAi
|
|
10
|
+
# Reverse-compile native configs to rosett-ai YAML.
|
|
10
11
|
module Retrofit
|
|
11
12
|
# Orchestrates reverse compilation from native AI tool configs to Rosett-AI YAML.
|
|
12
13
|
#
|
|
@@ -16,6 +17,7 @@ module RosettAi
|
|
|
16
17
|
# @author hugo
|
|
17
18
|
# @author claude
|
|
18
19
|
class Engine
|
|
20
|
+
# @return [Hash] Maps engine names to their parser classes.
|
|
19
21
|
PARSER_REGISTRY = {
|
|
20
22
|
'claude' => 'RosettAi::Retrofit::Parsers::ClaudeParser',
|
|
21
23
|
'cursor' => 'RosettAi::Retrofit::Parsers::CursorParser',
|