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,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://gitlab.neatnerds.be/neatnerds/NeatNerds-AI/rosett-ai/schemas/workflow_schema.json",
|
|
4
|
+
"title": "Workflow Definition",
|
|
5
|
+
"description": "Schema for workflow YAML files — declarative multi-step workflow definitions.",
|
|
6
|
+
"$comment": {
|
|
7
|
+
"date": "2026-03-16",
|
|
8
|
+
"version": "1.0.0",
|
|
9
|
+
"source": "rosett-ai"
|
|
10
|
+
},
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["name", "version", "steps"],
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"properties": {
|
|
15
|
+
"name": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"minLength": 1,
|
|
18
|
+
"pattern": "^[a-z][a-z0-9_-]*$",
|
|
19
|
+
"description": "Workflow identifier"
|
|
20
|
+
},
|
|
21
|
+
"description": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Human-readable description"
|
|
24
|
+
},
|
|
25
|
+
"version": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
28
|
+
},
|
|
29
|
+
"author": {
|
|
30
|
+
"type": "string"
|
|
31
|
+
},
|
|
32
|
+
"scope": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"enum": ["global", "local", "project"]
|
|
35
|
+
},
|
|
36
|
+
"network_required": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"default": false
|
|
39
|
+
},
|
|
40
|
+
"engine": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"description": "Default engine for prompt steps"
|
|
43
|
+
},
|
|
44
|
+
"required_capabilities": {
|
|
45
|
+
"type": "array",
|
|
46
|
+
"items": { "type": "string" }
|
|
47
|
+
},
|
|
48
|
+
"max_steps": {
|
|
49
|
+
"type": "integer",
|
|
50
|
+
"minimum": 1,
|
|
51
|
+
"maximum": 50,
|
|
52
|
+
"default": 50
|
|
53
|
+
},
|
|
54
|
+
"steps": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"minItems": 1,
|
|
57
|
+
"maxItems": 50,
|
|
58
|
+
"items": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"required": ["name", "type"],
|
|
61
|
+
"additionalProperties": false,
|
|
62
|
+
"properties": {
|
|
63
|
+
"name": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"minLength": 1
|
|
66
|
+
},
|
|
67
|
+
"type": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"enum": ["shell", "rosett-ai", "prompt"]
|
|
70
|
+
},
|
|
71
|
+
"command": {
|
|
72
|
+
"description": "Array of strings for shell steps, string for Rosett-AI steps",
|
|
73
|
+
"oneOf": [
|
|
74
|
+
{ "type": "array", "items": { "type": "string" }, "minItems": 1 },
|
|
75
|
+
{ "type": "string", "minLength": 1 }
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"prompt": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "Prompt text for prompt-type steps"
|
|
81
|
+
},
|
|
82
|
+
"engine": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"description": "Engine override for this step"
|
|
85
|
+
},
|
|
86
|
+
"network_required": {
|
|
87
|
+
"type": "boolean"
|
|
88
|
+
},
|
|
89
|
+
"on_failure": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"enum": ["stop", "continue"],
|
|
92
|
+
"default": "stop"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"audit": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"additionalProperties": false,
|
|
100
|
+
"properties": {
|
|
101
|
+
"log_path": {
|
|
102
|
+
"type": "string"
|
|
103
|
+
},
|
|
104
|
+
"retention_days": {
|
|
105
|
+
"type": "integer",
|
|
106
|
+
"minimum": 1,
|
|
107
|
+
"default": 90
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
2
|
+
# Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
|
|
3
|
+
#
|
|
4
|
+
# AGENTS.md compilation target profile.
|
|
5
|
+
# Compiles rai behaviour YAML into AGENTS.md format (AAIF v0.1.0).
|
|
6
|
+
---
|
|
7
|
+
name: agents_md
|
|
8
|
+
description: "AGENTS.md format — AAIF-standard agent instruction file"
|
|
9
|
+
backend: agents_md
|
|
10
|
+
engine_version: "~> 1.0"
|
|
11
|
+
output_format: markdown
|
|
12
|
+
output_dir:
|
|
13
|
+
max_context_window:
|
|
14
|
+
rendering:
|
|
15
|
+
include_source_metadata: true
|
|
16
|
+
include_priority_annotations: false
|
|
17
|
+
include_generated_marker: true
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: claude
|
|
3
|
+
description: Claude Code (Anthropic) target
|
|
4
|
+
backend: claude
|
|
5
|
+
engine_version: ">=1.0.0"
|
|
6
|
+
output_format: markdown
|
|
7
|
+
output_dir: null
|
|
8
|
+
max_context_window: 200000
|
|
9
|
+
rendering:
|
|
10
|
+
include_source_metadata: true
|
|
11
|
+
include_priority_annotations: true
|
|
12
|
+
include_generated_marker: true
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Rosett-AI - Tool Registry
|
|
2
|
+
# This file defines CLI tools that can be managed by rai tooling commands.
|
|
3
|
+
# Each tool entry maps to package names across different package managers.
|
|
4
|
+
|
|
5
|
+
tools:
|
|
6
|
+
jq:
|
|
7
|
+
description: "Command-line JSON processor"
|
|
8
|
+
homepage: "https://jqlang.github.io/jq/"
|
|
9
|
+
category: json
|
|
10
|
+
permission_pattern: "Bash(jq:*)"
|
|
11
|
+
packages:
|
|
12
|
+
apt: jq
|
|
13
|
+
dnf: jq
|
|
14
|
+
pacman: jq
|
|
15
|
+
zypper: jq
|
|
16
|
+
brew: jq
|
|
17
|
+
snap: jq
|
|
18
|
+
nix: jq
|
|
19
|
+
|
|
20
|
+
yq:
|
|
21
|
+
description: "Command-line YAML/JSON/XML processor"
|
|
22
|
+
homepage: "https://github.com/mikefarah/yq"
|
|
23
|
+
category: yaml
|
|
24
|
+
permission_pattern: "Bash(yq:*)"
|
|
25
|
+
packages:
|
|
26
|
+
apt: yq
|
|
27
|
+
dnf: yq
|
|
28
|
+
pacman: go-yq
|
|
29
|
+
zypper: yq
|
|
30
|
+
brew: yq
|
|
31
|
+
snap: yq
|
|
32
|
+
nix: yq-go
|
|
33
|
+
|
|
34
|
+
ripgrep:
|
|
35
|
+
description: "Fast recursive grep replacement"
|
|
36
|
+
homepage: "https://github.com/BurntSushi/ripgrep"
|
|
37
|
+
category: search
|
|
38
|
+
permission_pattern: "Bash(rg:*)"
|
|
39
|
+
packages:
|
|
40
|
+
apt: ripgrep
|
|
41
|
+
dnf: ripgrep
|
|
42
|
+
pacman: ripgrep
|
|
43
|
+
zypper: ripgrep
|
|
44
|
+
brew: ripgrep
|
|
45
|
+
nix: ripgrep
|
|
46
|
+
|
|
47
|
+
fd:
|
|
48
|
+
description: "Simple, fast alternative to find"
|
|
49
|
+
homepage: "https://github.com/sharkdp/fd"
|
|
50
|
+
category: search
|
|
51
|
+
permission_pattern: "Bash(fd:*)"
|
|
52
|
+
packages:
|
|
53
|
+
apt: fd-find
|
|
54
|
+
dnf: fd-find
|
|
55
|
+
pacman: fd
|
|
56
|
+
zypper: fd
|
|
57
|
+
brew: fd
|
|
58
|
+
nix: fd
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# systemd unit file for nncc MCP server (HTTP transport)
|
|
2
|
+
#
|
|
3
|
+
# Install: sudo cp dist/rosett-ai-mcp.service /etc/systemd/system/
|
|
4
|
+
# Enable: sudo systemctl enable nncc-mcp
|
|
5
|
+
# Start: sudo systemctl start nncc-mcp
|
|
6
|
+
#
|
|
7
|
+
# Configuration: /etc/nncc/mcp/server.yml
|
|
8
|
+
# Keyfile: /etc/nncc/mcp/nncc-mcp-keys.yml
|
|
9
|
+
#
|
|
10
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
11
|
+
|
|
12
|
+
[Unit]
|
|
13
|
+
Description=NeatNerds Code Companion MCP Server
|
|
14
|
+
Documentation=man:nncc(1)
|
|
15
|
+
After=network.target
|
|
16
|
+
|
|
17
|
+
[Service]
|
|
18
|
+
Type=simple
|
|
19
|
+
User=nncc
|
|
20
|
+
Group=nncc
|
|
21
|
+
ExecStart=/usr/bin/nncc mcp serve --http --config /etc/nncc/mcp/server.yml
|
|
22
|
+
Restart=on-failure
|
|
23
|
+
RestartSec=5
|
|
24
|
+
|
|
25
|
+
# Security hardening
|
|
26
|
+
NoNewPrivileges=yes
|
|
27
|
+
ProtectSystem=strict
|
|
28
|
+
ProtectHome=yes
|
|
29
|
+
PrivateTmp=yes
|
|
30
|
+
PrivateDevices=yes
|
|
31
|
+
ProtectKernelTunables=yes
|
|
32
|
+
ProtectKernelModules=yes
|
|
33
|
+
ProtectControlGroups=yes
|
|
34
|
+
RestrictSUIDSGID=yes
|
|
35
|
+
RestrictNamespaces=yes
|
|
36
|
+
RestrictRealtime=yes
|
|
37
|
+
LockPersonality=yes
|
|
38
|
+
MemoryDenyWriteExecute=yes
|
|
39
|
+
|
|
40
|
+
# File access
|
|
41
|
+
ReadWritePaths=/var/lib/nncc /etc/nncc/mcp
|
|
42
|
+
|
|
43
|
+
# Resource limits
|
|
44
|
+
LimitNOFILE=1024
|
|
45
|
+
LimitNPROC=64
|
|
46
|
+
|
|
47
|
+
[Install]
|
|
48
|
+
WantedBy=multi-user.target
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# nncc MCP server configuration
|
|
2
|
+
#
|
|
3
|
+
# Copy to one of:
|
|
4
|
+
# ~/.config/nncc/mcp/server.yml (user)
|
|
5
|
+
# /etc/nncc/mcp/server.yml (system)
|
|
6
|
+
# .nncc-mcp.yml (project)
|
|
7
|
+
#
|
|
8
|
+
# SPDX-License-Identifier: GPL-3.0-only
|
|
9
|
+
---
|
|
10
|
+
http:
|
|
11
|
+
port: 8484
|
|
12
|
+
host: localhost
|
|
13
|
+
|
|
14
|
+
authentication:
|
|
15
|
+
type: api_key
|
|
16
|
+
key_source: auto
|
|
17
|
+
keyfile_path: /etc/nncc/mcp/nncc-mcp-keys.yml
|
|
18
|
+
# api_key_env: NNCC_MCP_API_KEY # Single-key fallback
|
|
19
|
+
|
|
20
|
+
origin:
|
|
21
|
+
allowed_origins:
|
|
22
|
+
- "http://localhost:*"
|
|
23
|
+
- "http://127.0.0.1:*"
|
|
24
|
+
strict_mode: false
|
|
25
|
+
|
|
26
|
+
rate_limiting:
|
|
27
|
+
enabled: true
|
|
28
|
+
unauthenticated_rpm: 60
|
|
29
|
+
authenticated_rpm: 300
|
|
30
|
+
|
|
31
|
+
cors:
|
|
32
|
+
enabled: false
|
|
33
|
+
# origins:
|
|
34
|
+
# - "http://localhost:3000"
|
|
35
|
+
# methods: [POST, GET, DELETE]
|
|
36
|
+
# headers: [Content-Type, Authorization, Accept, Mcp-Session-Id]
|
|
37
|
+
# max_age: 86400
|
|
38
|
+
|
|
39
|
+
max_request_size: 1048576 # 1 MB
|
|
40
|
+
content_type_enforcement: true
|
|
41
|
+
|
|
42
|
+
tls:
|
|
43
|
+
enabled: false
|
|
44
|
+
# cert_path: /etc/nncc/mcp/tls/cert.pem
|
|
45
|
+
# key_path: /etc/nncc/mcp/tls/key.pem
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# AAIF Positioning — rosett-ai in the Agentic AI Foundation Ecosystem
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
raictl (Rosett-AI) fills a gap in the AAIF ecosystem that none of
|
|
6
|
+
the founding projects address: structured, validated, versioned, auditable
|
|
7
|
+
configuration management for AI agent workflows.
|
|
8
|
+
|
|
9
|
+
## AAIF Ecosystem Role
|
|
10
|
+
|
|
11
|
+
| Project | Role | rosett-ai Relationship |
|
|
12
|
+
|---------|------|-------------------|
|
|
13
|
+
| MCP | Protocol for AI tool communication | rosett-ai is an MCP server + admin tool |
|
|
14
|
+
| AGENTS.md | Agent instruction file standard | rai compiles to AGENTS.md format |
|
|
15
|
+
| Goose | Multi-provider AI agent runtime | rosett-ai manages Goose configuration |
|
|
16
|
+
| rosett-ai | Configuration management layer | Orchestrates all of the above |
|
|
17
|
+
|
|
18
|
+
## Compilation Targets
|
|
19
|
+
|
|
20
|
+
raictl supports multi-target compilation from a single source of truth:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Compile to AGENTS.md format
|
|
24
|
+
bin/raictl compile --engine agents_md
|
|
25
|
+
|
|
26
|
+
# Compile to Claude Code format (default)
|
|
27
|
+
bin/raictl compile --engine claude
|
|
28
|
+
|
|
29
|
+
# Compile to generic markdown
|
|
30
|
+
bin/raictl compile --engine generic
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## AAIF Spec Versions
|
|
34
|
+
|
|
35
|
+
raictl tracks specific AAIF specification versions:
|
|
36
|
+
|
|
37
|
+
| Specification | Version | Status |
|
|
38
|
+
|--------------|---------|--------|
|
|
39
|
+
| MCP Protocol | 2025-03-26 | Implemented (mcp gem 0.8.0) |
|
|
40
|
+
| AGENTS.md | v0.1.0 | Implemented (built-in backend) |
|
|
41
|
+
|
|
42
|
+
## License Compatibility
|
|
43
|
+
|
|
44
|
+
| Component | License | AAIF Compatible |
|
|
45
|
+
|-----------|---------|----------------|
|
|
46
|
+
| rosett-ai core | GPL-3.0-only | Independent project |
|
|
47
|
+
| MCP server (rosett-ai) | GPL-3.0-only | Uses mcp gem (MIT) |
|
|
48
|
+
| AGENTS.md backend | GPL-3.0-only | Output format is unlicensed standard |
|
|
49
|
+
|
|
50
|
+
## Contribution Pathway
|
|
51
|
+
|
|
52
|
+
If contributing to the AAIF ecosystem:
|
|
53
|
+
|
|
54
|
+
1. **rosett-ai-mcp extraction**: Extract MCP server components as Apache-2.0 library
|
|
55
|
+
2. **AGENTS.md tools**: Validation and linting tools as standalone MIT/Apache-2.0
|
|
56
|
+
3. **rosett-ai core**: Remains GPL-3.0-only (open-core model)
|
|
57
|
+
|
|
58
|
+
See `doc/LICENSING_AAIF_ANALYSIS.md` for detailed license compatibility analysis.
|
data/doc/ADOPT.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Rosett-AI - Adopt System
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `adopt` command analyzes compiled rule files in `~/.claude/rules/` for quality and safety issues.
|
|
6
|
+
It uses the Claude API to detect inconsistencies, conflicts, harmful content, jailbreaking attempts,
|
|
7
|
+
duplicates, and other problems across your rule set.
|
|
8
|
+
|
|
9
|
+
## How It Works
|
|
10
|
+
|
|
11
|
+
1. Discovers managed rule files (those with `<!-- Generated by rosett-ai` markers) in `~/.claude/rules/`
|
|
12
|
+
2. Filters out files whose source behaviour YAML is marked `sensitive: true`
|
|
13
|
+
3. Checks the cache — if file contents haven't changed since the last analysis, returns cached results
|
|
14
|
+
4. Applies redaction patterns from `conf/adopt_redactions.yml` to file contents
|
|
15
|
+
5. Sends redacted content to the Claude API for analysis
|
|
16
|
+
6. Runs local structural checks on all files (including sensitive ones)
|
|
17
|
+
7. Merges API and local findings into a unified report
|
|
18
|
+
8. Caches the result for future runs
|
|
19
|
+
|
|
20
|
+
## CLI Usage
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Full API analysis
|
|
24
|
+
bin/raictl adopt
|
|
25
|
+
|
|
26
|
+
# Local-only structural checks (no API)
|
|
27
|
+
bin/raictl adopt --local
|
|
28
|
+
|
|
29
|
+
# Verbose output
|
|
30
|
+
bin/raictl adopt --verbose
|
|
31
|
+
|
|
32
|
+
# Detailed explanations
|
|
33
|
+
bin/raictl adopt --elaborate
|
|
34
|
+
|
|
35
|
+
# All flags combined
|
|
36
|
+
bin/raictl adopt --elaborate --verbose
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Flags
|
|
40
|
+
|
|
41
|
+
| Flag | Effect |
|
|
42
|
+
|------|--------|
|
|
43
|
+
| `--local` | Skip API calls, run structural checks only |
|
|
44
|
+
| `--verbose` | Show file counts, checksums, cache status, skipped sensitive files |
|
|
45
|
+
| `--elaborate` | Add an "Explanation" column to the findings table |
|
|
46
|
+
|
|
47
|
+
## Finding Categories
|
|
48
|
+
|
|
49
|
+
The analysis detects these categories of issues:
|
|
50
|
+
|
|
51
|
+
| Category | Description |
|
|
52
|
+
|----------|-------------|
|
|
53
|
+
| `inconsistencies` | Rules that contradict each other in intent or wording |
|
|
54
|
+
| `conflicts` | Rules that directly conflict and cannot both be followed |
|
|
55
|
+
| `harmful` | Rules that instruct harmful actions |
|
|
56
|
+
| `illegal` | Rules that instruct illegal activities |
|
|
57
|
+
| `jailbreaking` | Rules that attempt to bypass AI safety measures |
|
|
58
|
+
| `rule_breaking` | Rules that instruct breaking other rules |
|
|
59
|
+
| `duplicates` | Rules with the same ID or identical descriptions across files |
|
|
60
|
+
| `other` | Other structural or content issues |
|
|
61
|
+
|
|
62
|
+
### Severity Levels
|
|
63
|
+
|
|
64
|
+
| Severity | Meaning |
|
|
65
|
+
|----------|---------|
|
|
66
|
+
| `critical` | Must be fixed immediately — safety or compliance risk |
|
|
67
|
+
| `high` | Should be fixed — significant quality issue |
|
|
68
|
+
| `medium` | Worth addressing — potential confusion or redundancy |
|
|
69
|
+
| `low` | Minor observation — nice to fix |
|
|
70
|
+
|
|
71
|
+
### Overall Status
|
|
72
|
+
|
|
73
|
+
| Status | Meaning |
|
|
74
|
+
|--------|---------|
|
|
75
|
+
| `pass` | No issues found |
|
|
76
|
+
| `warn` | Low or medium severity findings only |
|
|
77
|
+
| `fail` | High or critical severity findings |
|
|
78
|
+
|
|
79
|
+
## Data Privacy
|
|
80
|
+
|
|
81
|
+
Four layers of protection ensure sensitive content is handled appropriately.
|
|
82
|
+
|
|
83
|
+
### 1. Opt-in Per File (Default)
|
|
84
|
+
|
|
85
|
+
Add `sensitive: true` to a behaviour YAML file to exclude its compiled output from API analysis:
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
name: internal_security
|
|
89
|
+
description: Internal security policies
|
|
90
|
+
version: 1.0.0
|
|
91
|
+
sensitive: true
|
|
92
|
+
rules:
|
|
93
|
+
- id: sec_001
|
|
94
|
+
description: Internal policy details
|
|
95
|
+
priority: 90
|
|
96
|
+
enabled: true
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Sensitive files are still checked locally for structural issues (duplicate IDs, empty descriptions, missing priorities). They are reported as "skipped (sensitive)" in verbose output.
|
|
100
|
+
|
|
101
|
+
### 2. Redaction
|
|
102
|
+
|
|
103
|
+
Configure regex patterns in `conf/adopt_redactions.yml` to replace sensitive content before it reaches the API:
|
|
104
|
+
|
|
105
|
+
```yaml
|
|
106
|
+
---
|
|
107
|
+
patterns:
|
|
108
|
+
- pattern: '\b[A-Z0-9._%+-]+@neatnerds\.be\b'
|
|
109
|
+
replacement: '[EMAIL-REDACTED]'
|
|
110
|
+
- pattern: 'NeatNerds'
|
|
111
|
+
replacement: '[COMPANY]'
|
|
112
|
+
- pattern: 'gitlab\.neatnerds\.be'
|
|
113
|
+
replacement: '[INTERNAL-URL]'
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Redaction is applied in-memory only — original files are never modified.
|
|
117
|
+
|
|
118
|
+
### 3. Configurable Endpoint
|
|
119
|
+
|
|
120
|
+
Set the `ANTHROPIC_API_BASE_URL` environment variable to route API calls through a private endpoint:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Use AWS Bedrock
|
|
124
|
+
export ANTHROPIC_API_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com
|
|
125
|
+
|
|
126
|
+
# Use a corporate proxy
|
|
127
|
+
export ANTHROPIC_API_BASE_URL=https://ai-proxy.internal.company.com
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 4. Local-Only Mode
|
|
131
|
+
|
|
132
|
+
Use `--local` to skip API calls entirely. Only structural checks are performed:
|
|
133
|
+
|
|
134
|
+
- Duplicate rule IDs across files
|
|
135
|
+
- Empty or blank rule descriptions
|
|
136
|
+
- Rules without priority set
|
|
137
|
+
- Identical rule descriptions across different rule IDs
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
bin/raictl adopt --local --verbose
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Caching
|
|
144
|
+
|
|
145
|
+
Results are cached in `conf/adopt.cache.yml`. The cache key is a SHA256 hash of all analyzed file contents (after filtering sensitive files). When files haven't changed, the cached result is returned without an API call.
|
|
146
|
+
|
|
147
|
+
### Cache Format
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
---
|
|
151
|
+
checksum: "sha256hex..."
|
|
152
|
+
analyzed_at: "2026-01-29T12:00:00Z"
|
|
153
|
+
result:
|
|
154
|
+
findings: [...]
|
|
155
|
+
overall_status: pass
|
|
156
|
+
summary: "No issues detected"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Invalidating the Cache
|
|
160
|
+
|
|
161
|
+
The cache is automatically invalidated when any managed rule file changes. To force a fresh analysis, delete the cache file:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
rm conf/adopt.cache.yml
|
|
165
|
+
bin/raictl adopt
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Local Structural Checks
|
|
169
|
+
|
|
170
|
+
These checks run on all files (including sensitive ones) regardless of `--local`:
|
|
171
|
+
|
|
172
|
+
| Check | Category | Severity |
|
|
173
|
+
|-------|----------|----------|
|
|
174
|
+
| Duplicate rule ID across files | `duplicates` | medium |
|
|
175
|
+
| Empty/blank rule description | `other` | medium |
|
|
176
|
+
| Missing priority | `other` | low |
|
|
177
|
+
| Identical descriptions on different rule IDs | `duplicates` | low |
|
|
178
|
+
|
|
179
|
+
## Environment Variables
|
|
180
|
+
|
|
181
|
+
| Variable | Purpose | Required |
|
|
182
|
+
|----------|---------|----------|
|
|
183
|
+
| `ANTHROPIC_API_KEY` | API authentication key | Yes (API mode) |
|
|
184
|
+
| `ANTHROPIC_API_BASE_URL` | Custom API endpoint | No |
|
|
185
|
+
|
|
186
|
+
## Workflow Integration
|
|
187
|
+
|
|
188
|
+
### Recommended Workflow
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# 1. Compile behaviours to rules
|
|
192
|
+
bin/raictl compile --verbose
|
|
193
|
+
|
|
194
|
+
# 2. Run local checks first
|
|
195
|
+
bin/raictl adopt --local --verbose
|
|
196
|
+
|
|
197
|
+
# 3. Run full API analysis
|
|
198
|
+
bin/raictl adopt --verbose
|
|
199
|
+
|
|
200
|
+
# 4. Fix findings and recompile
|
|
201
|
+
bin/raictl compile --verbose
|
|
202
|
+
|
|
203
|
+
# 5. Verify fixes
|
|
204
|
+
bin/raictl adopt --verbose
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### CI/CD Integration
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# In CI pipeline — local checks only (no API key needed)
|
|
211
|
+
bin/raictl adopt --local || exit 1
|
|
212
|
+
|
|
213
|
+
# Or with API key available
|
|
214
|
+
ANTHROPIC_API_KEY=$CI_ANTHROPIC_KEY bin/raictl adopt || exit 1
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Architecture
|
|
218
|
+
|
|
219
|
+
The adopt system consists of two components:
|
|
220
|
+
|
|
221
|
+
- **`RosettAi::Adopter::RuleAdopter`** (`lib/rosett_ai/adopter/rule_adopter.rb`) — Core logic for file discovery, caching, redaction, API interaction, and local analysis
|
|
222
|
+
- **`RosettAi::Thor::Tasks::Adopt`** (`lib/rosett_ai/thor/tasks/adopt.rb`) — Thor CLI task providing terminal output with tables, spinners, and colored status indicators
|
|
223
|
+
|
|
224
|
+
The adopter uses the official [Anthropic Ruby SDK](https://github.com/anthropics/anthropic-sdk-ruby) (`anthropic` gem v1.16+) for API communication.
|