rosett-ai 1.3.3
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 +7 -0
- data/.ai-provenance.yml +119 -0
- data/.debride_whitelist +186 -0
- data/.fasterer.yml +29 -0
- data/.mdl_style.rb +10 -0
- data/.mdlrc +3 -0
- data/.mutant.yml +49 -0
- data/.namespace-allowlist +42 -0
- data/.reek.yml +1040 -0
- data/.rosett-ai/config.yml +3 -0
- data/.rspec +5 -0
- data/.rubocop.yml +380 -0
- data/.ruby-version +1 -0
- data/.yamllint +51 -0
- data/.yardopts +12 -0
- data/AI-DISCLOSURE.md +48 -0
- data/CHANGELOG.md +519 -0
- data/CLAUDE.md +141 -0
- data/CONTRIBUTING.md +734 -0
- data/INSTALL.md +154 -0
- data/LICENSE +674 -0
- data/LICENSE.md +675 -0
- data/QUICKSTART.md +73 -0
- data/README.md +366 -0
- data/Rakefile +200 -0
- data/SECURITY.md +114 -0
- data/bin/rai +1 -0
- data/cliff.toml +52 -0
- data/conf/adopt_redactions.yml +8 -0
- data/conf/behaviour/.gitkeep +0 -0
- data/conf/compliance/cra_rules.yml +25 -0
- data/conf/compliance/license_rules.yml +20 -0
- data/conf/design/aaif_alignment.yml +181 -0
- data/conf/design/ab_testing.yml +172 -0
- data/conf/design/accessibility.yml +84 -0
- data/conf/design/ai_authorship.yml +210 -0
- data/conf/design/ai_provenance.yml +224 -0
- data/conf/design/ai_tool_configuration.yml +207 -0
- data/conf/design/architecture.yml +139 -0
- data/conf/design/autocompletion.yml +115 -0
- data/conf/design/backward_compatibility.yml +112 -0
- data/conf/design/behaviour_composition.yml +246 -0
- data/conf/design/build_rake_extraction.yml +57 -0
- data/conf/design/ci_pipeline.yml +100 -0
- data/conf/design/claude_code_configuration.yml +157 -0
- data/conf/design/compiler.yml +128 -0
- data/conf/design/comply.yml +153 -0
- data/conf/design/content_packs.yml +84 -0
- data/conf/design/desktop_integration.yml +289 -0
- data/conf/design/distribution.yml +216 -0
- data/conf/design/doctor.yml +184 -0
- data/conf/design/documentation.yml +152 -0
- data/conf/design/engine_architecture.yml +257 -0
- data/conf/design/error_handling.yml +103 -0
- data/conf/design/feature_flags.yml +142 -0
- data/conf/design/git_hooks.yml +165 -0
- data/conf/design/gui_plugins.yml +475 -0
- data/conf/design/i18n.yml +84 -0
- data/conf/design/integration_testing.yml +56 -0
- data/conf/design/licensing_system.yml +88 -0
- data/conf/design/lifecycle_management.yml +208 -0
- data/conf/design/mcp_integration.yml +207 -0
- data/conf/design/mcp_settings.yml +126 -0
- data/conf/design/migration.yml +56 -0
- data/conf/design/monitoring_observability.yml +194 -0
- data/conf/design/namespace_cleanup.yml +145 -0
- data/conf/design/plugin_test_segregation.yml +145 -0
- data/conf/design/policy_management.yml +229 -0
- data/conf/design/project_management.yml +183 -0
- data/conf/design/rai_mcp_asset_discovery.yml +164 -0
- data/conf/design/rai_mcp_server.yml +605 -0
- data/conf/design/release_management.yml +117 -0
- data/conf/design/retrofit.yml +199 -0
- data/conf/design/retrospective_analyzer.yml +79 -0
- data/conf/design/scope_hierarchy.yml +352 -0
- data/conf/design/security.yml +115 -0
- data/conf/design/session_retrospective.yml +85 -0
- data/conf/design/smart_ui_feedback.yml +89 -0
- data/conf/design/structured_logging.yml +148 -0
- data/conf/design/styles.yml +123 -0
- data/conf/design/test_peer_review.yml +89 -0
- data/conf/design/testing.yml +136 -0
- data/conf/design/threat_model.yml +108 -0
- data/conf/design/ui_framework.yml +111 -0
- data/conf/design/usage_optimization.yml +122 -0
- data/conf/design/version_management.yml +60 -0
- data/conf/design/workflow.yml +227 -0
- data/conf/mcp/server_defaults.yml +42 -0
- data/conf/mcp/trust.yml +21 -0
- data/conf/packaging/core.yml +12 -0
- data/conf/packaging/gtk4.yml +11 -0
- data/conf/packaging/qt6.yml +11 -0
- data/conf/policy/default_deny_list.yml +197 -0
- data/conf/review/cli-command-audit.yml +857 -0
- data/conf/review/design-docs.yml +1064 -0
- data/conf/review/design-questionnaire.yml +153 -0
- data/conf/review/questionnaire.yml +146 -0
- data/conf/review/rosett-ai-core.yml +2919 -0
- data/conf/schemas/ai_config_schema.json +73 -0
- data/conf/schemas/behaviour_schema.json +132 -0
- data/conf/schemas/compliance_rule_schema.json +63 -0
- data/conf/schemas/content_pack_manifest_schema.json +51 -0
- data/conf/schemas/design_schema.json +210 -0
- data/conf/schemas/engine_manifest_schema.json +144 -0
- data/conf/schemas/lockfile_schema.json +74 -0
- data/conf/schemas/mcp_server_schema.json +48 -0
- data/conf/schemas/packaging_schema.json +70 -0
- data/conf/schemas/policy_schema.json +85 -0
- data/conf/schemas/provenance_schema.json +84 -0
- data/conf/schemas/rai_config_schema.json +56 -0
- data/conf/schemas/rai_project_schema.json +20 -0
- data/conf/schemas/scope_hierarchy_schema.json +49 -0
- data/conf/schemas/target_schema.json +67 -0
- data/conf/schemas/tooling_schema.json +65 -0
- data/conf/schemas/workflow_schema.json +112 -0
- data/conf/targets/agents_md.yml +17 -0
- data/conf/targets/claude.yml +12 -0
- data/conf/tooling/tools.yml +58 -0
- data/dist/rosett-ai-mcp.service +48 -0
- data/dist/rosett-ai-mcp.yml.default +45 -0
- data/doc/AAIF_POSITIONING.md +58 -0
- data/doc/ADOPT.md +224 -0
- data/doc/AI_PROVENANCE.md +139 -0
- data/doc/ARCHITECTURE.md +920 -0
- data/doc/BEHAVIOUR.md +409 -0
- data/doc/BUILD.md +138 -0
- data/doc/CI_CD_RECIPES.md +171 -0
- data/doc/CLAUDE_SESSIONS_MOVED.md +16 -0
- data/doc/COMMAND_ANALYSIS.md +229 -0
- data/doc/CONFIGURATION.md +281 -0
- data/doc/DESIGN_AUDIT.md +235 -0
- data/doc/DESIGN_PEER_REVIEW.md +771 -0
- data/doc/DESKTOP.md +447 -0
- data/doc/ENGINES.md +567 -0
- data/doc/ENGINE_DEVELOPMENT_GUIDE.md +417 -0
- data/doc/FEATURE_AUDIT.md +218 -0
- data/doc/IMPLEMENTATION_PLAN.md +669 -0
- data/doc/INCIDENT_REPORT_2026-02-02.md +251 -0
- data/doc/MIGRATION_GUIDE.md +88 -0
- data/doc/PACKAGING.md +232 -0
- data/doc/PROJECT_DASHBOARD.md +153 -0
- data/doc/PULP_DEPLOYMENT.md +164 -0
- data/doc/QUALITY_FIX_SUMMARY.md +110 -0
- data/doc/QUICK_START.md +162 -0
- data/doc/REEK_CONFIGURATION.md +166 -0
- data/doc/REFERENCE.md +253 -0
- data/doc/REFERENCES.md +324 -0
- data/doc/SECURITY_REVIEW_CHECKLIST.md +72 -0
- data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +359 -0
- data/doc/SETUP.md +202 -0
- data/doc/TEST_PEER_REVIEW.md +152 -0
- data/doc/THREAT_MODEL.md +230 -0
- data/doc/USAGE.md +545 -0
- data/doc/USER_MANUAL.md +585 -0
- data/doc/ai_test_review_checklist.md +110 -0
- data/doc/changes/2026-02-18-packaging-fpm.md +155 -0
- data/doc/changes/2026-02-19-testing-infrastructure.md +221 -0
- data/doc/changes/2026-02-20-security-implementation.md +281 -0
- data/doc/changes/2026-02-20-styles-implementation.md +220 -0
- data/doc/changes/2026-02-21-architecture-completion.md +95 -0
- data/doc/changes/2026-02-21-architecture-ui-layer.md +253 -0
- data/doc/changes/2026-02-21-cc-config-implementation.md +108 -0
- data/doc/changes/2026-02-21-ci-pipeline-implementation.md +214 -0
- data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +241 -0
- data/doc/changes/2026-02-21-config-design-show-commands.md +61 -0
- data/doc/changes/2026-02-21-design-implementation-overview.md +455 -0
- data/doc/changes/2026-02-21-lifecycle-management.md +196 -0
- data/doc/changes/2026-02-21-path-resolver.md +128 -0
- data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +45 -0
- data/doc/changes/2026-03-01-ci-bundler-strategy.md +120 -0
- data/doc/changes/2026-03-20-security-hardening-phase2.md +163 -0
- data/doc/context/SESSION-HANDOFF.md +69 -0
- data/doc/context/ai-engine-usage-trends-2026.md +80 -0
- data/doc/context/plan-pluggable-engines.md +590 -0
- data/doc/decisions/001-flog-deferred.md +32 -0
- data/doc/decisions/002-path-resolution-strategy.md +158 -0
- data/doc/decisions/003-ui-adapter-selection.md +193 -0
- data/doc/decisions/004-design-document-validation.md +179 -0
- data/doc/decisions/005-package-splitting-strategy.md +200 -0
- data/doc/decisions/006-multi-engine-architecture.md +147 -0
- data/doc/decisions/007-engine-agnostic-pivot.md +219 -0
- data/doc/decisions/008-ci-bundler-strategy.md +129 -0
- data/doc/decisions/009-core-only-v1-release.md +60 -0
- data/doc/decisions/010-engine-debian-packaging.md +66 -0
- data/doc/decisions/011-context-aware-cli.md +71 -0
- data/doc/dependency_decisions.yml +247 -0
- data/doc/issues/001-wrapper-missing-environment-variables.md +197 -0
- data/doc/issues/002-embedded-ruby-wrong-prefix.md +217 -0
- data/doc/issues/003-smoke-test-false-positive.md +127 -0
- data/doc/issues/004-market-research-design-updates.md +109 -0
- data/doc/issues/005-compile-scope-coexistence.md +161 -0
- data/doc/locales/.gitkeep +0 -0
- data/doc/man/rai.1.ronn +505 -0
- data/doc/operations/packaging.md +133 -0
- data/doc/operations/rosett-ai-release.md +65 -0
- data/doc/reference/error-catalog.md +107 -0
- 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 +4 -0
- data/doc/reference/src/bibliography.bib +79 -0
- data/doc/reference/src/main.tex +1288 -0
- data/doc/reference/src/structure.tex +303 -0
- data/doc/rosett-ai-bookmarks.html +301 -0
- data/kitchen.yml +46 -0
- data/lib/rosett_ai/adopter/executor_resolver.rb +77 -0
- data/lib/rosett_ai/adopter/local_analysis_collector.rb +154 -0
- data/lib/rosett_ai/adopter/rule_adopter.rb +254 -0
- data/lib/rosett_ai/ai_config/config_compiler.rb +111 -0
- data/lib/rosett_ai/ai_config/context_window.rb +55 -0
- data/lib/rosett_ai/ai_config/cost_controls.rb +44 -0
- data/lib/rosett_ai/ai_config/fallback_chain.rb +64 -0
- data/lib/rosett_ai/ai_config/model_router.rb +121 -0
- data/lib/rosett_ai/ai_config/validator.rb +45 -0
- data/lib/rosett_ai/authorship/attribution_compiler.rb +99 -0
- data/lib/rosett_ai/authorship/disclosure_policy.rb +81 -0
- data/lib/rosett_ai/authorship/review_validator.rb +39 -0
- data/lib/rosett_ai/authorship/trailer_generator.rb +88 -0
- data/lib/rosett_ai/backup/compressor.rb +180 -0
- data/lib/rosett_ai/backup/destination.rb +91 -0
- data/lib/rosett_ai/behaviour/manager.rb +156 -0
- data/lib/rosett_ai/compiler/backend.rb +86 -0
- data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +80 -0
- data/lib/rosett_ai/compiler/backends/claude_backend.rb +88 -0
- data/lib/rosett_ai/compiler/backends/generic_backend.rb +15 -0
- data/lib/rosett_ai/compiler/behaviour_compiler.rb +40 -0
- data/lib/rosett_ai/compiler/capability_checker.rb +104 -0
- data/lib/rosett_ai/compiler/compilation_pipeline.rb +361 -0
- data/lib/rosett_ai/compiler/compiled_output.rb +39 -0
- data/lib/rosett_ai/compiler/locale_compiler.rb +250 -0
- data/lib/rosett_ai/compiler/target_profile.rb +112 -0
- data/lib/rosett_ai/completion/generator.rb +101 -0
- data/lib/rosett_ai/completion/shells/bash_generator.rb +126 -0
- data/lib/rosett_ai/completion/shells/fish_generator.rb +78 -0
- data/lib/rosett_ai/completion/shells/zsh_generator.rb +126 -0
- data/lib/rosett_ai/comply/checkers/cra_checker.rb +102 -0
- data/lib/rosett_ai/comply/checkers/license_checker.rb +85 -0
- data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +98 -0
- data/lib/rosett_ai/comply/reporter.rb +113 -0
- data/lib/rosett_ai/comply/runner.rb +50 -0
- data/lib/rosett_ai/composition/circular_dependency_detector.rb +56 -0
- data/lib/rosett_ai/composition/composer.rb +158 -0
- data/lib/rosett_ai/composition/composition_result.rb +64 -0
- data/lib/rosett_ai/composition/conflict_detector.rb +53 -0
- data/lib/rosett_ai/composition/lockfile.rb +103 -0
- data/lib/rosett_ai/composition/merge_strategy.rb +131 -0
- data/lib/rosett_ai/composition/priority_sorter.rb +29 -0
- data/lib/rosett_ai/composition/scope_resolver.rb +55 -0
- data/lib/rosett_ai/config/compile_result.rb +37 -0
- data/lib/rosett_ai/config/compiler.rb +13 -0
- data/lib/rosett_ai/config/domain_transformer.rb +13 -0
- data/lib/rosett_ai/config/key_map.rb +13 -0
- data/lib/rosett_ai/config/masking_secret_resolver.rb +40 -0
- data/lib/rosett_ai/config/scope_router.rb +13 -0
- data/lib/rosett_ai/config/secret_resolver.rb +125 -0
- data/lib/rosett_ai/configuration.rb +119 -0
- data/lib/rosett_ai/content/content_client.rb +60 -0
- data/lib/rosett_ai/content/pack_installer.rb +117 -0
- data/lib/rosett_ai/content/pack_manifest.rb +50 -0
- data/lib/rosett_ai/content/pack_registry.rb +68 -0
- data/lib/rosett_ai/content_packs/manager.rb +50 -0
- data/lib/rosett_ai/dbus/compositor_detector.rb +77 -0
- data/lib/rosett_ai/dbus/focus_adapters/base.rb +59 -0
- data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +172 -0
- data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +77 -0
- data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +65 -0
- data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +103 -0
- data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +105 -0
- data/lib/rosett_ai/dbus/focus_monitor_interface.rb +103 -0
- data/lib/rosett_ai/dbus/manager_interface.rb +213 -0
- data/lib/rosett_ai/dbus/plugin_manager_interface.rb +169 -0
- data/lib/rosett_ai/dbus/rate_limiter.rb +89 -0
- data/lib/rosett_ai/dbus/service.rb +121 -0
- data/lib/rosett_ai/dbus/status_notifier_interface.rb +79 -0
- data/lib/rosett_ai/deprecation.rb +79 -0
- data/lib/rosett_ai/desktop/dbus_client.rb +259 -0
- data/lib/rosett_ai/desktop/gtk4_app.rb +371 -0
- data/lib/rosett_ai/desktop/gtk4_preferences.rb +331 -0
- data/lib/rosett_ai/desktop/gui_logger.rb +236 -0
- data/lib/rosett_ai/doctor/check.rb +92 -0
- data/lib/rosett_ai/doctor/checks/cache_health_check.rb +50 -0
- data/lib/rosett_ai/doctor/checks/dbus_availability_check.rb +39 -0
- data/lib/rosett_ai/doctor/checks/engine_detection_check.rb +46 -0
- data/lib/rosett_ai/doctor/checks/file_permission_check.rb +44 -0
- data/lib/rosett_ai/doctor/checks/gem_dependency_check.rb +55 -0
- data/lib/rosett_ai/doctor/checks/ruby_version_check.rb +50 -0
- data/lib/rosett_ai/doctor/checks/stale_config_nncc_check.rb +57 -0
- data/lib/rosett_ai/doctor/checks/stale_home_nncc_check.rb +59 -0
- data/lib/rosett_ai/doctor.rb +81 -0
- data/lib/rosett_ai/documentation/reference_compiler.rb +122 -0
- data/lib/rosett_ai/documentation/translator.rb +62 -0
- data/lib/rosett_ai/engines/base_config_compiler.rb +203 -0
- data/lib/rosett_ai/engines/detector.rb +63 -0
- data/lib/rosett_ai/engines/registry.rb +50 -0
- data/lib/rosett_ai/error_handler.rb +139 -0
- data/lib/rosett_ai/exit_codes.rb +76 -0
- data/lib/rosett_ai/feature_flags.rb +102 -0
- data/lib/rosett_ai/formatting.rb +33 -0
- data/lib/rosett_ai/gem_consistency_checker.rb +199 -0
- data/lib/rosett_ai/git_hooks/chain_detector.rb +86 -0
- data/lib/rosett_ai/git_hooks/installer.rb +175 -0
- data/lib/rosett_ai/git_hooks/script_generator.rb +125 -0
- data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +79 -0
- data/lib/rosett_ai/i18n/locale_resolver.rb +46 -0
- data/lib/rosett_ai/i18n/utf8_checker.rb +32 -0
- data/lib/rosett_ai/init/config_file_writer.rb +24 -0
- data/lib/rosett_ai/init/directory_builder.rb +38 -0
- data/lib/rosett_ai/init/file_copier.rb +95 -0
- data/lib/rosett_ai/init/global_initializer.rb +28 -0
- data/lib/rosett_ai/init/local_initializer.rb +27 -0
- data/lib/rosett_ai/init/mcp_registrar.rb +109 -0
- data/lib/rosett_ai/init/project_initializer.rb +38 -0
- data/lib/rosett_ai/licensing/license_key.rb +139 -0
- data/lib/rosett_ai/licensing/license_store.rb +64 -0
- data/lib/rosett_ai/licensing/license_validator.rb +60 -0
- data/lib/rosett_ai/licensing/tier.rb +42 -0
- data/lib/rosett_ai/mcp/admin/auditor.rb +88 -0
- data/lib/rosett_ai/mcp/admin/health_checker.rb +81 -0
- data/lib/rosett_ai/mcp/admin/registry.rb +100 -0
- data/lib/rosett_ai/mcp/admin/schema_validator.rb +63 -0
- data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
- data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +197 -0
- data/lib/rosett_ai/mcp/enforcement/validator.rb +215 -0
- data/lib/rosett_ai/mcp/governance.rb +160 -0
- data/lib/rosett_ai/mcp/http_security_config.rb +158 -0
- data/lib/rosett_ai/mcp/instructions.rb +266 -0
- data/lib/rosett_ai/mcp/key_hasher.rb +66 -0
- data/lib/rosett_ai/mcp/keyfile.rb +221 -0
- data/lib/rosett_ai/mcp/middleware/authentication.rb +146 -0
- data/lib/rosett_ai/mcp/middleware/content_type.rb +56 -0
- data/lib/rosett_ai/mcp/middleware/cors.rb +83 -0
- data/lib/rosett_ai/mcp/middleware/origin_validation.rb +73 -0
- data/lib/rosett_ai/mcp/middleware/rate_limit.rb +106 -0
- data/lib/rosett_ai/mcp/middleware/request_size.rb +51 -0
- data/lib/rosett_ai/mcp/plugins.rb +143 -0
- data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +40 -0
- data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +127 -0
- data/lib/rosett_ai/mcp/resources/config_resource.rb +72 -0
- data/lib/rosett_ai/mcp/resources/design_resource.rb +58 -0
- data/lib/rosett_ai/mcp/resources/hooks_resource.rb +74 -0
- data/lib/rosett_ai/mcp/resources/provenance_resource.rb +51 -0
- data/lib/rosett_ai/mcp/resources/rules_resource.rb +60 -0
- data/lib/rosett_ai/mcp/resources/schema_resource.rb +72 -0
- data/lib/rosett_ai/mcp/response_helper.rb +46 -0
- data/lib/rosett_ai/mcp/security_logger.rb +60 -0
- data/lib/rosett_ai/mcp/server.rb +212 -0
- data/lib/rosett_ai/mcp/settings/server_installer.rb +112 -0
- data/lib/rosett_ai/mcp/settings/trust_manager.rb +142 -0
- data/lib/rosett_ai/mcp/tools/adopt_tool.rb +70 -0
- data/lib/rosett_ai/mcp/tools/backup_tool.rb +64 -0
- data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +72 -0
- data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +56 -0
- data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +114 -0
- data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +62 -0
- data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +122 -0
- data/lib/rosett_ai/mcp/tools/compile_tool.rb +191 -0
- data/lib/rosett_ai/mcp/tools/comply_tool.rb +79 -0
- data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +71 -0
- data/lib/rosett_ai/mcp/tools/config_status_tool.rb +79 -0
- data/lib/rosett_ai/mcp/tools/content_tool.rb +78 -0
- data/lib/rosett_ai/mcp/tools/context_query_tool.rb +156 -0
- data/lib/rosett_ai/mcp/tools/design_list_tool.rb +57 -0
- data/lib/rosett_ai/mcp/tools/design_show_tool.rb +69 -0
- data/lib/rosett_ai/mcp/tools/doctor_tool.rb +62 -0
- data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +45 -0
- data/lib/rosett_ai/mcp/tools/engines_tool.rb +84 -0
- data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +190 -0
- data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +173 -0
- data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +84 -0
- data/lib/rosett_ai/mcp/tools/init_tool.rb +87 -0
- data/lib/rosett_ai/mcp/tools/license_status_tool.rb +44 -0
- data/lib/rosett_ai/mcp/tools/project_tool.rb +117 -0
- data/lib/rosett_ai/mcp/tools/provenance_tool.rb +97 -0
- data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +40 -0
- data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +81 -0
- data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +163 -0
- data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +94 -0
- data/lib/rosett_ai/mcp/tools/tooling_tool.rb +86 -0
- data/lib/rosett_ai/mcp/tools/validate_tool.rb +105 -0
- data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +74 -0
- data/lib/rosett_ai/mcp/tools/workflow_tool.rb +78 -0
- data/lib/rosett_ai/migration/detector.rb +117 -0
- data/lib/rosett_ai/migration/nncc_config_migrator.rb +94 -0
- data/lib/rosett_ai/migration/nncc_project_migrator.rb +90 -0
- data/lib/rosett_ai/migration/xdg_migrator.rb +123 -0
- data/lib/rosett_ai/package_manager/apt.rb +108 -0
- data/lib/rosett_ai/package_manager/base.rb +68 -0
- data/lib/rosett_ai/package_manager/gem_backend.rb +90 -0
- data/lib/rosett_ai/packaging/variant_config.rb +92 -0
- data/lib/rosett_ai/path_resolver.rb +115 -0
- data/lib/rosett_ai/plugins/contract.rb +43 -0
- data/lib/rosett_ai/plugins/engine_contract.rb +60 -0
- data/lib/rosett_ai/plugins/gui_contract.rb +74 -0
- data/lib/rosett_ai/plugins/mcp_contract.rb +48 -0
- data/lib/rosett_ai/plugins/registry.rb +150 -0
- data/lib/rosett_ai/policy/auditor.rb +41 -0
- data/lib/rosett_ai/policy/deny_list.rb +71 -0
- data/lib/rosett_ai/policy/opt_out_scanner.rb +37 -0
- data/lib/rosett_ai/policy/policy_compiler.rb +84 -0
- data/lib/rosett_ai/policy/protected_files.rb +47 -0
- data/lib/rosett_ai/policy/tier_hierarchy.rb +48 -0
- data/lib/rosett_ai/policy/validator.rb +35 -0
- data/lib/rosett_ai/profiler.rb +79 -0
- data/lib/rosett_ai/project/drift_detector.rb +126 -0
- data/lib/rosett_ai/project/manager.rb +115 -0
- data/lib/rosett_ai/project/sync_manager.rb +138 -0
- data/lib/rosett_ai/project/template_applier.rb +105 -0
- data/lib/rosett_ai/project_context.rb +82 -0
- data/lib/rosett_ai/provenance/entry.rb +63 -0
- data/lib/rosett_ai/provenance/file_source.rb +32 -0
- data/lib/rosett_ai/provenance/source.rb +62 -0
- data/lib/rosett_ai/provenance/store.rb +153 -0
- data/lib/rosett_ai/provenance/tracker.rb +62 -0
- data/lib/rosett_ai/provenance/trailer_generator.rb +43 -0
- data/lib/rosett_ai/provenance/validator.rb +45 -0
- data/lib/rosett_ai/quorum/collector.rb +59 -0
- data/lib/rosett_ai/quorum/comparator.rb +81 -0
- data/lib/rosett_ai/quorum/dispatcher.rb +57 -0
- data/lib/rosett_ai/quorum/strategies/adopt.rb +56 -0
- data/lib/rosett_ai/rai_config.rb +107 -0
- data/lib/rosett_ai/retrofit/base_parser.rb +66 -0
- data/lib/rosett_ai/retrofit/engine.rb +171 -0
- data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +50 -0
- data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +69 -0
- data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +82 -0
- data/lib/rosett_ai/retrofit/round_trip_validator.rb +65 -0
- data/lib/rosett_ai/retrofit/scanner.rb +47 -0
- data/lib/rosett_ai/retrofit/secret_detector.rb +87 -0
- data/lib/rosett_ai/secrets_resolver.rb +71 -0
- data/lib/rosett_ai/smart_feedback/suggester.rb +83 -0
- data/lib/rosett_ai/smart_feedback/thor_middleware.rb +84 -0
- data/lib/rosett_ai/structured_logger.rb +110 -0
- data/lib/rosett_ai/telemetry/json_lines_writer.rb +50 -0
- data/lib/rosett_ai/telemetry/log_rotator.rb +67 -0
- data/lib/rosett_ai/telemetry/provider.rb +26 -0
- data/lib/rosett_ai/telemetry/reporter.rb +144 -0
- data/lib/rosett_ai/telemetry.rb +47 -0
- data/lib/rosett_ai/text_sanitizer.rb +62 -0
- data/lib/rosett_ai/thor/cli.rb +269 -0
- data/lib/rosett_ai/thor/tasks/adopt.rb +250 -0
- data/lib/rosett_ai/thor/tasks/backup.rb +420 -0
- data/lib/rosett_ai/thor/tasks/behaviour.rb +474 -0
- data/lib/rosett_ai/thor/tasks/build.rb +1162 -0
- data/lib/rosett_ai/thor/tasks/compile.rb +415 -0
- data/lib/rosett_ai/thor/tasks/completion.rb +123 -0
- data/lib/rosett_ai/thor/tasks/comply.rb +82 -0
- data/lib/rosett_ai/thor/tasks/config.rb +265 -0
- data/lib/rosett_ai/thor/tasks/content.rb +193 -0
- data/lib/rosett_ai/thor/tasks/dbus.rb +321 -0
- data/lib/rosett_ai/thor/tasks/design.rb +258 -0
- data/lib/rosett_ai/thor/tasks/desktop.rb +129 -0
- data/lib/rosett_ai/thor/tasks/doctor.rb +127 -0
- data/lib/rosett_ai/thor/tasks/documentation.rb +321 -0
- data/lib/rosett_ai/thor/tasks/engines.rb +167 -0
- data/lib/rosett_ai/thor/tasks/hooks.rb +219 -0
- data/lib/rosett_ai/thor/tasks/init.rb +259 -0
- data/lib/rosett_ai/thor/tasks/license.rb +120 -0
- data/lib/rosett_ai/thor/tasks/mcp.rb +535 -0
- data/lib/rosett_ai/thor/tasks/migrate.rb +121 -0
- data/lib/rosett_ai/thor/tasks/plugins.rb +157 -0
- data/lib/rosett_ai/thor/tasks/project.rb +260 -0
- data/lib/rosett_ai/thor/tasks/provenance.rb +195 -0
- data/lib/rosett_ai/thor/tasks/release.rb +314 -0
- data/lib/rosett_ai/thor/tasks/retrofit.rb +90 -0
- data/lib/rosett_ai/thor/tasks/tooling.rb +308 -0
- data/lib/rosett_ai/thor/tasks/validate.rb +108 -0
- data/lib/rosett_ai/thor/tasks/workflow.rb +196 -0
- data/lib/rosett_ai/tooling/ci_yaml_validator.rb +37 -0
- data/lib/rosett_ai/tooling/version_checker.rb +35 -0
- data/lib/rosett_ai/ui/accessible_tui.rb +61 -0
- data/lib/rosett_ai/ui/base.rb +46 -0
- data/lib/rosett_ai/ui/gtk4.rb +98 -0
- data/lib/rosett_ai/ui/kde.rb +40 -0
- data/lib/rosett_ai/ui/qt6.rb +40 -0
- data/lib/rosett_ai/ui/registry.rb +60 -0
- data/lib/rosett_ai/ui/tty_helper.rb +74 -0
- data/lib/rosett_ai/ui/tui.rb +59 -0
- data/lib/rosett_ai/validators/behaviour_validator.rb +20 -0
- data/lib/rosett_ai/validators/design_validator.rb +17 -0
- data/lib/rosett_ai/validators/schema_validator.rb +84 -0
- data/lib/rosett_ai/validators/tooling_validator.rb +17 -0
- data/lib/rosett_ai/version.rb +8 -0
- data/lib/rosett_ai/version_consistency_checker.rb +129 -0
- data/lib/rosett_ai/workflow/audit_log.rb +86 -0
- data/lib/rosett_ai/workflow/engine.rb +142 -0
- data/lib/rosett_ai/workflow/manager.rb +82 -0
- data/lib/rosett_ai/workflow/schema_validator.rb +71 -0
- data/lib/rosett_ai/workflow/step_runner.rb +61 -0
- data/lib/rosett_ai/workflow/steps/prompt_step.rb +62 -0
- data/lib/rosett_ai/workflow/steps/rai_step.rb +74 -0
- data/lib/rosett_ai/workflow/steps/shell_step.rb +53 -0
- data/lib/rosett_ai/yaml_loader.rb +78 -0
- data/lib/rosett_ai.rb +221 -0
- data/lib/rubocop/cop/rosett_ai/shell_interpolation.rb +54 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_const_get.rb +60 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_send.rb +50 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_yaml_load.rb +40 -0
- data/lib/rubocop/rosett_ai.rb +9 -0
- data/lib/scripts/generated/docker_hub_tags.rb +126 -0
- data/locales/.gitkeep +0 -0
- data/locales/ar.yml +579 -0
- data/locales/en.yml +571 -0
- data/locales/fr.yml +567 -0
- data/packaging/build-engine-deb.sh +81 -0
- data/packaging/scripts/postinst +17 -0
- data/packaging/scripts/postrm +19 -0
- data/packaging/scripts/prerm +10 -0
- data/packaging/wrapper.sh.template +38 -0
- data/rosett-ai.gemspec +63 -0
- data/rules/.gitkeep +0 -0
- data/scripts/publish/pulp_upload.sh +123 -0
- data/settings.json +29 -0
- data/share/applications/be.neatnerds.rosettai.desktop +29 -0
- data/share/dbus-1/interfaces/be.neatnerds.rosettai.xml +103 -0
- data/share/dbus-1/services/be.neatnerds.rosettai.service +3 -0
- data/share/templates/behaviour/criticalthinking.yml +69 -0
- metadata +810 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Reek Configuration Documentation
|
|
2
|
+
|
|
3
|
+
This document describes the Reek configuration for the Rosett-AI project and documents issues that were identified and fixed.
|
|
4
|
+
|
|
5
|
+
## Reference
|
|
6
|
+
|
|
7
|
+
- **Reek Version**: 6.5.0 (March 2025)
|
|
8
|
+
- **Documentation Source**: <https://github.com/troessner/reek>
|
|
9
|
+
- **Local Reference**: `~/git/Community/Github/troessner/reek`
|
|
10
|
+
|
|
11
|
+
## Issues Fixed (2026-01-20)
|
|
12
|
+
|
|
13
|
+
### Issue 1: Deprecated Ruby Regexp Syntax
|
|
14
|
+
|
|
15
|
+
**Problem**: The configuration used Reek 4-style `!ruby/regexp` tags which are no longer supported in Reek 5+.
|
|
16
|
+
|
|
17
|
+
**Error Message**:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
Error: Invalid configuration file .reek.yml, error is Tried to load unspecified class: Regexp
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Before (Invalid)**:
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
UncommunicativeMethodName:
|
|
27
|
+
reject:
|
|
28
|
+
- !ruby/regexp /^[a-z]$/
|
|
29
|
+
- !ruby/regexp /[0-9]$/
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**After (Valid)**:
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
UncommunicativeMethodName:
|
|
36
|
+
reject:
|
|
37
|
+
- "/^[a-z]$/"
|
|
38
|
+
- "/[0-9]$/"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Affected Detectors**:
|
|
42
|
+
|
|
43
|
+
- `UncommunicativeMethodName`
|
|
44
|
+
- `UncommunicativeModuleName`
|
|
45
|
+
- `UncommunicativeParameterName`
|
|
46
|
+
- `UncommunicativeVariableName`
|
|
47
|
+
|
|
48
|
+
**Reference**: [Reek 4 to Reek 5 Migration Guide](https://github.com/troessner/reek/blob/master/docs/Reek-4-to-Reek-5-migration.md)
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### Issue 2: Array Method Name Not Quoted
|
|
53
|
+
|
|
54
|
+
**Problem**: The `[]` (array accessor) method name in `allow_calls` was interpreted as an empty YAML array instead of the string `"[]"`.
|
|
55
|
+
|
|
56
|
+
**Error Message**:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
Error: Invalid configuration file .reek.yml, error is
|
|
60
|
+
[/detectors/DuplicateMethodCall/allow_calls/2] must be a string.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Before (Invalid)**:
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
DuplicateMethodCall:
|
|
67
|
+
allow_calls:
|
|
68
|
+
- puts
|
|
69
|
+
- print
|
|
70
|
+
- []
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**After (Valid)**:
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
DuplicateMethodCall:
|
|
77
|
+
allow_calls:
|
|
78
|
+
- puts
|
|
79
|
+
- print
|
|
80
|
+
- "[]"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Reference**: [Duplicate Method Call Documentation](https://github.com/troessner/reek/blob/master/docs/Duplicate-Method-Call.md)
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### Issue 3: Duplicate YAML Keys
|
|
88
|
+
|
|
89
|
+
**Problem**: The `TooManyStatements` detector had duplicate `exclude:` keys. In YAML, duplicate keys cause the second value to overwrite the first, silently breaking the configuration.
|
|
90
|
+
|
|
91
|
+
**Before (Invalid)**:
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
TooManyStatements:
|
|
95
|
+
enabled: true
|
|
96
|
+
max_statements: 10
|
|
97
|
+
exclude:
|
|
98
|
+
- initialize
|
|
99
|
+
exclude: [] # This overwrites the above!
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**After (Valid)**:
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
TooManyStatements:
|
|
106
|
+
enabled: true
|
|
107
|
+
max_statements: 10
|
|
108
|
+
exclude:
|
|
109
|
+
- initialize
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Custom Configuration Values
|
|
115
|
+
|
|
116
|
+
The following settings deviate from Reek's defaults. These are intentional project-specific adjustments:
|
|
117
|
+
|
|
118
|
+
| Detector | Option | Project Value | Default Value | Rationale |
|
|
119
|
+
|----------|--------|---------------|---------------|-----------|
|
|
120
|
+
| `DataClump` | `min_clump_size` | 3 | 2 | Less strict for small projects |
|
|
121
|
+
| `DuplicateMethodCall` | `max_calls` | 2 | 1 | Allow reasonable duplication |
|
|
122
|
+
| `LongParameterList` | `max_params` | 4 | 3 | Slightly more permissive |
|
|
123
|
+
| `NestedIterators` | `max_allowed_nesting` | 2 | 1 | Allow one level of nesting |
|
|
124
|
+
| `RepeatedConditional` | `max_ifs` | 3 | 2 | Allow more conditionals |
|
|
125
|
+
| `TooManyConstants` | `max_constants` | 7 | 5 | Configuration-heavy modules |
|
|
126
|
+
| `TooManyInstanceVariables` | `max_instance_variables` | 5 | 4 | Slightly more permissive |
|
|
127
|
+
| `TooManyStatements` | `max_statements` | 10 | 5 | Allow longer methods |
|
|
128
|
+
| `UtilityFunction` | `public_methods_only` | true | false | Only check public methods |
|
|
129
|
+
| `UnusedPrivateMethod` | `enabled` | true | false | Enable unused method detection |
|
|
130
|
+
| `IrresponsibleModule` | `enabled` | false | true | Disabled (no mandatory docs) |
|
|
131
|
+
| `MissingSafeMethod` | `enabled` | false | true | Disabled |
|
|
132
|
+
|
|
133
|
+
## Disabled Checks for Specific Contexts
|
|
134
|
+
|
|
135
|
+
### Spec Directory
|
|
136
|
+
|
|
137
|
+
The following detectors are disabled for the `spec/` directory:
|
|
138
|
+
|
|
139
|
+
- `UtilityFunction`
|
|
140
|
+
- `FeatureEnvy`
|
|
141
|
+
- `TooManyStatements`
|
|
142
|
+
|
|
143
|
+
### Excluded Classes/Methods
|
|
144
|
+
|
|
145
|
+
- `DuplicateMethodCall`: `RosettAi::Thor::Tasks::Behaviour`, `RosettAi::Thor::Tasks::Documentation`
|
|
146
|
+
- `FeatureEnvy`: `RosettAi::Configuration#deep_merge`
|
|
147
|
+
- `SubclassedFromCoreClass`: `RosettAi::Error`
|
|
148
|
+
- `TooManyInstanceVariables`: `RosettAi::Thor::Tasks::Behaviour`
|
|
149
|
+
- `TooManyMethods`: `RosettAi::Thor::Tasks::Behaviour`, `RosettAi::Thor::Tasks::Documentation`
|
|
150
|
+
|
|
151
|
+
## Excluded Paths
|
|
152
|
+
|
|
153
|
+
The following paths are excluded from analysis:
|
|
154
|
+
|
|
155
|
+
- `vendor/`
|
|
156
|
+
- `tmp/`
|
|
157
|
+
- `cache/`
|
|
158
|
+
- `coverage/`
|
|
159
|
+
|
|
160
|
+
## Best Practices
|
|
161
|
+
|
|
162
|
+
1. **Always quote method names that are special characters**: `"[]"`, `"[]="`
|
|
163
|
+
2. **Use string-wrapped regex patterns**: `"/pattern/"` instead of `!ruby/regexp /pattern/`
|
|
164
|
+
3. **Avoid duplicate YAML keys**: YAML parsers silently use the last value
|
|
165
|
+
4. **Keep local reference documentation**: Clone tool repositories for offline reference
|
|
166
|
+
5. **Verify against latest versions**: Check tool documentation before configuration changes
|
data/doc/REFERENCE.md
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Configuration Reference
|
|
2
|
+
|
|
3
|
+
This document provides a comprehensive reference for all rai configuration, file locations, environment variables, and CLI options.
|
|
4
|
+
|
|
5
|
+
## Configuration Hierarchy
|
|
6
|
+
|
|
7
|
+
Configuration is resolved in order of increasing specificity:
|
|
8
|
+
|
|
9
|
+
1. **Built-in defaults** (compiled into rosett-ai)
|
|
10
|
+
2. **Global rai config** (`~/.config/rosett-ai/config.yml`)
|
|
11
|
+
3. **Global Claude Code settings** (`~/.claude/settings.json`)
|
|
12
|
+
4. **Local Claude Code settings** (`~/.claude/settings.local.json`)
|
|
13
|
+
5. **Project rai config** (`.rosett-ai/config.yml`)
|
|
14
|
+
6. **Project Claude Code settings** (`.claude/settings.json`)
|
|
15
|
+
7. **CLI flags** (always override everything)
|
|
16
|
+
|
|
17
|
+
## Global Configuration
|
|
18
|
+
|
|
19
|
+
### `~/.config/rosett-ai/config.yml`
|
|
20
|
+
|
|
21
|
+
Runtime configuration for rosett-ai itself. Created by `rai init --global`.
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
default_engine: claude # Engine used when --engine is not specified
|
|
25
|
+
cache:
|
|
26
|
+
enabled: true # Cache adopt analysis results
|
|
27
|
+
ttl_hours: 24 # Cache time-to-live in hours
|
|
28
|
+
detect:
|
|
29
|
+
on_init: true # Run engine detection during init --global
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Schema**: `conf/schemas/rai_config_schema.json`
|
|
33
|
+
|
|
34
|
+
### Available engines
|
|
35
|
+
|
|
36
|
+
| Engine | Package | Description |
|
|
37
|
+
|--------|---------|-------------|
|
|
38
|
+
| `claude` | `rosett-ai-engine-claude` | Claude Code (Anthropic) |
|
|
39
|
+
| `generic` | `rosett-ai-engine-generic` | Generic AI assistant |
|
|
40
|
+
| `agents_md` | `rosett-ai-engine-agents-md` | AGENTS.md (vendor-neutral) |
|
|
41
|
+
| `ollama` | `rosett-ai-engine-ollama` | Ollama (local LLM) |
|
|
42
|
+
| `gpt_neox` | `rosett-ai-engine-gpt-neox` | GPT-NeoX (EleutherAI) |
|
|
43
|
+
| `goose` | `rosett-ai-engine-goose` | Goose (Block) |
|
|
44
|
+
| `aider` | `rosett-ai-engine-aider` | Aider (AI pair programming) |
|
|
45
|
+
| `cursor` | `rosett-ai-engine-cursor` | Cursor (Anysphere) |
|
|
46
|
+
| `copilot` | `rosett-ai-engine-copilot` | GitHub Copilot |
|
|
47
|
+
| `windsurf` | `rosett-ai-engine-windsurf` | Windsurf (Codeium) |
|
|
48
|
+
|
|
49
|
+
## Project Configuration
|
|
50
|
+
|
|
51
|
+
### `.rosett-ai/config.yml`
|
|
52
|
+
|
|
53
|
+
Per-project rai configuration. Created by `rai init --project`.
|
|
54
|
+
|
|
55
|
+
```yaml
|
|
56
|
+
project_name: my-project # Project identifier
|
|
57
|
+
default_engine: claude # Override global default engine
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### `.rosett-ai/conf/`
|
|
61
|
+
|
|
62
|
+
Project-specific source files:
|
|
63
|
+
|
|
64
|
+
| Directory | Content |
|
|
65
|
+
|-----------|---------|
|
|
66
|
+
| `conf/behaviour/` | Behaviour YAML files (rules, priorities) |
|
|
67
|
+
| `conf/design/` | Design document YAML files |
|
|
68
|
+
|
|
69
|
+
## Engine Configuration
|
|
70
|
+
|
|
71
|
+
### Discovery
|
|
72
|
+
|
|
73
|
+
raictl discovers engine plugins through three mechanisms:
|
|
74
|
+
|
|
75
|
+
1. **Gem discovery** (`Gem.find_files`): Standard RubyGems path. Works when `GEM_PATH` matches the Ruby ABI version.
|
|
76
|
+
2. **Embedded fallback** (`/opt/rosett-ai/embedded/lib/ruby/gems/`): Version-agnostic scan of the embedded gem tree. Handles ABI mismatch between embedded Ruby and engine gems.
|
|
77
|
+
3. **Custom path** (`RAI_ENGINE_PATH`): Colon-separated list of directories for development/testing.
|
|
78
|
+
|
|
79
|
+
### Installation
|
|
80
|
+
|
|
81
|
+
Engines are installed as separate `.deb` packages:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
apt install rosett-ai-engine-claude
|
|
85
|
+
apt install rosett-ai-engine-generic
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Target Profiles
|
|
89
|
+
|
|
90
|
+
Each engine provides a target profile (`conf/target.yml`) declaring:
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
name: claude
|
|
94
|
+
description: Claude Code (Anthropic) target
|
|
95
|
+
backend: claude
|
|
96
|
+
engine_version: ">=1.0.0"
|
|
97
|
+
output_format: markdown
|
|
98
|
+
output_dir: null
|
|
99
|
+
max_context_window: 200000
|
|
100
|
+
rendering:
|
|
101
|
+
include_source_metadata: true
|
|
102
|
+
include_priority_annotations: true
|
|
103
|
+
include_generated_marker: true
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Schema**: `conf/schemas/target_schema.json`
|
|
107
|
+
|
|
108
|
+
## Behaviour Files
|
|
109
|
+
|
|
110
|
+
### Schema
|
|
111
|
+
|
|
112
|
+
```yaml
|
|
113
|
+
name: string # Unique identifier
|
|
114
|
+
description: string # Human-readable description
|
|
115
|
+
version: string # Semver version
|
|
116
|
+
author: string # Author name
|
|
117
|
+
created_at: string # ISO date
|
|
118
|
+
modified_at: string # ISO date
|
|
119
|
+
modified_by: string # Last modifier
|
|
120
|
+
sensitive: boolean # Exclude from API analysis
|
|
121
|
+
used_in: [string] # Cross-references
|
|
122
|
+
rules:
|
|
123
|
+
- id: string # Unique rule ID (e.g. rule_001)
|
|
124
|
+
description: string # Rule description (supports multiline)
|
|
125
|
+
priority: integer # 1-100 (higher = more important)
|
|
126
|
+
enabled: boolean # Whether rule is active
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Schema**: `conf/schemas/behaviour_schema.json`
|
|
130
|
+
|
|
131
|
+
## Design Documents
|
|
132
|
+
|
|
133
|
+
### Schema
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
name: string # Unique identifier
|
|
137
|
+
domain: string # Domain area (core, security, etc.)
|
|
138
|
+
version: string # Semver version
|
|
139
|
+
status: string # draft | review | approved | deprecated
|
|
140
|
+
intent: string # What this design achieves
|
|
141
|
+
constraints: [string] # Technical/business constraints
|
|
142
|
+
acceptance_criteria: [string] # Verification criteria
|
|
143
|
+
dependencies: [string] # Other design dependencies (optional)
|
|
144
|
+
examples: [{scenario, expected, not_expected}] # Examples (optional)
|
|
145
|
+
anti_patterns: [string] # What to avoid (optional)
|
|
146
|
+
preferences: [string] # Soft preferences (optional)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Schema**: `conf/schemas/design_schema.json`
|
|
150
|
+
|
|
151
|
+
## Claude Code Configuration
|
|
152
|
+
|
|
153
|
+
Scope files in `conf/claude_code/` (or engine-specific config dirs) compile to Claude Code JSON settings.
|
|
154
|
+
|
|
155
|
+
| Scope | Output | Purpose |
|
|
156
|
+
|-------|--------|---------|
|
|
157
|
+
| `managed` | `managed-settings.json` | rosett-ai-managed settings |
|
|
158
|
+
| `user` | `settings.json` | User-level preferences |
|
|
159
|
+
| `project` | `project-settings.json` | Project-specific settings |
|
|
160
|
+
| `local` | `settings.local.json` | Machine-local overrides |
|
|
161
|
+
|
|
162
|
+
## CLI Options Reference
|
|
163
|
+
|
|
164
|
+
### Global Options
|
|
165
|
+
|
|
166
|
+
| Flag | Description |
|
|
167
|
+
|------|-------------|
|
|
168
|
+
| `--version`, `-v` | Show version |
|
|
169
|
+
| `--help`, `-h` | Show help |
|
|
170
|
+
|
|
171
|
+
### `rai compile`
|
|
172
|
+
|
|
173
|
+
| Flag | Default | Description |
|
|
174
|
+
|------|---------|-------------|
|
|
175
|
+
| `--engine NAME` | configured | Target engine |
|
|
176
|
+
| `--verbose` | false | Show detailed output |
|
|
177
|
+
| `--simulate` | false | Dry run with diffs |
|
|
178
|
+
| `--vendor` | false | Write lockfile |
|
|
179
|
+
| `--strict` | false | Treat warnings as errors |
|
|
180
|
+
| `--locales` | false | Compile locale files |
|
|
181
|
+
|
|
182
|
+
### `rai config compile`
|
|
183
|
+
|
|
184
|
+
| Flag | Default | Description |
|
|
185
|
+
|------|---------|-------------|
|
|
186
|
+
| `--engine NAME` | configured | Target engine |
|
|
187
|
+
| `--verbose` | false | Show detailed output |
|
|
188
|
+
| `--simulate` | false | Dry run |
|
|
189
|
+
| `--scope NAME` | all | Compile specific scope only |
|
|
190
|
+
|
|
191
|
+
### `rai init`
|
|
192
|
+
|
|
193
|
+
| Flag | Default | Description |
|
|
194
|
+
|------|---------|-------------|
|
|
195
|
+
| `--global` | false | Set up `~/.claude/` structure |
|
|
196
|
+
| `--local` | false | Set up `.claude/` structure |
|
|
197
|
+
| `--project` | false | Set up `.rosett-ai/` structure |
|
|
198
|
+
| `--no-compile` | false | Skip rule compilation |
|
|
199
|
+
|
|
200
|
+
### `rai adopt`
|
|
201
|
+
|
|
202
|
+
| Flag | Default | Description |
|
|
203
|
+
|------|---------|-------------|
|
|
204
|
+
| `--api` | false | Enable remote API analysis |
|
|
205
|
+
| `--verbose` | false | Show processing details |
|
|
206
|
+
| `--elaborate` | false | Show detailed findings |
|
|
207
|
+
|
|
208
|
+
### `raictl build package`
|
|
209
|
+
|
|
210
|
+
| Flag | Default | Description |
|
|
211
|
+
|------|---------|-------------|
|
|
212
|
+
| `--clean` | false | Clean staging directory |
|
|
213
|
+
| `--verbose` | false | Show build details |
|
|
214
|
+
| `--architecture` | native | Target architecture |
|
|
215
|
+
| `--ruby-version` | current | Override Ruby version |
|
|
216
|
+
| `--output-dir` | `pkg/` | Output directory |
|
|
217
|
+
|
|
218
|
+
## Environment Variables
|
|
219
|
+
|
|
220
|
+
| Variable | Purpose | Set By |
|
|
221
|
+
|----------|---------|--------|
|
|
222
|
+
| `RAI_ORIGINAL_PWD` | Preserves user's working directory when running from `.deb` wrapper | `wrapper.sh` |
|
|
223
|
+
| `RAI_ENGINE_PATH` | Colon-separated custom engine discovery paths | User |
|
|
224
|
+
| `RAI_LOG_LEVEL` | Log verbosity (`DEBUG`, `INFO`, `WARN`, `ERROR`) | User |
|
|
225
|
+
|
|
226
|
+
## File Locations Summary
|
|
227
|
+
|
|
228
|
+
### Global (per-user)
|
|
229
|
+
|
|
230
|
+
| Path | Purpose |
|
|
231
|
+
|------|---------|
|
|
232
|
+
| `~/.config/rosett-ai/config.yml` | rosett-ai runtime config |
|
|
233
|
+
| `~/.claude/settings.json` | Claude Code user settings |
|
|
234
|
+
| `~/.claude/settings.local.json` | Machine-local overrides |
|
|
235
|
+
| `~/.claude/rules/` | Compiled rule files |
|
|
236
|
+
|
|
237
|
+
### Project
|
|
238
|
+
|
|
239
|
+
| Path | Purpose |
|
|
240
|
+
|------|---------|
|
|
241
|
+
| `.rosett-ai/config.yml` | Project rai config |
|
|
242
|
+
| `.rosett-ai/conf/behaviour/` | Project behaviours |
|
|
243
|
+
| `.rosett-ai/conf/design/` | Project design docs |
|
|
244
|
+
| `.claude/` | Project Claude Code config |
|
|
245
|
+
|
|
246
|
+
### Installation (`.deb`)
|
|
247
|
+
|
|
248
|
+
| Path | Purpose |
|
|
249
|
+
|------|---------|
|
|
250
|
+
| `/opt/rosett-ai/app/` | Application code |
|
|
251
|
+
| `/opt/rosett-ai/embedded/` | Embedded Ruby + gems |
|
|
252
|
+
| `/opt/rosett-ai/bin/raictl` | Wrapper script |
|
|
253
|
+
| `/usr/local/bin/raictl` | Symlink |
|