rosett-ai 1.3.3 → 1.5.10
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 +413 -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 +106 -21
- 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
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
"title": "rosett-ai Policy Schema",
|
|
5
5
|
"description": "Schema for rai policy configuration files",
|
|
6
6
|
"type": "object",
|
|
7
|
-
"required": [
|
|
7
|
+
"required": [
|
|
8
|
+
"policy_version",
|
|
9
|
+
"tier"
|
|
10
|
+
],
|
|
8
11
|
"properties": {
|
|
9
12
|
"policy_version": {
|
|
10
13
|
"type": "integer",
|
|
@@ -13,12 +16,20 @@
|
|
|
13
16
|
},
|
|
14
17
|
"tier": {
|
|
15
18
|
"type": "string",
|
|
16
|
-
"enum": [
|
|
19
|
+
"enum": [
|
|
20
|
+
"mandatory",
|
|
21
|
+
"advisory",
|
|
22
|
+
"informational"
|
|
23
|
+
],
|
|
17
24
|
"description": "Policy enforcement tier"
|
|
18
25
|
},
|
|
19
26
|
"scope": {
|
|
20
27
|
"type": "string",
|
|
21
|
-
"enum": [
|
|
28
|
+
"enum": [
|
|
29
|
+
"org",
|
|
30
|
+
"team",
|
|
31
|
+
"project"
|
|
32
|
+
],
|
|
22
33
|
"description": "Policy scope in the hierarchy"
|
|
23
34
|
},
|
|
24
35
|
"deny_list": {
|
|
@@ -33,7 +44,9 @@
|
|
|
33
44
|
"description": "Glob patterns for denied file access"
|
|
34
45
|
}
|
|
35
46
|
},
|
|
36
|
-
"required": [
|
|
47
|
+
"required": [
|
|
48
|
+
"patterns"
|
|
49
|
+
]
|
|
37
50
|
},
|
|
38
51
|
"protected_files": {
|
|
39
52
|
"type": "object",
|
|
@@ -47,7 +60,9 @@
|
|
|
47
60
|
"description": "File paths that AI may read but not modify"
|
|
48
61
|
}
|
|
49
62
|
},
|
|
50
|
-
"required": [
|
|
63
|
+
"required": [
|
|
64
|
+
"paths"
|
|
65
|
+
]
|
|
51
66
|
},
|
|
52
67
|
"rate_limiting": {
|
|
53
68
|
"type": "object",
|
|
@@ -59,7 +74,10 @@
|
|
|
59
74
|
},
|
|
60
75
|
"enforcement": {
|
|
61
76
|
"type": "string",
|
|
62
|
-
"enum": [
|
|
77
|
+
"enum": [
|
|
78
|
+
"advisory",
|
|
79
|
+
"enforced"
|
|
80
|
+
],
|
|
63
81
|
"default": "advisory",
|
|
64
82
|
"description": "Whether rate limiting is advisory or enforced"
|
|
65
83
|
}
|
|
@@ -70,16 +88,24 @@
|
|
|
70
88
|
"properties": {
|
|
71
89
|
"allowed": {
|
|
72
90
|
"type": "array",
|
|
73
|
-
"items": {
|
|
91
|
+
"items": {
|
|
92
|
+
"type": "string"
|
|
93
|
+
},
|
|
74
94
|
"description": "Allowed SPDX license identifiers"
|
|
75
95
|
},
|
|
76
96
|
"rejected": {
|
|
77
97
|
"type": "array",
|
|
78
|
-
"items": {
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "string"
|
|
100
|
+
},
|
|
79
101
|
"description": "Rejected SPDX license identifiers"
|
|
80
102
|
}
|
|
81
103
|
}
|
|
82
104
|
}
|
|
83
105
|
},
|
|
84
|
-
"additionalProperties": false
|
|
106
|
+
"additionalProperties": false,
|
|
107
|
+
"$comment": {
|
|
108
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only",
|
|
109
|
+
"note": null
|
|
110
|
+
}
|
|
85
111
|
}
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
"title": "rosett-ai AI Provenance",
|
|
5
5
|
"description": "Schema for .ai-provenance.yml files tracking AI involvement in code contributions",
|
|
6
6
|
"type": "object",
|
|
7
|
-
"required": [
|
|
7
|
+
"required": [
|
|
8
|
+
"provenance_version",
|
|
9
|
+
"entries"
|
|
10
|
+
],
|
|
8
11
|
"additionalProperties": false,
|
|
9
12
|
"properties": {
|
|
10
13
|
"provenance_version": {
|
|
@@ -22,7 +25,14 @@
|
|
|
22
25
|
"$defs": {
|
|
23
26
|
"entry": {
|
|
24
27
|
"type": "object",
|
|
25
|
-
"required": [
|
|
28
|
+
"required": [
|
|
29
|
+
"commit",
|
|
30
|
+
"timestamp",
|
|
31
|
+
"contributor",
|
|
32
|
+
"ai_tool",
|
|
33
|
+
"ai_role",
|
|
34
|
+
"files"
|
|
35
|
+
],
|
|
26
36
|
"additionalProperties": false,
|
|
27
37
|
"properties": {
|
|
28
38
|
"commit": {
|
|
@@ -47,7 +57,12 @@
|
|
|
47
57
|
},
|
|
48
58
|
"ai_role": {
|
|
49
59
|
"type": "string",
|
|
50
|
-
"enum": [
|
|
60
|
+
"enum": [
|
|
61
|
+
"AI-Generated-By",
|
|
62
|
+
"AI-Co-Author",
|
|
63
|
+
"AI-Assisted-By",
|
|
64
|
+
"AI-Reviewed-By"
|
|
65
|
+
],
|
|
51
66
|
"description": "Role the AI played in the contribution"
|
|
52
67
|
},
|
|
53
68
|
"files": {
|
|
@@ -60,7 +75,10 @@
|
|
|
60
75
|
},
|
|
61
76
|
"file_source": {
|
|
62
77
|
"type": "object",
|
|
63
|
-
"required": [
|
|
78
|
+
"required": [
|
|
79
|
+
"path",
|
|
80
|
+
"source_type"
|
|
81
|
+
],
|
|
64
82
|
"additionalProperties": false,
|
|
65
83
|
"properties": {
|
|
66
84
|
"path": {
|
|
@@ -75,10 +93,20 @@
|
|
|
75
93
|
},
|
|
76
94
|
"source_type": {
|
|
77
95
|
"type": "string",
|
|
78
|
-
"enum": [
|
|
96
|
+
"enum": [
|
|
97
|
+
"library_api",
|
|
98
|
+
"project_code",
|
|
99
|
+
"documentation",
|
|
100
|
+
"pattern",
|
|
101
|
+
"external_source"
|
|
102
|
+
],
|
|
79
103
|
"description": "Classification of the AI's source material"
|
|
80
104
|
}
|
|
81
105
|
}
|
|
82
106
|
}
|
|
107
|
+
},
|
|
108
|
+
"$comment": {
|
|
109
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only",
|
|
110
|
+
"note": null
|
|
83
111
|
}
|
|
84
112
|
}
|
|
@@ -6,14 +6,18 @@
|
|
|
6
6
|
"$comment": {
|
|
7
7
|
"date": "2026-02-26",
|
|
8
8
|
"version": "1.0.0",
|
|
9
|
-
"source": "rosett-ai"
|
|
9
|
+
"source": "rosett-ai",
|
|
10
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
|
|
10
11
|
},
|
|
11
12
|
"type": "object",
|
|
12
13
|
"additionalProperties": false,
|
|
13
14
|
"properties": {
|
|
14
15
|
"default_engine": {
|
|
15
16
|
"type": "string",
|
|
16
|
-
"enum": [
|
|
17
|
+
"enum": [
|
|
18
|
+
"claude",
|
|
19
|
+
"generic"
|
|
20
|
+
],
|
|
17
21
|
"description": "Default engine for compile and adopt commands"
|
|
18
22
|
},
|
|
19
23
|
"cache": {
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
"title": "rai project configuration",
|
|
4
4
|
"description": "Schema for .rosett-ai/config.yml project marker files",
|
|
5
5
|
"type": "object",
|
|
6
|
-
"required": [
|
|
6
|
+
"required": [
|
|
7
|
+
"project_name"
|
|
8
|
+
],
|
|
7
9
|
"properties": {
|
|
8
10
|
"project_name": {
|
|
9
11
|
"type": "string",
|
|
@@ -16,5 +18,9 @@
|
|
|
16
18
|
"description": "Default compilation engine for this project"
|
|
17
19
|
}
|
|
18
20
|
},
|
|
19
|
-
"additionalProperties": false
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"$comment": {
|
|
23
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only",
|
|
24
|
+
"note": null
|
|
25
|
+
}
|
|
20
26
|
}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
"$comment": {
|
|
7
7
|
"date": "2026-03-23",
|
|
8
8
|
"version": "0.1.0",
|
|
9
|
-
"source": "rosett-ai"
|
|
9
|
+
"source": "rosett-ai",
|
|
10
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
|
|
10
11
|
},
|
|
11
12
|
"type": "object",
|
|
12
13
|
"additionalProperties": false,
|
|
@@ -16,7 +17,12 @@
|
|
|
16
17
|
"description": "Per-key merge strategy overrides. Keys are dot-separated paths into behaviour data.",
|
|
17
18
|
"additionalProperties": {
|
|
18
19
|
"type": "string",
|
|
19
|
-
"enum": [
|
|
20
|
+
"enum": [
|
|
21
|
+
"deep_merge",
|
|
22
|
+
"replace",
|
|
23
|
+
"array_union",
|
|
24
|
+
"first_found"
|
|
25
|
+
],
|
|
20
26
|
"description": "Merge strategy for this key"
|
|
21
27
|
}
|
|
22
28
|
},
|
|
@@ -27,19 +33,30 @@
|
|
|
27
33
|
"properties": {
|
|
28
34
|
"hash": {
|
|
29
35
|
"type": "string",
|
|
30
|
-
"enum": [
|
|
36
|
+
"enum": [
|
|
37
|
+
"deep_merge",
|
|
38
|
+
"replace",
|
|
39
|
+
"first_found"
|
|
40
|
+
],
|
|
31
41
|
"default": "deep_merge",
|
|
32
42
|
"description": "Default strategy for hash values"
|
|
33
43
|
},
|
|
34
44
|
"array": {
|
|
35
45
|
"type": "string",
|
|
36
|
-
"enum": [
|
|
46
|
+
"enum": [
|
|
47
|
+
"array_union",
|
|
48
|
+
"replace",
|
|
49
|
+
"first_found"
|
|
50
|
+
],
|
|
37
51
|
"default": "array_union",
|
|
38
52
|
"description": "Default strategy for array values"
|
|
39
53
|
},
|
|
40
54
|
"scalar": {
|
|
41
55
|
"type": "string",
|
|
42
|
-
"enum": [
|
|
56
|
+
"enum": [
|
|
57
|
+
"replace",
|
|
58
|
+
"first_found"
|
|
59
|
+
],
|
|
43
60
|
"default": "replace",
|
|
44
61
|
"description": "Default strategy for scalar values"
|
|
45
62
|
}
|
|
@@ -6,10 +6,15 @@
|
|
|
6
6
|
"$comment": {
|
|
7
7
|
"date": "2026-02-21",
|
|
8
8
|
"version": "1.0.0",
|
|
9
|
-
"source": "rosett-ai"
|
|
9
|
+
"source": "rosett-ai",
|
|
10
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
|
|
10
11
|
},
|
|
11
12
|
"type": "object",
|
|
12
|
-
"required": [
|
|
13
|
+
"required": [
|
|
14
|
+
"name",
|
|
15
|
+
"backend",
|
|
16
|
+
"output_format"
|
|
17
|
+
],
|
|
13
18
|
"additionalProperties": false,
|
|
14
19
|
"properties": {
|
|
15
20
|
"name": {
|
|
@@ -24,7 +29,19 @@
|
|
|
24
29
|
},
|
|
25
30
|
"backend": {
|
|
26
31
|
"type": "string",
|
|
27
|
-
"enum": [
|
|
32
|
+
"enum": [
|
|
33
|
+
"acme",
|
|
34
|
+
"aider",
|
|
35
|
+
"agents_md",
|
|
36
|
+
"claude",
|
|
37
|
+
"copilot",
|
|
38
|
+
"cursor",
|
|
39
|
+
"generic",
|
|
40
|
+
"goose",
|
|
41
|
+
"gpt_neox",
|
|
42
|
+
"ollama",
|
|
43
|
+
"windsurf"
|
|
44
|
+
],
|
|
28
45
|
"description": "Compiler backend to use for this target"
|
|
29
46
|
},
|
|
30
47
|
"engine_version": {
|
|
@@ -33,15 +50,25 @@
|
|
|
33
50
|
},
|
|
34
51
|
"output_format": {
|
|
35
52
|
"type": "string",
|
|
36
|
-
"enum": [
|
|
53
|
+
"enum": [
|
|
54
|
+
"markdown",
|
|
55
|
+
"json",
|
|
56
|
+
"yaml"
|
|
57
|
+
],
|
|
37
58
|
"description": "Output format for compiled files"
|
|
38
59
|
},
|
|
39
60
|
"output_dir": {
|
|
40
|
-
"type": [
|
|
61
|
+
"type": [
|
|
62
|
+
"string",
|
|
63
|
+
"null"
|
|
64
|
+
],
|
|
41
65
|
"description": "Override output directory (null uses default rules_dir)"
|
|
42
66
|
},
|
|
43
67
|
"max_context_window": {
|
|
44
|
-
"type": [
|
|
68
|
+
"type": [
|
|
69
|
+
"integer",
|
|
70
|
+
"null"
|
|
71
|
+
],
|
|
45
72
|
"minimum": 1,
|
|
46
73
|
"description": "Maximum context window size in tokens (null for unlimited)"
|
|
47
74
|
},
|
|
@@ -7,10 +7,15 @@
|
|
|
7
7
|
"date": "2026-02-09",
|
|
8
8
|
"version": "1.0.0",
|
|
9
9
|
"source": "rosett-ai",
|
|
10
|
-
"compatible_claude_code_versions": [
|
|
10
|
+
"compatible_claude_code_versions": [
|
|
11
|
+
">=0.1.0"
|
|
12
|
+
],
|
|
13
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
|
|
11
14
|
},
|
|
12
15
|
"type": "object",
|
|
13
|
-
"required": [
|
|
16
|
+
"required": [
|
|
17
|
+
"tools"
|
|
18
|
+
],
|
|
14
19
|
"additionalProperties": false,
|
|
15
20
|
"properties": {
|
|
16
21
|
"tools": {
|
|
@@ -19,7 +24,11 @@
|
|
|
19
24
|
"minProperties": 1,
|
|
20
25
|
"additionalProperties": {
|
|
21
26
|
"type": "object",
|
|
22
|
-
"required": [
|
|
27
|
+
"required": [
|
|
28
|
+
"description",
|
|
29
|
+
"permission_pattern",
|
|
30
|
+
"packages"
|
|
31
|
+
],
|
|
23
32
|
"additionalProperties": false,
|
|
24
33
|
"properties": {
|
|
25
34
|
"description": {
|
|
@@ -34,7 +43,15 @@
|
|
|
34
43
|
},
|
|
35
44
|
"category": {
|
|
36
45
|
"type": "string",
|
|
37
|
-
"enum": [
|
|
46
|
+
"enum": [
|
|
47
|
+
"json",
|
|
48
|
+
"yaml",
|
|
49
|
+
"search",
|
|
50
|
+
"text",
|
|
51
|
+
"system",
|
|
52
|
+
"network",
|
|
53
|
+
"other"
|
|
54
|
+
],
|
|
38
55
|
"description": "Category for organizing tools"
|
|
39
56
|
},
|
|
40
57
|
"permission_pattern": {
|
|
@@ -48,14 +65,38 @@
|
|
|
48
65
|
"minProperties": 1,
|
|
49
66
|
"additionalProperties": false,
|
|
50
67
|
"properties": {
|
|
51
|
-
"apt": {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
"apt": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"minLength": 1
|
|
71
|
+
},
|
|
72
|
+
"dnf": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"minLength": 1
|
|
75
|
+
},
|
|
76
|
+
"pacman": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"minLength": 1
|
|
79
|
+
},
|
|
80
|
+
"zypper": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"minLength": 1
|
|
83
|
+
},
|
|
84
|
+
"brew": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"minLength": 1
|
|
87
|
+
},
|
|
88
|
+
"flatpak": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"minLength": 1
|
|
91
|
+
},
|
|
92
|
+
"snap": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"minLength": 1
|
|
95
|
+
},
|
|
96
|
+
"nix": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"minLength": 1
|
|
99
|
+
}
|
|
59
100
|
}
|
|
60
101
|
}
|
|
61
102
|
}
|
|
@@ -6,10 +6,15 @@
|
|
|
6
6
|
"$comment": {
|
|
7
7
|
"date": "2026-03-16",
|
|
8
8
|
"version": "1.0.0",
|
|
9
|
-
"source": "rosett-ai"
|
|
9
|
+
"source": "rosett-ai",
|
|
10
|
+
"spdx": "SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be> | SPDX-License-Identifier: GPL-3.0-only"
|
|
10
11
|
},
|
|
11
12
|
"type": "object",
|
|
12
|
-
"required": [
|
|
13
|
+
"required": [
|
|
14
|
+
"name",
|
|
15
|
+
"version",
|
|
16
|
+
"steps"
|
|
17
|
+
],
|
|
13
18
|
"additionalProperties": false,
|
|
14
19
|
"properties": {
|
|
15
20
|
"name": {
|
|
@@ -31,7 +36,11 @@
|
|
|
31
36
|
},
|
|
32
37
|
"scope": {
|
|
33
38
|
"type": "string",
|
|
34
|
-
"enum": [
|
|
39
|
+
"enum": [
|
|
40
|
+
"global",
|
|
41
|
+
"local",
|
|
42
|
+
"project"
|
|
43
|
+
]
|
|
35
44
|
},
|
|
36
45
|
"network_required": {
|
|
37
46
|
"type": "boolean",
|
|
@@ -43,7 +52,9 @@
|
|
|
43
52
|
},
|
|
44
53
|
"required_capabilities": {
|
|
45
54
|
"type": "array",
|
|
46
|
-
"items": {
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "string"
|
|
57
|
+
}
|
|
47
58
|
},
|
|
48
59
|
"max_steps": {
|
|
49
60
|
"type": "integer",
|
|
@@ -57,7 +68,10 @@
|
|
|
57
68
|
"maxItems": 50,
|
|
58
69
|
"items": {
|
|
59
70
|
"type": "object",
|
|
60
|
-
"required": [
|
|
71
|
+
"required": [
|
|
72
|
+
"name",
|
|
73
|
+
"type"
|
|
74
|
+
],
|
|
61
75
|
"additionalProperties": false,
|
|
62
76
|
"properties": {
|
|
63
77
|
"name": {
|
|
@@ -66,13 +80,26 @@
|
|
|
66
80
|
},
|
|
67
81
|
"type": {
|
|
68
82
|
"type": "string",
|
|
69
|
-
"enum": [
|
|
83
|
+
"enum": [
|
|
84
|
+
"shell",
|
|
85
|
+
"rosett-ai",
|
|
86
|
+
"prompt"
|
|
87
|
+
]
|
|
70
88
|
},
|
|
71
89
|
"command": {
|
|
72
90
|
"description": "Array of strings for shell steps, string for Rosett-AI steps",
|
|
73
91
|
"oneOf": [
|
|
74
|
-
{
|
|
75
|
-
|
|
92
|
+
{
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": {
|
|
95
|
+
"type": "string"
|
|
96
|
+
},
|
|
97
|
+
"minItems": 1
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"type": "string",
|
|
101
|
+
"minLength": 1
|
|
102
|
+
}
|
|
76
103
|
]
|
|
77
104
|
},
|
|
78
105
|
"prompt": {
|
|
@@ -88,7 +115,10 @@
|
|
|
88
115
|
},
|
|
89
116
|
"on_failure": {
|
|
90
117
|
"type": "string",
|
|
91
|
-
"enum": [
|
|
118
|
+
"enum": [
|
|
119
|
+
"stop",
|
|
120
|
+
"continue"
|
|
121
|
+
],
|
|
92
122
|
"default": "stop"
|
|
93
123
|
}
|
|
94
124
|
}
|
data/conf/targets/agents_md.yml
CHANGED
data/conf/targets/claude.yml
CHANGED
data/conf/tooling/tools.yml
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025-2026 Hugo Antonio Sepulveda Manriquez <query@neatnerds.be>
|
|
2
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
1
3
|
# Rosett-AI - Tool Registry
|
|
2
4
|
# This file defines CLI tools that can be managed by rai tooling commands.
|
|
3
5
|
# Each tool entry maps to package names across different package managers.
|
|
@@ -9,8 +9,13 @@ module RosettAi
|
|
|
9
9
|
# without making API calls. Checks for duplicates, missing
|
|
10
10
|
# fields, and other structural issues.
|
|
11
11
|
class LocalAnalysisCollector
|
|
12
|
+
# @return [Array] Severity levels that cause a check to fail.
|
|
12
13
|
FAIL_SEVERITIES = ['high', 'critical'].freeze
|
|
13
14
|
|
|
15
|
+
# Perform analysis on the given files.
|
|
16
|
+
#
|
|
17
|
+
# @param files [Object] the files
|
|
18
|
+
# @return [Hash]
|
|
14
19
|
def analyze(files)
|
|
15
20
|
@findings = []
|
|
16
21
|
@all_rules = {}
|
|
@@ -9,6 +9,7 @@ require 'json'
|
|
|
9
9
|
require 'time'
|
|
10
10
|
|
|
11
11
|
module RosettAi
|
|
12
|
+
# Rule file analysis and adoption verification.
|
|
12
13
|
module Adopter
|
|
13
14
|
# Analyzes compiled markdown rule files for inconsistencies, conflicts,
|
|
14
15
|
# harmful content, duplicates, and other issues.
|
|
@@ -19,6 +20,7 @@ module RosettAi
|
|
|
19
20
|
# 3. Configurable endpoint — ANTHROPIC_API_BASE_URL for proxy/Bedrock/Vertex
|
|
20
21
|
# 4. Local-only mode — structural checks without API calls
|
|
21
22
|
class RuleAdopter
|
|
23
|
+
# @return [String] Marker string identifying generated files.
|
|
22
24
|
GENERATED_MARKER = '<!-- rosett-ai-'
|
|
23
25
|
|
|
24
26
|
attr_reader :rules_dir, :cache_path, :redactions_path, :engine
|
|
@@ -44,6 +46,8 @@ module RosettAi
|
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
|
|
49
|
+
# Find all rai-managed rule files in the rules directory.
|
|
50
|
+
# @return [Array<String>]
|
|
47
51
|
def discover_managed_files
|
|
48
52
|
return [] unless rules_dir.exist?
|
|
49
53
|
|
|
@@ -55,11 +59,19 @@ module RosettAi
|
|
|
55
59
|
end.sort
|
|
56
60
|
end
|
|
57
61
|
|
|
62
|
+
# Compute a SHA-256 checksum of the given files.
|
|
63
|
+
#
|
|
64
|
+
# @param files [Object] the files
|
|
65
|
+
# @return [String]
|
|
58
66
|
def content_checksum(files)
|
|
59
67
|
content = files.sort.map { |f| File.read(f) }.join
|
|
60
68
|
Digest::SHA256.hexdigest(content)
|
|
61
69
|
end
|
|
62
70
|
|
|
71
|
+
# Retrieve a cached analysis result by checksum.
|
|
72
|
+
#
|
|
73
|
+
# @param checksum [Object] the checksum
|
|
74
|
+
# @return [Hash, nil]
|
|
63
75
|
def cached_result(checksum)
|
|
64
76
|
return nil unless cache_path.exist?
|
|
65
77
|
|
|
@@ -73,6 +85,11 @@ module RosettAi
|
|
|
73
85
|
nil
|
|
74
86
|
end
|
|
75
87
|
|
|
88
|
+
# Persist analysis results to the cache file.
|
|
89
|
+
#
|
|
90
|
+
# @param checksum [Object] the checksum
|
|
91
|
+
# @param result [Object] the result
|
|
92
|
+
# @return [void]
|
|
76
93
|
def write_cache(checksum, result)
|
|
77
94
|
FileUtils.mkdir_p(cache_path.dirname)
|
|
78
95
|
data = {
|
|
@@ -83,12 +100,20 @@ module RosettAi
|
|
|
83
100
|
File.open(cache_path, 'w', 0o644) { |f| f.write(data.to_yaml) }
|
|
84
101
|
end
|
|
85
102
|
|
|
103
|
+
# Build the analysis prompt from file contents.
|
|
104
|
+
#
|
|
105
|
+
# @param files [Object] the files
|
|
106
|
+
# @return [String]
|
|
86
107
|
def build_prompt(files)
|
|
87
108
|
parts = [prompt_header]
|
|
88
109
|
append_file_contents(parts, files)
|
|
89
110
|
parts.join("\n")
|
|
90
111
|
end
|
|
91
112
|
|
|
113
|
+
# Apply redaction patterns to content before API submission.
|
|
114
|
+
#
|
|
115
|
+
# @param content [Object] the content
|
|
116
|
+
# @return [String]
|
|
92
117
|
def redact(content)
|
|
93
118
|
patterns = load_redaction_patterns
|
|
94
119
|
result = content.dup
|
|
@@ -101,6 +126,10 @@ module RosettAi
|
|
|
101
126
|
result
|
|
102
127
|
end
|
|
103
128
|
|
|
129
|
+
# Perform analysis on the given files.
|
|
130
|
+
#
|
|
131
|
+
# @param files [Object] the files
|
|
132
|
+
# @return [Hash]
|
|
104
133
|
def analyze(files)
|
|
105
134
|
return empty_result if files.empty?
|
|
106
135
|
|
|
@@ -109,11 +138,17 @@ module RosettAi
|
|
|
109
138
|
executor.analyze(prompt)
|
|
110
139
|
end
|
|
111
140
|
|
|
141
|
+
# Perform local-only structural analysis.
|
|
142
|
+
#
|
|
143
|
+
# @param files [Object] the files
|
|
144
|
+
# @return [Hash]
|
|
112
145
|
def analyze_local(files)
|
|
113
146
|
collector = LocalAnalysisCollector.new
|
|
114
147
|
collector.analyze(files)
|
|
115
148
|
end
|
|
116
149
|
|
|
150
|
+
# List behaviour files marked as sensitive.
|
|
151
|
+
# @return [Array<String>]
|
|
117
152
|
def sensitive_files
|
|
118
153
|
behaviour_dir = RosettAi.root.join('conf', 'behaviour')
|
|
119
154
|
return [] unless behaviour_dir.exist?
|
|
@@ -126,6 +161,11 @@ module RosettAi
|
|
|
126
161
|
end
|
|
127
162
|
end
|
|
128
163
|
|
|
164
|
+
# Exclude files marked as sensitive from the file list.
|
|
165
|
+
#
|
|
166
|
+
# @param files [Object] the files
|
|
167
|
+
# @param sensitive_sources [Object] the sensitive sources
|
|
168
|
+
# @return [Array<String>]
|
|
129
169
|
def filter_sensitive(files, sensitive_sources)
|
|
130
170
|
return files if sensitive_sources.empty?
|
|
131
171
|
|