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
data/doc/USAGE.md
ADDED
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
# Rosett-AI - Usage Guide
|
|
2
|
+
|
|
3
|
+
## CLI Commands
|
|
4
|
+
|
|
5
|
+
The `rosett-ai` CLI provides various commands for managing AI-assisted development configurations.
|
|
6
|
+
|
|
7
|
+
### Getting Help
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Show all commands
|
|
11
|
+
bin/raictl help
|
|
12
|
+
|
|
13
|
+
# Show help for a specific command
|
|
14
|
+
bin/raictl help behaviour
|
|
15
|
+
bin/raictl behaviour help display
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Version
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
bin/raictl version
|
|
22
|
+
# or
|
|
23
|
+
bin/raictl -v
|
|
24
|
+
bin/raictl --version
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Documentation Commands
|
|
28
|
+
|
|
29
|
+
Manage project documentation.
|
|
30
|
+
|
|
31
|
+
### Update Documentation
|
|
32
|
+
|
|
33
|
+
Scan for changes and update documentation files:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Basic update
|
|
37
|
+
bin/raictl documentation update
|
|
38
|
+
|
|
39
|
+
# Dry run (show what would change)
|
|
40
|
+
bin/raictl documentation update --dry-run
|
|
41
|
+
|
|
42
|
+
# Update for specific locale
|
|
43
|
+
bin/raictl documentation update --locale=nl
|
|
44
|
+
|
|
45
|
+
# Update all locales
|
|
46
|
+
bin/raictl documentation update --all-locales
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Check Documentation Status
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
bin/raictl documentation status
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Behaviour Commands
|
|
56
|
+
|
|
57
|
+
Manage behaviour configuration files.
|
|
58
|
+
|
|
59
|
+
### Display Behaviours
|
|
60
|
+
|
|
61
|
+
Show all configured behaviours in a table:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Table format (default)
|
|
65
|
+
bin/raictl behaviour display
|
|
66
|
+
|
|
67
|
+
# JSON format
|
|
68
|
+
bin/raictl behaviour display --format=json
|
|
69
|
+
|
|
70
|
+
# YAML format
|
|
71
|
+
bin/raictl behaviour display --format=yaml
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### List Behaviours
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
bin/raictl behaviour list
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Show Specific Behaviour
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
bin/raictl behaviour show my_behaviour
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Validate Behaviours
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Validate all behaviour files
|
|
90
|
+
bin/raictl behaviour validate
|
|
91
|
+
|
|
92
|
+
# Validate specific behaviour
|
|
93
|
+
bin/raictl behaviour validate my_behaviour
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Manage Behaviours
|
|
97
|
+
|
|
98
|
+
#### Add New Behaviour
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Interactive mode
|
|
102
|
+
bin/raictl behaviour manage add new_behaviour
|
|
103
|
+
|
|
104
|
+
# With description
|
|
105
|
+
bin/raictl behaviour manage add new_behaviour --description="My new behaviour rules"
|
|
106
|
+
|
|
107
|
+
# With author
|
|
108
|
+
bin/raictl behaviour manage add new_behaviour --author="john.doe"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### Modify Existing Behaviour
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
bin/raictl behaviour manage modify existing_behaviour
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
This opens the behaviour file in your `$EDITOR` for editing.
|
|
118
|
+
|
|
119
|
+
#### Delete Behaviour
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# With confirmation prompt
|
|
123
|
+
bin/raictl behaviour manage delete old_behaviour
|
|
124
|
+
|
|
125
|
+
# Skip confirmation
|
|
126
|
+
bin/raictl behaviour manage delete old_behaviour --force
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Init Commands
|
|
130
|
+
|
|
131
|
+
Initialize Claude Code directory structure (idempotent).
|
|
132
|
+
|
|
133
|
+
### Global Setup
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Set up ~/.claude/ structure
|
|
137
|
+
bin/raictl init --global
|
|
138
|
+
|
|
139
|
+
# Without compilation
|
|
140
|
+
bin/raictl init --global --no-compile
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Local Setup
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Set up .claude/ in current project
|
|
147
|
+
bin/raictl init --local
|
|
148
|
+
|
|
149
|
+
# Without compilation
|
|
150
|
+
bin/raictl init --local --no-compile
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Project Setup
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Set up .rosett-ai/ project structure (config.yml, conf/behaviour/, conf/design/)
|
|
157
|
+
bin/raictl init --project
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Both
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Set up both global and local structures
|
|
164
|
+
bin/raictl init --global --local
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Flags
|
|
168
|
+
|
|
169
|
+
| Flag | Effect |
|
|
170
|
+
|------|--------|
|
|
171
|
+
| `--global` | Set up global `~/.claude/` structure |
|
|
172
|
+
| `--local` | Set up project-local `.claude/` structure |
|
|
173
|
+
| `--project` | Set up `.rosett-ai/` project structure with `config.yml` |
|
|
174
|
+
| `--no-compile` | Skip the compile step after setup |
|
|
175
|
+
|
|
176
|
+
## Backup Commands
|
|
177
|
+
|
|
178
|
+
Back up Claude Code directory structure and generated assets.
|
|
179
|
+
|
|
180
|
+
### Create Backup
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
# Back up global ~/.claude/ structure
|
|
184
|
+
bin/raictl backup --global
|
|
185
|
+
|
|
186
|
+
# Back up project-local .claude/ and CLAUDE.md
|
|
187
|
+
bin/raictl backup --local
|
|
188
|
+
|
|
189
|
+
# Back up both scopes
|
|
190
|
+
bin/raictl backup --global --local
|
|
191
|
+
|
|
192
|
+
# Use tar.gz compression
|
|
193
|
+
bin/raictl backup --global --compression=tar.gz
|
|
194
|
+
|
|
195
|
+
# Use tar.xz compression
|
|
196
|
+
bin/raictl backup --global --compression=tar.xz
|
|
197
|
+
|
|
198
|
+
# Set compression level (0-9)
|
|
199
|
+
bin/raictl backup --global --compression=tar.gz --compression-ratio=9
|
|
200
|
+
|
|
201
|
+
# Custom destination
|
|
202
|
+
bin/raictl backup --global --destination=/path/to/backup.zip
|
|
203
|
+
|
|
204
|
+
# URI-prefixed destination
|
|
205
|
+
bin/raictl backup --global --destination=file:///tmp/backup.tar.gz
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Flags
|
|
209
|
+
|
|
210
|
+
| Flag | Default | Description |
|
|
211
|
+
|------|---------|-------------|
|
|
212
|
+
| `--global` | `false` | Back up `~/.claude/` structure |
|
|
213
|
+
| `--local` | `false` | Back up project `.claude/` and `CLAUDE.md` |
|
|
214
|
+
| `--compression` | `zip` | Compression algorithm: `zip`, `tar.gz`, `tar.xz` |
|
|
215
|
+
| `--compression-ratio` | (default) | Compression level (0-9, if supported) |
|
|
216
|
+
| `--destination` | `nncc_backup_<date>.<ext>` | Output path or URI |
|
|
217
|
+
|
|
218
|
+
### Supported Compression Algorithms
|
|
219
|
+
|
|
220
|
+
| Algorithm | Extension | Availability |
|
|
221
|
+
|-----------|-----------|--------------|
|
|
222
|
+
| `zip` | `.zip` | Requires `rubyzip` gem (bundled) |
|
|
223
|
+
| `tar.gz` | `.tar.gz` | Always available (Ruby stdlib) |
|
|
224
|
+
| `tar.xz` | `.tar.xz` | Requires `xz` command on system |
|
|
225
|
+
|
|
226
|
+
### Destination URI Schemes
|
|
227
|
+
|
|
228
|
+
| Scheme | Status |
|
|
229
|
+
|--------|--------|
|
|
230
|
+
| `file://` | Fully supported |
|
|
231
|
+
| `s3://` | Planned (not yet implemented) |
|
|
232
|
+
| `ssh://` | Planned (not yet implemented) |
|
|
233
|
+
| `bup://` | Planned (not yet implemented) |
|
|
234
|
+
| `https://` | Planned (not yet implemented) |
|
|
235
|
+
|
|
236
|
+
### Idempotent Behaviour
|
|
237
|
+
|
|
238
|
+
Running backup twice with the same content will report "OK (unchanged)" and skip re-creation. Changed content will overwrite and report "Updated".
|
|
239
|
+
|
|
240
|
+
## Build Commands
|
|
241
|
+
|
|
242
|
+
Build and package rosett-ai for distribution as a self-contained Debian package.
|
|
243
|
+
|
|
244
|
+
The build pipeline uses [fpm](https://github.com/jordansissel/fpm) for packaging and
|
|
245
|
+
[ruby-build](https://github.com/rbenv/ruby-build) to compile an embedded Ruby runtime.
|
|
246
|
+
The resulting `.deb` includes everything needed to run rosett-ai — no system Ruby required.
|
|
247
|
+
|
|
248
|
+
### Build Package
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Build with defaults (reads Ruby version from .ruby-version)
|
|
252
|
+
bin/raictl build package
|
|
253
|
+
|
|
254
|
+
# Build with verbose output
|
|
255
|
+
bin/raictl build package --verbose
|
|
256
|
+
|
|
257
|
+
# Clean staging directory before building
|
|
258
|
+
bin/raictl build package --clean
|
|
259
|
+
|
|
260
|
+
# Override Ruby version
|
|
261
|
+
bin/raictl build package --ruby-version 3.3.10
|
|
262
|
+
|
|
263
|
+
# Build for a specific architecture
|
|
264
|
+
bin/raictl build package --architecture arm64
|
|
265
|
+
|
|
266
|
+
# Custom output directory
|
|
267
|
+
bin/raictl build package --output-dir /tmp/pkg
|
|
268
|
+
|
|
269
|
+
# Set build iteration (release number)
|
|
270
|
+
bin/raictl build package --build-iteration 2
|
|
271
|
+
|
|
272
|
+
# Combined flags
|
|
273
|
+
bin/raictl build package --clean --verbose --architecture amd64
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Flags
|
|
277
|
+
|
|
278
|
+
| Flag | Type | Default | Description |
|
|
279
|
+
|------|------|---------|-------------|
|
|
280
|
+
| `--verbose` | bool | `false` | Show detailed build output |
|
|
281
|
+
| `--clean` | bool | `false` | Clean staging directory before building |
|
|
282
|
+
| `--ruby-version` | string | `.ruby-version` | Ruby version to compile |
|
|
283
|
+
| `--architecture` | string | auto-detect | Target architecture (amd64, arm64) |
|
|
284
|
+
| `--output-dir` | string | `pkg` | Directory for the produced .deb file |
|
|
285
|
+
| `--build-iteration` | numeric | `1` | Package build iteration (release number) |
|
|
286
|
+
| `--variant` | string | `core` | Package variant: `core`, `gtk4`, `qt6` |
|
|
287
|
+
|
|
288
|
+
Run `bin/raictl build help package` for the full list.
|
|
289
|
+
|
|
290
|
+
### Build Pipeline
|
|
291
|
+
|
|
292
|
+
The build proceeds through these stages:
|
|
293
|
+
|
|
294
|
+
1. **Validate** — checks that `ruby-build`, `fpm`, `fakeroot`, `dpkg-deb`, and `rsync` are available
|
|
295
|
+
2. **Compile Ruby** — runs `ruby-build` to install Ruby into `tmp/staging/opt/rosett-ai/embedded/`
|
|
296
|
+
3. **Sync application** — copies source tree (excluding dev/test/CI files) to `tmp/staging/opt/rosett-ai/app/`
|
|
297
|
+
4. **Install gems** — runs `bundle install --deployment` using the embedded Ruby
|
|
298
|
+
5. **Install wrapper** — copies `packaging/wrapper.sh` as `/opt/rosett-ai/bin/raictl`
|
|
299
|
+
6. **Package** — invokes `fpm` to produce a `.deb` with maintainer scripts and xz compression
|
|
300
|
+
|
|
301
|
+
### Package Layout
|
|
302
|
+
|
|
303
|
+
| Path | Contents |
|
|
304
|
+
|------|----------|
|
|
305
|
+
| `/opt/rosett-ai/embedded/` | Compiled Ruby runtime |
|
|
306
|
+
| `/opt/rosett-ai/app/` | Application source and vendored gems |
|
|
307
|
+
| `/opt/rosett-ai/bin/raictl` | Wrapper script |
|
|
308
|
+
| `/opt/rosett-ai/etc/` | Default configuration files |
|
|
309
|
+
| `/etc/rosett-ai/` | System configuration (created by postinst) |
|
|
310
|
+
| `/usr/local/bin/raictl` | Symlink (created by postinst) |
|
|
311
|
+
|
|
312
|
+
### APT Lifecycle
|
|
313
|
+
|
|
314
|
+
| Operation | Behaviour |
|
|
315
|
+
|-----------|-----------|
|
|
316
|
+
| `dpkg -i nncc_*.deb` | Installs to `/opt/rosett-ai`, creates symlink and `/etc/rosett-ai/` |
|
|
317
|
+
| `dpkg -r rosett-ai` | Removes files but preserves `/etc/rosett-ai/` |
|
|
318
|
+
| `dpkg --purge rosett-ai` | Removes everything including `/etc/rosett-ai/` |
|
|
319
|
+
|
|
320
|
+
### Build Dependencies
|
|
321
|
+
|
|
322
|
+
These tools must be available on the build host:
|
|
323
|
+
|
|
324
|
+
| Tool | Package | Purpose | Reference |
|
|
325
|
+
|------|---------|---------|-----------|
|
|
326
|
+
| `ruby-build` | (manual install) | Compile Ruby from source | [github.com/rbenv/ruby-build](https://github.com/rbenv/ruby-build) |
|
|
327
|
+
| `fpm` | `gem install fpm` | Create .deb packages | [github.com/jordansissel/fpm](https://github.com/jordansissel/fpm) |
|
|
328
|
+
| `fakeroot` | `fakeroot` | Simulate root for packaging | [wiki.debian.org/FakeRoot](https://wiki.debian.org/FakeRoot) |
|
|
329
|
+
| `dpkg-deb` | `dpkg-dev` | Low-level .deb manipulation | [man7.org/dpkg-deb](https://man7.org/linux/man-pages/man1/dpkg-deb.1.html) |
|
|
330
|
+
| `rsync` | `rsync` | Efficient file synchronisation | [rsync.samba.org](https://rsync.samba.org/) |
|
|
331
|
+
|
|
332
|
+
### Runtime Dependencies (declared in .deb)
|
|
333
|
+
|
|
334
|
+
| Package | Purpose |
|
|
335
|
+
|---------|---------|
|
|
336
|
+
| `libc6` | GNU C Library |
|
|
337
|
+
| `libssl3` | OpenSSL shared libraries |
|
|
338
|
+
| `zlib1g` | Compression library |
|
|
339
|
+
| `libyaml-0-2` | YAML parsing (required by Psych gem) |
|
|
340
|
+
|
|
341
|
+
## Compile with Different Engines
|
|
342
|
+
|
|
343
|
+
raictl supports 10 compilation engines. Use `--engine` to select:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
# Claude Code (default)
|
|
347
|
+
bin/raictl compile --engine claude
|
|
348
|
+
|
|
349
|
+
# Generic AI assistant
|
|
350
|
+
bin/raictl compile --engine generic
|
|
351
|
+
|
|
352
|
+
# AGENTS.md vendor-neutral format
|
|
353
|
+
bin/raictl compile --engine agents_md
|
|
354
|
+
|
|
355
|
+
# Local model engines
|
|
356
|
+
bin/raictl compile --engine ollama
|
|
357
|
+
bin/raictl compile --engine gpt_neox
|
|
358
|
+
|
|
359
|
+
# CLI-based engines (subprocess execution)
|
|
360
|
+
bin/raictl compile --engine goose
|
|
361
|
+
bin/raictl compile --engine aider
|
|
362
|
+
|
|
363
|
+
# IDE-integrated engines
|
|
364
|
+
bin/raictl compile --engine cursor
|
|
365
|
+
bin/raictl compile --engine copilot
|
|
366
|
+
bin/raictl compile --engine windsurf
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Engine Detection
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
# List all known engines
|
|
373
|
+
bin/raictl engines list
|
|
374
|
+
|
|
375
|
+
# Detect installed engines on the system
|
|
376
|
+
bin/raictl engines detect
|
|
377
|
+
|
|
378
|
+
# Show default engine and detection status
|
|
379
|
+
bin/raictl engines status
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Quorum (Multi-Engine Analysis)
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
# Analyze rules across multiple engines
|
|
386
|
+
bin/raictl adopt --api --quorum
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
## D-Bus and Desktop Commands
|
|
390
|
+
|
|
391
|
+
Desktop features require the `rosett-ai-gtk4` package.
|
|
392
|
+
|
|
393
|
+
### D-Bus Service
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
# Start the session bus service
|
|
397
|
+
bin/raictl dbus start
|
|
398
|
+
|
|
399
|
+
# Stop the service
|
|
400
|
+
bin/raictl dbus stop
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### GTK4 Desktop Application
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
# Launch the GTK4 desktop app
|
|
407
|
+
bin/raictl desktop gtk4
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## Adopt Commands
|
|
411
|
+
|
|
412
|
+
Analyze compiled rule files for inconsistencies, conflicts, harmful content, duplicates, and other issues.
|
|
413
|
+
|
|
414
|
+
### Analyze Rules
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
# Local-only structural checks (default)
|
|
418
|
+
bin/raictl adopt
|
|
419
|
+
|
|
420
|
+
# Verbose output with processing details
|
|
421
|
+
bin/raictl adopt --verbose
|
|
422
|
+
|
|
423
|
+
# Show detailed explanations for each finding
|
|
424
|
+
bin/raictl adopt --elaborate
|
|
425
|
+
|
|
426
|
+
# Enable remote API analysis
|
|
427
|
+
bin/raictl adopt --api
|
|
428
|
+
|
|
429
|
+
# Combined flags
|
|
430
|
+
bin/raictl adopt --api --elaborate --verbose
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Flags
|
|
434
|
+
|
|
435
|
+
| Flag | Effect |
|
|
436
|
+
|------|--------|
|
|
437
|
+
| `--api` | Enable remote API analysis (default: local only) |
|
|
438
|
+
| `--verbose` | Show file counts, checksums, cache status, skipped files |
|
|
439
|
+
| `--elaborate` | Add explanation column to findings table |
|
|
440
|
+
| `--quorum` | Multi-engine analysis (requires `--api`) |
|
|
441
|
+
|
|
442
|
+
### Environment Variables
|
|
443
|
+
|
|
444
|
+
| Variable | Purpose | Default |
|
|
445
|
+
|----------|---------|---------|
|
|
446
|
+
| `ANTHROPIC_API_KEY` | API key for Claude analysis | (required for API mode) |
|
|
447
|
+
| `ANTHROPIC_API_BASE_URL` | Custom API endpoint (Bedrock/Vertex/proxy) | `https://api.anthropic.com` |
|
|
448
|
+
|
|
449
|
+
### Privacy Controls
|
|
450
|
+
|
|
451
|
+
1. Mark behaviour files as `sensitive: true` to exclude from API analysis
|
|
452
|
+
2. Configure redaction patterns in `conf/adopt_redactions.yml`
|
|
453
|
+
3. Set `ANTHROPIC_API_BASE_URL` for private endpoints
|
|
454
|
+
4. Omit `--api` flag to stay local-only (default)
|
|
455
|
+
|
|
456
|
+
## Rake Tasks
|
|
457
|
+
|
|
458
|
+
Alternative access via Rake:
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
# Update documentation
|
|
462
|
+
bundle exec rake docs:update
|
|
463
|
+
|
|
464
|
+
# Check documentation status
|
|
465
|
+
bundle exec rake docs:status
|
|
466
|
+
|
|
467
|
+
# Validate behaviours
|
|
468
|
+
bundle exec rake behaviour:validate
|
|
469
|
+
|
|
470
|
+
# List behaviours
|
|
471
|
+
bundle exec rake behaviour:list
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
## Environment Variables
|
|
475
|
+
|
|
476
|
+
| Variable | Purpose | Default |
|
|
477
|
+
|----------|---------|---------|
|
|
478
|
+
| `EDITOR` | Editor for behaviour files | `vim` |
|
|
479
|
+
| `USER` | Default author for new behaviours | system user |
|
|
480
|
+
| `ANTHROPIC_API_KEY` | API key for `adopt` command | (required for API mode) |
|
|
481
|
+
| `ANTHROPIC_API_BASE_URL` | Custom API endpoint for `adopt` | `https://api.anthropic.com` |
|
|
482
|
+
|
|
483
|
+
## Exit Codes
|
|
484
|
+
|
|
485
|
+
| Code | Meaning |
|
|
486
|
+
|------|---------|
|
|
487
|
+
| 0 | Success |
|
|
488
|
+
| 1 | Validation failed or command error |
|
|
489
|
+
|
|
490
|
+
## Examples
|
|
491
|
+
|
|
492
|
+
### Complete Workflow
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
# 1. Create a new behaviour
|
|
496
|
+
bin/raictl behaviour manage add code_review --description="Code review guidelines"
|
|
497
|
+
|
|
498
|
+
# 2. Edit the created file in $EDITOR
|
|
499
|
+
# Add your rules...
|
|
500
|
+
|
|
501
|
+
# 3. Validate the behaviour
|
|
502
|
+
bin/raictl behaviour validate code_review
|
|
503
|
+
|
|
504
|
+
# 4. View all behaviours
|
|
505
|
+
bin/raictl behaviour display
|
|
506
|
+
|
|
507
|
+
# 5. Update documentation
|
|
508
|
+
bin/raictl documentation update
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
## Tooling Commands
|
|
512
|
+
|
|
513
|
+
Validate CI/CD configuration files.
|
|
514
|
+
|
|
515
|
+
### Validate GitLab CI YAML
|
|
516
|
+
|
|
517
|
+
Validates all GitLab CI YAML files (`.gitlab-ci.yml` and `.gitlab-ci-files/**/*.yml`) for syntax errors. Uses AST-only parsing to accept GitLab CI custom tags like `!reference` while catching genuine syntax issues.
|
|
518
|
+
|
|
519
|
+
```bash
|
|
520
|
+
# Validate (errors only)
|
|
521
|
+
bin/raictl tooling validate-ci-yaml
|
|
522
|
+
|
|
523
|
+
# Validate with all file results
|
|
524
|
+
bin/raictl tooling validate-ci-yaml --verbose
|
|
525
|
+
|
|
526
|
+
# Validate a different project directory
|
|
527
|
+
bin/raictl tooling validate-ci-yaml --project-dir=/path/to/project
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### Flags
|
|
531
|
+
|
|
532
|
+
| Flag | Default | Description |
|
|
533
|
+
|------|---------|-------------|
|
|
534
|
+
| `--verbose` | `false` | Show all validated files, not just errors |
|
|
535
|
+
| `--project-dir` | current directory | Project directory to scan |
|
|
536
|
+
|
|
537
|
+
### CI/CD Integration
|
|
538
|
+
|
|
539
|
+
```bash
|
|
540
|
+
# In CI pipeline
|
|
541
|
+
bin/raictl behaviour validate || exit 1
|
|
542
|
+
bin/raictl tooling validate-ci-yaml || exit 1
|
|
543
|
+
bundle exec rspec
|
|
544
|
+
bundle exec rubocop
|
|
545
|
+
```
|