roam-code 12.46__tar.gz → 12.47__tar.gz
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.
- {roam_code-12.46 → roam_code-12.47}/LICENSE +14 -12
- {roam_code-12.46 → roam_code-12.47}/PKG-INFO +41 -37
- {roam_code-12.46 → roam_code-12.47}/README.md +35 -33
- {roam_code-12.46 → roam_code-12.47}/pyproject.toml +6 -4
- {roam_code-12.46 → roam_code-12.47}/src/roam/__main__.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/attest/__init__.py +1 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/capability.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/detectors.py +42 -42
- {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/python_idioms.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/cli.py +14 -12
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/audit_trail_helpers.py +1 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_adversarial.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_affected.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_agent_export.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_api.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_article_12_check.py +8 -7
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit.py +7 -8
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit_trail_export.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_auth_gaps.py +5 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_capabilities.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_changelog.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_clones.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_compare.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_config.py +7 -7
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_context.py +9 -9
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_conventions.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_coverage_gaps.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_critique.py +4 -4
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dead.py +10 -10
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_debt.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_describe.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_diagnose.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_diff.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_disambiguate.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_docs_coverage.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_doctor.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_eval_retrieve.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_exit_codes.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fan.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fn_coupling.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_graph_export.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_graph_stats.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_health.py +7 -7
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_help_search.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_hotspots.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_impact.py +5 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_index_stats.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_map.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_math.py +11 -11
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_mcp_status.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_metrics_push.py +0 -2
- roam_code-12.47/src/roam/commands/cmd_migration_plan.py +303 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_migration_safety.py +2 -4
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_missing_index.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_oracle.py +4 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_orphan_imports.py +4 -4
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_over_fetch.py +6 -6
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_permit.py +5 -6
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_plugins.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_postmortem.py +5 -12
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_analyze.py +1 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_comment_render.py +5 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_prep.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_risk.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pre_commit.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_preflight.py +4 -4
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_recipes.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_recommend.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_reset.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_retrieve.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_risk.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_rules.py +1 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_sbom.py +6 -6
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_search.py +8 -8
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_smells.py +6 -8
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_stats.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_taint.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_telemetry.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_impact.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_pyramid.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_timeline.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_tour.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_version.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_watch.py +5 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_weather.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_why_fail.py +1 -1
- roam_code-12.47/src/roam/commands/cmd_why_slow.py +211 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_workflow.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/metrics_history.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/next_steps.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/resolve.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/competitor_site_data.py +4 -9
- {roam_code-12.46 → roam_code-12.47}/src/roam/config.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/db/connection.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/db/queries.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/fleet/__init__.py +2 -4
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/builder.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/cycles.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/partition.py +7 -7
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/complexity.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/indexer.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/parser.py +2 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/symbols.py +1 -1
- roam_code-12.47/src/roam/languages/dart_lang.py +119 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/query_engine.py +5 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/registry.py +6 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp-server-card.json +5 -5
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/concurrency.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/sampling.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_server.py +27 -29
- {roam_code-12.46 → roam_code-12.47}/src/roam/observability.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/confidence.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/file_role_hints.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/formatter.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/project_shape.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/sarif.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/plugins.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/pipeline.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/rerank.py +4 -7
- {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/seeds.py +3 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/daemon.py +1 -3
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/lock_modes.py +0 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/lockmgr.py +1 -2
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_engine.py +6 -8
- {roam_code-12.46 → roam_code-12.47}/src/roam/telemetry.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/PKG-INFO +41 -37
- {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/SOURCES.txt +8 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_ask.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/tests/test_capability_registry.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_compare_cli.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_competitor_site_data.py +2 -3
- {roam_code-12.46 → roam_code-12.47}/tests/test_context_propagation.py +1 -1
- roam_code-12.47/tests/test_dart.py +185 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_defer_loading.py +6 -6
- {roam_code-12.46 → roam_code-12.47}/tests/test_doc_consistency.py +10 -4
- roam_code-12.47/tests/test_docs_site_quality.py +86 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_doctor.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_exit_codes.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_health_gate.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_laravel_fp_fixes.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_math.py +8 -8
- {roam_code-12.46 → roam_code-12.47}/tests/test_math_fp_fixes.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/tests/test_mcp_extras.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/tests/test_mcp_server.py +2 -2
- roam_code-12.47/tests/test_migration_plan.py +98 -0
- roam_code-12.47/tests/test_no_internal_language.py +192 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pagerank_truncation.py +2 -2
- roam_code-12.46/tests/test_pivot_phase0_commands.py → roam_code-12.47/tests/test_phase0_commands.py +3 -4
- {roam_code-12.46 → roam_code-12.47}/tests/test_python_pivot.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_regression_fp_corpus.py +5 -5
- {roam_code-12.46 → roam_code-12.47}/tests/test_sarif_enrichment.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_search_explain.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_skill_generate.py +1 -1
- {roam_code-12.46 → roam_code-12.47}/tests/test_surface_counts.py +14 -8
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1216_passes.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1216_passes_41_50.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1219_passes_91_100.py +5 -6
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1220_passes_101_110.py +7 -7
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1221_query_timeout.py +2 -2
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1221_untested_commands.py +1 -1
- roam_code-12.47/tests/test_why_slow.py +178 -0
- roam_code-12.46/tests/test_docs_site_quality.py +0 -81
- {roam_code-12.46 → roam_code-12.47}/setup.cfg +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/analysis/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/analysis/effects.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/analysis/taint.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/api.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/ask/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/ask/classifier.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/ask/recipes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/ask/runner.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/ask/workflow.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/attest/cga.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/base.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_config.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_django.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_protobuf.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_rest_api.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_salesforce.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/bridge_template.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/bridges/registry.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/fixes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/smells.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/catalog/tasks.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/changed_files.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_adrs.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_affected_tests.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_agent_context.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_agent_plan.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ai_ratio.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ai_readiness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_alerts.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_annotate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_api_changes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_api_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ask.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_attest.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit_trail_conformance.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_audit_trail_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_bisect.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_breaking.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_budget.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_bus_factor.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_capsule.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_cga.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_check_rules.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ci_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_clean.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_closure.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_clusters.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_codeowners.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_complexity.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_congestion.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_coupling.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_cut.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dark_matter.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dashboard.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_deps.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dev_profile.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_doc_staleness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_dogfood.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_duplicates.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_effects.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_endpoints.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_entry_points.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_file.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fingerprint.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fitness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_flag_dead.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_fleet.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_forecast.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_grep.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_guard.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_hooks.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_hover.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_index.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_index_bundle.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ingest_trace.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_init.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_intent.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_invariants.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_layers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_mcp_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_metrics.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_minimap.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_module.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_mutate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_n1.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_orchestrate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_orphan_routes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_owner.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_partition.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_path_coverage.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_patterns.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_plan.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_plan_refactor.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pr_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_py_modern.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_py_types.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_pytest_fixtures.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_relate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_report.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_rules_validate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_safe_delete.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_safe_zones.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_schema.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_search_semantic.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_secrets.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_semantic_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_simulate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_simulate_departure.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_sketch.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_skill_generate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_spectral.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_split.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_supply_chain.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_suppress.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_symbol.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_syntax_check.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_gaps.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_test_scaffold.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_testmap.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_trace.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_trends.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_triage.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_understand.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_uses.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_verify_imports.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vibe_check.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_visualize.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vuln_map.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vuln_reach.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_vulns.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_why.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_ws.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/cmd_xlang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/codeowners_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/context_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/finding_suppress.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/gate_presets.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/git_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/graph_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/audit_trail.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/cache.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/pr_analyze/rules.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/commands/suppression.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/coverage_reports.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/critique/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/critique/aggregator.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/critique/checks.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/db/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/db/schema.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/eval/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/eval/harness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/exit_codes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/fleet/adapters.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/fleet/manifest.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/git_utils.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/anomaly.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/clone_detect.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/clusters.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/dark_matter.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/diff.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/fingerprint.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/layers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/pagerank.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/pathfinding.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/propagation.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/simulate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/spectral.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/graph/stats.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/discovery.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/django_post.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/file_roles.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/git_stats.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/gitignore.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/incremental.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/pytest_fixtures.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/registry_dispatch.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/relations.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/index/test_conventions.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/apex_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/aura_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/base.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/c_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/csharp_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/extractor_schema.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/extractors/kotlin.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/foxpro_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/generic_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/go_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/hcl_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/java_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/javascript_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/kotlin_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/php_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/python_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/ruby_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/rust_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/scala_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/sfxml_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/sql_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/swift_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/typescript_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/visualforce_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/languages/yaml_lang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/completions.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/progress.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/session.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/mcp_extras/watcher.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/errors.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/framework_filter.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/mermaid.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/output/schema_registry.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/refactor/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/refactor/codegen.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/refactor/transforms.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/learned_ranker.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/retrieve/semantic.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/rules/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/rules/ast_match.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/rules/builtin.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/rules/dataflow.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/rules/engine.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/graph_backend.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/hotspots.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/runtime/trace_ingest.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/search/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/search/framework_packs.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/search/index_embeddings.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/search/onnx_embeddings.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/search/tfidf.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/aibom_extension.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_classifier.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/api_error_leak.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/java_fileupload_path_traversal.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_insecure_jwt_decode.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_localstorage_secrets.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_prototype_pollution.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_ssrf.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/js_xss.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_basic.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_deserialization.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_path_traversal.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_socketio_remote_source.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_sqli.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/python_urllib_open_redirect.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/taint_rules/vue_v_html.yaml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/vuln_reach.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/security/vuln_store.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/surface_counts.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/Jenkinsfile +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/agent-review.yml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/azure-pipelines.yml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/bitbucket-pipelines.yml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/templates/ci/gitlab-ci.yml +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/__init__.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/aggregator.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/api_scanner.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/config.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam/workspace/db.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/dependency_links.txt +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/entry_points.txt +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/requires.txt +0 -0
- {roam_code-12.46 → roam_code-12.47}/src/roam_code.egg-info/top_level.txt +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_adrs.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_adversarial.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_affected.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_agent_export.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_agent_mode.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_agent_plan_context.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ai_ratio.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ai_readiness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_alerts_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_annotations.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_anomaly.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_api_changes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_api_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_attest.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_aggregate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_conformance.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_sequence.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_audit_trail_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_auth_gaps.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_backend_fixes_round2.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_backend_fixes_round3.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_basic.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_batch_mcp.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_bisect.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_bridge_django.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_bridges.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_bridges_extended.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_budget.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_budget_flag.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_budget_phase2.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_bus_factor.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_capsule.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_cga.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_check_rules.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ci_gate_eval.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ci_sarif_guard.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ci_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_clones.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_closure.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_codeowners.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_commands_architecture.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_commands_exploration.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_commands_health.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_commands_refactoring.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_commands_workflow.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_comprehensive.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_config.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_congestion.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_conventions_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_coverage_gaps_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_coverage_ingestion.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_critique.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_cut.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dark_matter.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dark_matter_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dashboard.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dataflow_dead.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dead_aging.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_demo_gif_asset.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_describe.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_detail_flag_hints.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_detector_precision.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_deterministic_output.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dev_profile.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_difficulty_scoring.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_doc_staleness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_docker_assets.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_docs_coverage.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_dogfood.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_drift_by_team.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_duplicates.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_effects.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_effects_propagation.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_endpoints.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_entry_points_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_eval_retrieve.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_except_pass_narrow.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_exclude_patterns.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_extractor_grammar_drift.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_fallback_contracts.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_file_roles.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_finding_suppress.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_fingerprint.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_fixes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_flag_dead.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_fleet.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_fn_coupling.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_forecast.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_formatters.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_foxpro.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_framework_detection.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_gate_presets.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_git_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_git_utils.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_guard.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_hooks.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_hotspots.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_hover.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_index.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_index_bundle.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_init_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_install_check.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_intent.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_invariants.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_json_contracts.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_json_error_envelope.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_kotlin_swift_extractors.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_language_corpus.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_languages.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_library_api.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_math_tips.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_mcp_setup.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_mermaid.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_metrics_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_metrics_push.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_migration_safety.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_minimap.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_missing_index.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_mutate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_n1.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_next_steps.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_onboard.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_oracle.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_orchestrate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_orphan_routes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_oss_bench_harness.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_over_fetch.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_partition.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_path_coverage.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_patterns_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_performance.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_personalized_pagerank.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_plan.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_plugin_discovery.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_cache.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_edge_cases.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_helpers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_analyze_v2_signals.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_comment_render.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_comment_script.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pr_risk_author.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_progress.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_progressive_disclosure.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_properties.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_pytest_fixtures.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_python_extractor_v2.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_python_idioms_e2e.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_readme_surface_consistency.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_realworld_feedback.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_refactoring_intelligence.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_registry_dispatch.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_relate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_report.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_reset_clean.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_resolve.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_retrieve.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_retrieve_cross_repo.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_retrieve_seeds.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_risk.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ruby.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rule_profiles.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rules.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rules_ast_match.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rules_community_pack.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rules_dataflow.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rules_symbol_requirements.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_rules_validate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_runtime.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_runtime_score.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_salesforce.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_sarif_flag.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_sbom.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_scala.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_schema_versioning.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_secrets.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_secrets_v2.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_semantic_diff.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_semantic_onnx.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_semantic_search.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_simulate.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_simulate_departure.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_sketch.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_smells.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_smoke.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_sna_metrics.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_spectral.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_split_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_sql.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_suggest_reviewers.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_supply_chain.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_syntax_check.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_taint.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_taint_analysis.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_taint_classifier.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_taint_intraprocedural.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_test_conventions.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_test_gaps.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_test_scaffold.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_testmap.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_top_flag_consistency.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_tour_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_trends.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_trends_cohort.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_triage.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_uses_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1215_passes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1216_passes_51_60.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1217_passes_61_80.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v1218_passes_81_90.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v12_2.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v2_edge_cases.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v2_integration.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v6_features.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v71_features.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v7_features.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_v82_features.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_verify.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_verify_imports.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_vibe_check.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_visualize.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_vuln.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_vulns_cmd.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_watch.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_why.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_workspace.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_ws_resolve_fixes.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_xlang.py +0 -0
- {roam_code-12.46 → roam_code-12.47}/tests/test_yaml_hcl.py +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
Apache License
|
|
2
3
|
Version 2.0, January 2004
|
|
3
4
|
http://www.apache.org/licenses/
|
|
@@ -137,8 +138,8 @@
|
|
|
137
138
|
|
|
138
139
|
6. Trademarks. This License does not grant permission to use the trade
|
|
139
140
|
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
-
except as required for
|
|
141
|
-
reproducing the content of the NOTICE file.
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
143
|
|
|
143
144
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
145
|
agreed to in writing, Licensor provides the Work (and each
|
|
@@ -162,15 +163,16 @@
|
|
|
162
163
|
other commercial damages or losses), even if such Contributor
|
|
163
164
|
has been advised of the possibility of such damages.
|
|
164
165
|
|
|
165
|
-
9. Accepting Warranty or
|
|
166
|
-
Derivative Works thereof, You may
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
171
173
|
defend, and hold each Contributor harmless for any liability
|
|
172
174
|
incurred by, or claims asserted against, such Contributor by reason
|
|
173
|
-
of your accepting any such warranty or
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
174
176
|
|
|
175
177
|
END OF TERMS AND CONDITIONS
|
|
176
178
|
|
|
@@ -185,7 +187,7 @@
|
|
|
185
187
|
same "printed page" as the copyright notice for easier
|
|
186
188
|
identification within third-party archives.
|
|
187
189
|
|
|
188
|
-
Copyright
|
|
190
|
+
Copyright [yyyy] [name of copyright owner]
|
|
189
191
|
|
|
190
192
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
191
193
|
you may not use this file except in compliance with the License.
|
|
@@ -195,6 +197,6 @@
|
|
|
195
197
|
|
|
196
198
|
Unless required by applicable law or agreed to in writing, software
|
|
197
199
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
198
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
199
|
-
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
200
202
|
limitations under the License.
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roam-code
|
|
3
|
-
Version: 12.
|
|
3
|
+
Version: 12.47
|
|
4
4
|
Summary: Instant codebase comprehension for AI coding agents
|
|
5
|
-
Author:
|
|
5
|
+
Author: Cranot
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://
|
|
8
|
-
Project-URL: Documentation, https://
|
|
7
|
+
Project-URL: Homepage, https://roam-code.com/
|
|
8
|
+
Project-URL: Documentation, https://roam-code.com/docs/
|
|
9
9
|
Project-URL: Repository, https://github.com/Cranot/roam-code
|
|
10
10
|
Project-URL: Issues, https://github.com/Cranot/roam-code/issues
|
|
11
11
|
Project-URL: Changelog, https://github.com/Cranot/roam-code/blob/main/CHANGELOG.md
|
|
12
|
+
Project-URL: Pricing, https://roam-code.com/pricing
|
|
13
|
+
Project-URL: Security, https://roam-code.com/security
|
|
12
14
|
Keywords: code-intelligence,static-analysis,mcp-server,tree-sitter,architecture,code-graph,ai-coding,graph-analysis,code-quality,cli,codebase,code-analysis,ai-tools,mcp,sql
|
|
13
15
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
16
|
Classifier: Environment :: Console
|
|
@@ -64,9 +66,9 @@ Dynamic: license-file
|
|
|
64
66
|
|
|
65
67
|
**Architectural sight for AI coding agents — before they edit.**
|
|
66
68
|
|
|
67
|
-
A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other
|
|
69
|
+
A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 197 specialised commands are advanced surface for specialised workflows.
|
|
68
70
|
|
|
69
|
-
*
|
|
71
|
+
*202 commands · 136 MCP tools · 28 languages · 100% local · zero API keys*
|
|
70
72
|
|
|
71
73
|
[](https://pypi.org/project/roam-code/)
|
|
72
74
|
[](https://github.com/Cranot/roam-code/stargazers)
|
|
@@ -82,15 +84,15 @@ A local code graph (SQLite + tree-sitter + git history) that gives any agent —
|
|
|
82
84
|
|
|
83
85
|
Roam is a structural intelligence engine for software. It pre-indexes your codebase into a semantic graph -- symbols, dependencies, call graphs, architecture layers, git history, and runtime traces -- stored in a local SQLite DB. Agents query it via CLI or MCP instead of repeatedly grepping files and guessing structure.
|
|
84
86
|
|
|
85
|
-
> **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam
|
|
87
|
+
> **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Review](#roam-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud](#roam-cloud-metrics-history-no-source-upload)** (metrics-history dashboard, no source-code bodies uploaded). Both run on the OSS engine and are licensed separately.
|
|
86
88
|
|
|
87
89
|
Unlike LSPs (editor-bound, language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact. It goes beyond comprehension: Roam governs architecture through budget gates, simulates refactoring outcomes, orchestrates multi-agent swarms with zero-conflict guarantees, maps vulnerability reachability paths, and enables graph-level code editing without syntax errors.
|
|
88
90
|
|
|
89
91
|
```
|
|
90
|
-
Codebase ──> [Index] ──> Semantic Graph ──>
|
|
92
|
+
Codebase ──> [Index] ──> Semantic Graph ──> 194 Commands ──> AI Agent
|
|
91
93
|
│ │ │
|
|
92
94
|
tree-sitter symbols comprehend
|
|
93
|
-
|
|
95
|
+
28 languages + edges govern
|
|
94
96
|
git history + metrics refactor
|
|
95
97
|
runtime traces + architecture orchestrate
|
|
96
98
|
```
|
|
@@ -160,7 +162,7 @@ $ roam diff # blast radius of uncommitted changes
|
|
|
160
162
|
- **`personalized_pagerank()`** in `graph/pagerank.py`: NetworkX `personalization=` wrapper with empty-seed fallback to global PR; biases ranking toward query-relevant nodes for the retrieve reranker.
|
|
161
163
|
- **`.roam/config.toml`** (new): zero-dep TOML loader (stdlib `tomllib` → `tomli` → in-tree subset parser). Tunable retrieve weights (`alpha`/`beta`/`gamma`/`delta`/`epsilon`), `tokens_per_line`, `lexical_baseline`, `first_stage_token_cap`, `default_budget`, `default_k`, `default_rerank`.
|
|
162
164
|
- **DX corrections from dogfood pass**: `roam --detail <cmd>` is the canonical group-level flag; misleading "use --detail" hints in 7 commands rewritten to point users at `roam --detail <cmd>`. `--top N` aliased on `complexity`/`algo`/`rules` (`--top 0` means unlimited on `rules`). `roam fingerprint` no longer refuses graphs ≥5,000 symbols (new soft-warn threshold 20k, hard cap 100k).
|
|
163
|
-
- **
|
|
165
|
+
- **202 CLI commands, 136 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
|
|
164
166
|
|
|
165
167
|
## What's New in v11
|
|
166
168
|
|
|
@@ -172,7 +174,7 @@ $ roam diff # blast radius of uncommitted changes
|
|
|
172
174
|
### v11.1.2 -- SQL + Scala Tier 1, 27 Languages
|
|
173
175
|
- **SQL DDL promoted to Tier 1** with dedicated `SqlExtractor` -- tables, columns, views, functions, triggers, schemas, types (enums), sequences, ALTER TABLE ADD COLUMN. Foreign keys produce graph edges; views and triggers reference source tables. Database-schema projects now work with `roam health`, `roam layers`, `roam impact`, `roam coupling` and all graph commands.
|
|
174
176
|
- **Scala promoted to Tier 1** with dedicated `ScalaExtractor` -- classes, traits, objects, case classes, sealed hierarchies, val/var properties, type aliases, imports, and inheritance. Full `extends` + `with` trait mixin resolution.
|
|
175
|
-
- **
|
|
177
|
+
- **28 languages** with 17 dedicated Tier 1 extractors.
|
|
176
178
|
- `server.json` for official MCP Registry submission.
|
|
177
179
|
|
|
178
180
|
### v11.1.1 -- Command Quality Audit
|
|
@@ -296,10 +298,10 @@ First index takes ~5s for 200 files, ~15s for 1,000 files. Subsequent runs are i
|
|
|
296
298
|
|
|
297
299
|
- **Set up your AI agent:** `roam describe --write` (auto-detects CLAUDE.md, AGENTS.md, .cursor/rules, etc. — see [integration instructions](#integration-with-ai-coding-tools))
|
|
298
300
|
- **Explore:** `roam health` → `roam weather` → `roam map`
|
|
299
|
-
- **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam
|
|
300
|
-
- **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail +
|
|
301
|
+
- **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Review](#roam-review-pr-bot-for-ai-generated-changes))
|
|
302
|
+
- **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + governance checks in one envelope)
|
|
301
303
|
- **Add to CI:** `roam init` already generated a GitHub Action
|
|
302
|
-
- **Customer-facing artifacts:** see
|
|
304
|
+
- **Customer-facing artifacts:** see starter rule packs at [`templates/rules/`](templates/rules/), the audit-report template + redacted sample at [`templates/audit-report/`](templates/audit-report/), and the security/procurement packet at [`templates/legal/security-procurement-packet.md`](templates/legal/security-procurement-packet.md).
|
|
303
305
|
|
|
304
306
|
<details>
|
|
305
307
|
<summary><strong>Try it on Roam itself</strong></summary>
|
|
@@ -334,7 +336,7 @@ roam health
|
|
|
334
336
|
|
|
335
337
|
## Commands
|
|
336
338
|
|
|
337
|
-
**Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining
|
|
339
|
+
**Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining ~197 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **202 commands organised into 7 categories** (plus 6 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`), but you don't need to know that to start.
|
|
338
340
|
|
|
339
341
|
<details>
|
|
340
342
|
<summary><strong>Full command reference</strong></summary>
|
|
@@ -376,28 +378,30 @@ roam health
|
|
|
376
378
|
| `roam stats` | Aggregate metrics over the index: count by language, file role, kind, plus recent commit activity |
|
|
377
379
|
| `roam timeline <symbol>` | Chronological commits that touched the file owning the symbol — author, date, lines added/removed |
|
|
378
380
|
| `roam pr-prep [<range>]` | One-shot pre-PR fitness check that bundles diff + critique + pr-risk into one envelope |
|
|
379
|
-
| `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK);
|
|
381
|
+
| `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); governance audit trail via `--audit-trail` |
|
|
380
382
|
| `roam pr-comment-render --input F` | Render a markdown PR comment from a `pr-analyze` JSON envelope; styles: `github`, `gitlab`, `plain` |
|
|
381
|
-
| `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source
|
|
383
|
+
| `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source-code bodies) from `roam audit` to a Roam Cloud endpoint; `--dry-run` prints the payload locally |
|
|
382
384
|
| `roam audit-trail-verify [--input F] [--gate]` | Walk the EU AI Act audit-trail JSONL and verify SHA-256 chain integrity; exit 5 on broken chain |
|
|
383
385
|
| `roam audit-trail-export [--format md\|json\|csv] [--since T] [--verdict V] [--aggregate]` | Export the audit trail for procurement / compliance review; `--aggregate` rolls up per actor / repo / verdict / month |
|
|
384
|
-
| `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against
|
|
385
|
-
| `roam article-12-check [--output F] [--pdf F]` |
|
|
386
|
+
| `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against governance-evidence checks (chain integrity, timestamps, actors, reproducibility, retention) |
|
|
387
|
+
| `roam article-12-check [--output F] [--pdf F]` | Article 12 scope/readiness assessment for actual Annex III high-risk AI-system buyers; produces a 1-page Markdown / PDF report. |
|
|
386
388
|
| `roam capabilities [--emit yaml\|json\|text] [--category X] [--ai-safe-only]` | Emit the decorator-driven capability registry — every command's machine-readable shape (inputs, outputs, ai_safe flag, since-version). For Roam Review GitHub App + MCP filtering. |
|
|
387
389
|
| `roam skill-generate [--target claude\|cursor\|continue\|aider] [--output F]` | Generate an agent-runtime skill manifest from the capability registry. SKILL.md / .mdc / config snippets — derived from decorators, never hand-edited. |
|
|
388
390
|
| `roam compare <baseline.db> <target.db> [--top N] [--threshold N]` | Structural delta between two indices: symbols added/removed/moved + per-file complexity deltas + IMPROVED/SIDEWAYS/REGRESSED verdict. The "did this refactor actually work?" tool. |
|
|
391
|
+
| `roam migration-plan [--target spec.yml] [--move SYMBOL=path] [--max-risk low\|medium\|high]` | Generate an ordered migration plan from current state to a target architecture. Each step annotated with blast-radius (caller count) + risk score (low/medium/high) + cross-layer detection. |
|
|
389
392
|
| `roam permit [--staged] [--input F] [--symbol N]` | Structural-permission verdict facade for AI agents: ALLOW/REVIEW/BLOCK over critique + preflight + blast-radius. Exit codes 0/5/6 for Cursor rules / Claude Code hooks / pre-commit / CI gates. |
|
|
390
393
|
| `roam postmortem <commit-range> [--limit N] [--show N]` | Replay current detectors against past commits; reports findings that would have surfaced pre-merge. The "would Roam have caught my Q1 incident?" demo. |
|
|
391
394
|
| `roam rules-validate [PATH] [--against DIFF] [--strict] [--gate] [--explain]` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs; optional dry-run against a sample diff |
|
|
392
|
-
| `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail +
|
|
395
|
+
| `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + governance checks — first-touch demo for any repo |
|
|
393
396
|
| `roam suppress <finding-id> --reason "…"` | Suppress a math / over-fetch / missing-index / auth-gaps false positive with audit-trail-friendly record (`.roam/suppressions.json`); `--list` / `--remove` complete the workflow |
|
|
394
397
|
| `roam why-fail <test>` | Find recently-changed symbols transitively reachable from a failing test |
|
|
398
|
+
| `roam why-slow <symbol>` | Surface runtime hotspots and slow callers for a specific symbol (uses runtime traces if present) |
|
|
395
399
|
| `roam recommend <symbol>` | Surface related symbols using call-graph + co-change + clone signals |
|
|
396
400
|
| `roam graph-stats` | Graph-level invariants: density, weak components, non-trivial cycles, top inbound symbols |
|
|
397
401
|
| `roam api [--scope <dir>]` | List the public API surface (exported public symbols + signatures) |
|
|
398
402
|
| `roam exit-codes` | List every roam exit code with its meaning |
|
|
399
403
|
| `roam version [--check]` | Show installed version; with `--check` also queries PyPI for newer releases |
|
|
400
|
-
| `roam audit [--brief]` | One-shot AI
|
|
404
|
+
| `roam audit [--brief]` | One-shot AI-governance audit envelope — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
|
|
401
405
|
| `roam disambiguate <name>` | List every symbol matching the name with file/line/kind/signature/docstring snippet to pick the right one |
|
|
402
406
|
| `roam pre-commit [--install\|--print]` | Install or preview a roam-critique git pre-commit hook |
|
|
403
407
|
| `roam mcp-status` | MCP server health: preset, registered tools, backpressure limits, cache entries, watcher state |
|
|
@@ -984,7 +988,7 @@ pip install "roam-code[mcp]"
|
|
|
984
988
|
roam mcp
|
|
985
989
|
```
|
|
986
990
|
|
|
987
|
-
|
|
991
|
+
136 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
|
|
988
992
|
|
|
989
993
|
**MCP v2 highlights (v11):**
|
|
990
994
|
- In-process MCP execution (no subprocess shell-out per call)
|
|
@@ -1017,7 +1021,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
1017
1021
|
<details>
|
|
1018
1022
|
<summary><strong>MCP tool list (all 136)</strong></summary>
|
|
1019
1023
|
|
|
1020
|
-
*New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam
|
|
1024
|
+
*New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Review + Cloud engines + governance audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
|
|
1021
1025
|
|
|
1022
1026
|
| Tool | Description |
|
|
1023
1027
|
|------|-------------|
|
|
@@ -1037,7 +1041,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
1037
1041
|
| `roam_oracle_is_test_only` | Boolean oracle: are ALL callers of this symbol in test files? |
|
|
1038
1042
|
| `roam_oracle_is_reachable_from_entry` | Boolean oracle: can BFS reach this symbol from any entry-point? |
|
|
1039
1043
|
| `roam_oracle_is_clone_of` | Boolean oracle: does this symbol participate in a persisted clone cluster? |
|
|
1040
|
-
| `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (
|
|
1044
|
+
| `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (shorter name) |
|
|
1041
1045
|
| `roam_oracle_batch` | Run multiple oracle queries in one call (tri-state envelopes per result) |
|
|
1042
1046
|
| `roam_taint_classify` | LLM-augmented taint classification (IDOR/AUTHZ/SQLI/...) via MCP sampling |
|
|
1043
1047
|
| `roam_taint` | Static taint analysis — graph-reach BFS with OpenVEX-correct findings |
|
|
@@ -1050,10 +1054,10 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
1050
1054
|
| `roam_pr_risk` | Risk score for pending changes |
|
|
1051
1055
|
| `roam_pr_analyze` | Agent-aware PR verdict: pr-prep + AI-likelihood + `.roam/rules.yml` + INTENTIONAL/SAFE/REVIEW/BLOCK |
|
|
1052
1056
|
| `roam_pr_comment_render` | Render a markdown PR comment from a `roam_pr_analyze` envelope |
|
|
1053
|
-
| `roam_metrics_push` | Push metrics-only summary (no source
|
|
1057
|
+
| `roam_metrics_push` | Push metrics-only summary (no source-code bodies) to Roam Cloud; default dry-run |
|
|
1054
1058
|
| `roam_audit_trail_verify` | Verify SHA-256 chain integrity of an EU AI Act audit-trail JSONL |
|
|
1055
1059
|
| `roam_audit_trail_export` | Export the audit trail as markdown / json / csv (with date / verdict filters) for procurement |
|
|
1056
|
-
| `roam_audit_trail_conformance_check` | Score the audit trail against
|
|
1060
|
+
| `roam_audit_trail_conformance_check` | Score the audit trail against governance-evidence checks (chain / timestamps / actors / reproducibility / retention) |
|
|
1057
1061
|
| `roam_rules_validate` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs |
|
|
1058
1062
|
| `roam_dogfood` | One-shot v2 stack runner — audit + pr-analyze + audit-trail + conformance in one envelope |
|
|
1059
1063
|
| `roam_breaking_changes` | Detect breaking changes between refs |
|
|
@@ -1240,11 +1244,11 @@ Add to `.vscode/mcp.json`:
|
|
|
1240
1244
|
|
|
1241
1245
|
</details>
|
|
1242
1246
|
|
|
1243
|
-
## Roam
|
|
1247
|
+
## Roam Review (PR bot for AI-generated changes)
|
|
1244
1248
|
|
|
1245
|
-
Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam
|
|
1249
|
+
Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Review fills that gap.
|
|
1246
1250
|
|
|
1247
|
-
`roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and
|
|
1251
|
+
`roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and a governance audit-trail record.
|
|
1248
1252
|
|
|
1249
1253
|
```bash
|
|
1250
1254
|
git diff main..HEAD | roam pr-analyze --explain --with-reviewers --audit-trail
|
|
@@ -1252,7 +1256,7 @@ roam pr-analyze main..HEAD --gate # exit 5 on BLOCK (CI gat
|
|
|
1252
1256
|
roam --json pr-analyze --input pr.diff | roam pr-comment-render # ready-to-post markdown
|
|
1253
1257
|
roam pr-analyze --batch ./diffs/ --cache --parallel 4 # 24-55x speedup on incremental re-runs
|
|
1254
1258
|
roam audit-trail-verify # check SHA-256 chain integrity
|
|
1255
|
-
roam audit-trail-conformance-check --gate #
|
|
1259
|
+
roam audit-trail-conformance-check --gate # governance-evidence score (CI)
|
|
1256
1260
|
```
|
|
1257
1261
|
|
|
1258
1262
|
**Nine weighted heuristic signals** score the diff for AI-likelihood: add/remove ratio, comment density, test coverage, function-size variance, generic naming, orphan imports, **placeholder density** (TODO/FIXME/NotImplementedError stubs), **LLM-phrase density** ("we use this approach because…"), **suspicious imports** (numbered modules, mass typing imports). Each carries **language-aware weights** across Python / TypeScript / JavaScript / Go / Rust / Java / Kotlin. Starter rule packs ship for Python, TypeScript, Go, and Java at [`templates/rules/`](templates/rules/) — drop one at `.roam/rules.yml` to enable. Custom rules look like:
|
|
@@ -1274,13 +1278,13 @@ rules:
|
|
|
1274
1278
|
|
|
1275
1279
|
A **drift baseline** (`--save-baseline` / `--baseline FILE`) compares the current PR's signals against the previous analysis and auto-escalates the verdict on regression — the GitHub App reads this to render `(+5 vs prev)` / `(-22 vs prev)` arrows on every push.
|
|
1276
1280
|
|
|
1277
|
-
The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports.
|
|
1281
|
+
The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. This is best framed as SOC 2 CC8.1, ISO 42001, and internal AI-governance evidence. Article 12 is only relevant for actual Annex III high-risk AI-system buyers, and Roam's records are supporting evidence rather than complete runtime inference logs.
|
|
1278
1282
|
|
|
1279
1283
|
A hosted GitHub App is in development on top of this CLI engine. Until it ships, the CLI is usable today as a free CI gate (`roam pr-analyze --gate` exits 5 on BLOCK).
|
|
1280
1284
|
|
|
1281
|
-
## Roam Cloud
|
|
1285
|
+
## Roam Cloud (metrics history, no source upload)
|
|
1282
1286
|
|
|
1283
|
-
`roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud
|
|
1287
|
+
`roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
|
|
1284
1288
|
|
|
1285
1289
|
```bash
|
|
1286
1290
|
roam metrics-push --dry-run # local-only inspection
|
|
@@ -1515,7 +1519,7 @@ Codebase
|
|
|
1515
1519
|
|
|
|
1516
1520
|
[1] Discovery ──── git ls-files (respects .gitignore + .roamignore)
|
|
1517
1521
|
|
|
|
1518
|
-
[2] Parse ──────── tree-sitter AST per file (
|
|
1522
|
+
[2] Parse ──────── tree-sitter AST per file (28 languages)
|
|
1519
1523
|
|
|
|
1520
1524
|
[3] Extract ────── symbols + references (calls, imports, inheritance)
|
|
1521
1525
|
|
|
|
@@ -1723,8 +1727,8 @@ roam-code/
|
|
|
1723
1727
|
├── action.yml # Reusable GitHub Action
|
|
1724
1728
|
├── src/roam/
|
|
1725
1729
|
│ ├── __init__.py # Version (from pyproject.toml)
|
|
1726
|
-
│ ├── cli.py # Click CLI (
|
|
1727
|
-
│ ├── mcp_server.py # MCP server (
|
|
1730
|
+
│ ├── cli.py # Click CLI (194 canonical + 7 aliases)
|
|
1731
|
+
│ ├── mcp_server.py # MCP server (136 tools, 10 resources, 5 prompts)
|
|
1728
1732
|
│ ├── db/
|
|
1729
1733
|
│ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
|
|
1730
1734
|
│ │ ├── schema.py # Tables, indexes, migrations
|
|
@@ -1818,7 +1822,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
|
|
|
1818
1822
|
### Shipped
|
|
1819
1823
|
|
|
1820
1824
|
- [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
|
|
1821
|
-
- [x] Full command and MCP inventory parity in docs:
|
|
1825
|
+
- [x] Full command and MCP inventory parity in docs: 197 canonical CLI commands and 136 MCP tools.
|
|
1822
1826
|
- [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
|
|
1823
1827
|
- [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
|
|
1824
1828
|
- [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
**Architectural sight for AI coding agents — before they edit.**
|
|
6
6
|
|
|
7
|
-
A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other
|
|
7
|
+
A local code graph (SQLite + tree-sitter + git history) that gives any agent — Claude Code, Cursor, Aider, Continue, your own — five high-leverage verbs: `understand`, `retrieve`, `context`, `preflight`, `critique`. The other 197 specialised commands are advanced surface for specialised workflows.
|
|
8
8
|
|
|
9
|
-
*
|
|
9
|
+
*202 commands · 136 MCP tools · 28 languages · 100% local · zero API keys*
|
|
10
10
|
|
|
11
11
|
[](https://pypi.org/project/roam-code/)
|
|
12
12
|
[](https://github.com/Cranot/roam-code/stargazers)
|
|
@@ -22,15 +22,15 @@ A local code graph (SQLite + tree-sitter + git history) that gives any agent —
|
|
|
22
22
|
|
|
23
23
|
Roam is a structural intelligence engine for software. It pre-indexes your codebase into a semantic graph -- symbols, dependencies, call graphs, architecture layers, git history, and runtime traces -- stored in a local SQLite DB. Agents query it via CLI or MCP instead of repeatedly grepping files and guessing structure.
|
|
24
24
|
|
|
25
|
-
> **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam
|
|
25
|
+
> **For teams running AI coding agents:** Roam ships two paid layers on top of the free CLI — **[Roam Review](#roam-review-pr-bot-for-ai-generated-changes)** (PR bot scoring AI-generated changes for structural risk) and **[Roam Cloud](#roam-cloud-metrics-history-no-source-upload)** (metrics-history dashboard, no source-code bodies uploaded). Both run on the OSS engine and are licensed separately.
|
|
26
26
|
|
|
27
27
|
Unlike LSPs (editor-bound, language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact. It goes beyond comprehension: Roam governs architecture through budget gates, simulates refactoring outcomes, orchestrates multi-agent swarms with zero-conflict guarantees, maps vulnerability reachability paths, and enables graph-level code editing without syntax errors.
|
|
28
28
|
|
|
29
29
|
```
|
|
30
|
-
Codebase ──> [Index] ──> Semantic Graph ──>
|
|
30
|
+
Codebase ──> [Index] ──> Semantic Graph ──> 194 Commands ──> AI Agent
|
|
31
31
|
│ │ │
|
|
32
32
|
tree-sitter symbols comprehend
|
|
33
|
-
|
|
33
|
+
28 languages + edges govern
|
|
34
34
|
git history + metrics refactor
|
|
35
35
|
runtime traces + architecture orchestrate
|
|
36
36
|
```
|
|
@@ -100,7 +100,7 @@ $ roam diff # blast radius of uncommitted changes
|
|
|
100
100
|
- **`personalized_pagerank()`** in `graph/pagerank.py`: NetworkX `personalization=` wrapper with empty-seed fallback to global PR; biases ranking toward query-relevant nodes for the retrieve reranker.
|
|
101
101
|
- **`.roam/config.toml`** (new): zero-dep TOML loader (stdlib `tomllib` → `tomli` → in-tree subset parser). Tunable retrieve weights (`alpha`/`beta`/`gamma`/`delta`/`epsilon`), `tokens_per_line`, `lexical_baseline`, `first_stage_token_cap`, `default_budget`, `default_k`, `default_rerank`.
|
|
102
102
|
- **DX corrections from dogfood pass**: `roam --detail <cmd>` is the canonical group-level flag; misleading "use --detail" hints in 7 commands rewritten to point users at `roam --detail <cmd>`. `--top N` aliased on `complexity`/`algo`/`rules` (`--top 0` means unlimited on `rules`). `roam fingerprint` no longer refuses graphs ≥5,000 symbols (new soft-warn threshold 20k, hard cap 100k).
|
|
103
|
-
- **
|
|
103
|
+
- **202 CLI commands, 136 MCP tools** (`fleet`, `ask`, `workflow`, `cga`, `eval-retrieve` remain CLI-only; v12 exposes `roam_retrieve`, `roam_critique`, `roam_fleet_plan`, plus 5 v12.1 boolean oracles (`roam_oracle_*`), `roam_taint_classify`, `roam_pytest_fixtures`, and `roam_hover` as MCP tools). 35-tool `core` preset is the default for token-budget-conscious clients.
|
|
104
104
|
|
|
105
105
|
## What's New in v11
|
|
106
106
|
|
|
@@ -112,7 +112,7 @@ $ roam diff # blast radius of uncommitted changes
|
|
|
112
112
|
### v11.1.2 -- SQL + Scala Tier 1, 27 Languages
|
|
113
113
|
- **SQL DDL promoted to Tier 1** with dedicated `SqlExtractor` -- tables, columns, views, functions, triggers, schemas, types (enums), sequences, ALTER TABLE ADD COLUMN. Foreign keys produce graph edges; views and triggers reference source tables. Database-schema projects now work with `roam health`, `roam layers`, `roam impact`, `roam coupling` and all graph commands.
|
|
114
114
|
- **Scala promoted to Tier 1** with dedicated `ScalaExtractor` -- classes, traits, objects, case classes, sealed hierarchies, val/var properties, type aliases, imports, and inheritance. Full `extends` + `with` trait mixin resolution.
|
|
115
|
-
- **
|
|
115
|
+
- **28 languages** with 17 dedicated Tier 1 extractors.
|
|
116
116
|
- `server.json` for official MCP Registry submission.
|
|
117
117
|
|
|
118
118
|
### v11.1.1 -- Command Quality Audit
|
|
@@ -236,10 +236,10 @@ First index takes ~5s for 200 files, ~15s for 1,000 files. Subsequent runs are i
|
|
|
236
236
|
|
|
237
237
|
- **Set up your AI agent:** `roam describe --write` (auto-detects CLAUDE.md, AGENTS.md, .cursor/rules, etc. — see [integration instructions](#integration-with-ai-coding-tools))
|
|
238
238
|
- **Explore:** `roam health` → `roam weather` → `roam map`
|
|
239
|
-
- **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam
|
|
240
|
-
- **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail +
|
|
239
|
+
- **Run the v2 stack on every PR:** `git diff | roam pr-analyze --explain` (gates AI-generated risk; pair with `roam pr-comment-render` for sticky GitHub comments — see [Roam Review](#roam-review-pr-bot-for-ai-generated-changes))
|
|
240
|
+
- **First-touch demo:** `roam dogfood` (audit + pr-analyze + audit-trail + governance checks in one envelope)
|
|
241
241
|
- **Add to CI:** `roam init` already generated a GitHub Action
|
|
242
|
-
- **Customer-facing artifacts:** see
|
|
242
|
+
- **Customer-facing artifacts:** see starter rule packs at [`templates/rules/`](templates/rules/), the audit-report template + redacted sample at [`templates/audit-report/`](templates/audit-report/), and the security/procurement packet at [`templates/legal/security-procurement-packet.md`](templates/legal/security-procurement-packet.md).
|
|
243
243
|
|
|
244
244
|
<details>
|
|
245
245
|
<summary><strong>Try it on Roam itself</strong></summary>
|
|
@@ -274,7 +274,7 @@ roam health
|
|
|
274
274
|
|
|
275
275
|
## Commands
|
|
276
276
|
|
|
277
|
-
**Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining
|
|
277
|
+
**Lead with the 5 verbs.** The [5 core commands](#core-commands) cover ~80% of agent workflows: `understand`, `context`, `retrieve`, `preflight`, `critique`. The remaining ~197 commands are detail surface for specialised workflows (taint, fleet, cga, oracle, eval, …) — they're called by agents on demand, not memorised. This is intentional design; under the hood the canonical surface is **202 commands organised into 7 categories** (plus 6 aliases for muscle memory: `algo` → `math`, `weather` → `churn`, `digest` / `snapshot` / `trend` → `trends`, `onboard` → `understand`), but you don't need to know that to start.
|
|
278
278
|
|
|
279
279
|
<details>
|
|
280
280
|
<summary><strong>Full command reference</strong></summary>
|
|
@@ -316,28 +316,30 @@ roam health
|
|
|
316
316
|
| `roam stats` | Aggregate metrics over the index: count by language, file role, kind, plus recent commit activity |
|
|
317
317
|
| `roam timeline <symbol>` | Chronological commits that touched the file owning the symbol — author, date, lines added/removed |
|
|
318
318
|
| `roam pr-prep [<range>]` | One-shot pre-PR fitness check that bundles diff + critique + pr-risk into one envelope |
|
|
319
|
-
| `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK);
|
|
319
|
+
| `roam pr-analyze [<range>] [--input F] [--rules F] [--gate]` | Agent-aware PR risk verdict: aggregates `pr-prep` with AI-likelihood scoring, `.roam/rules.yml` enforcement, and INTENTIONAL/SAFE/REVIEW/BLOCK mapping; CI gate via `--gate` (exit 5 on BLOCK); governance audit trail via `--audit-trail` |
|
|
320
320
|
| `roam pr-comment-render --input F` | Render a markdown PR comment from a `pr-analyze` JSON envelope; styles: `github`, `gitlab`, `plain` |
|
|
321
|
-
| `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source
|
|
321
|
+
| `roam metrics-push [--token T] [--anonymize] [--dry-run]` | Push metrics-only summary (no source-code bodies) from `roam audit` to a Roam Cloud endpoint; `--dry-run` prints the payload locally |
|
|
322
322
|
| `roam audit-trail-verify [--input F] [--gate]` | Walk the EU AI Act audit-trail JSONL and verify SHA-256 chain integrity; exit 5 on broken chain |
|
|
323
323
|
| `roam audit-trail-export [--format md\|json\|csv] [--since T] [--verdict V] [--aggregate]` | Export the audit trail for procurement / compliance review; `--aggregate` rolls up per actor / repo / verdict / month |
|
|
324
|
-
| `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against
|
|
325
|
-
| `roam article-12-check [--output F] [--pdf F]` |
|
|
324
|
+
| `roam audit-trail-conformance-check [--retention-days N] [--gate]` | Score the audit trail against governance-evidence checks (chain integrity, timestamps, actors, reproducibility, retention) |
|
|
325
|
+
| `roam article-12-check [--output F] [--pdf F]` | Article 12 scope/readiness assessment for actual Annex III high-risk AI-system buyers; produces a 1-page Markdown / PDF report. |
|
|
326
326
|
| `roam capabilities [--emit yaml\|json\|text] [--category X] [--ai-safe-only]` | Emit the decorator-driven capability registry — every command's machine-readable shape (inputs, outputs, ai_safe flag, since-version). For Roam Review GitHub App + MCP filtering. |
|
|
327
327
|
| `roam skill-generate [--target claude\|cursor\|continue\|aider] [--output F]` | Generate an agent-runtime skill manifest from the capability registry. SKILL.md / .mdc / config snippets — derived from decorators, never hand-edited. |
|
|
328
328
|
| `roam compare <baseline.db> <target.db> [--top N] [--threshold N]` | Structural delta between two indices: symbols added/removed/moved + per-file complexity deltas + IMPROVED/SIDEWAYS/REGRESSED verdict. The "did this refactor actually work?" tool. |
|
|
329
|
+
| `roam migration-plan [--target spec.yml] [--move SYMBOL=path] [--max-risk low\|medium\|high]` | Generate an ordered migration plan from current state to a target architecture. Each step annotated with blast-radius (caller count) + risk score (low/medium/high) + cross-layer detection. |
|
|
329
330
|
| `roam permit [--staged] [--input F] [--symbol N]` | Structural-permission verdict facade for AI agents: ALLOW/REVIEW/BLOCK over critique + preflight + blast-radius. Exit codes 0/5/6 for Cursor rules / Claude Code hooks / pre-commit / CI gates. |
|
|
330
331
|
| `roam postmortem <commit-range> [--limit N] [--show N]` | Replay current detectors against past commits; reports findings that would have surfaced pre-merge. The "would Roam have caught my Q1 incident?" demo. |
|
|
331
332
|
| `roam rules-validate [PATH] [--against DIFF] [--strict] [--gate] [--explain]` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs; optional dry-run against a sample diff |
|
|
332
|
-
| `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail +
|
|
333
|
+
| `roam dogfood [--no-audit] [--no-pr-analyze] [--no-audit-trail]` | One-shot v2 stack runner: audit + pr-analyze + audit-trail + governance checks — first-touch demo for any repo |
|
|
333
334
|
| `roam suppress <finding-id> --reason "…"` | Suppress a math / over-fetch / missing-index / auth-gaps false positive with audit-trail-friendly record (`.roam/suppressions.json`); `--list` / `--remove` complete the workflow |
|
|
334
335
|
| `roam why-fail <test>` | Find recently-changed symbols transitively reachable from a failing test |
|
|
336
|
+
| `roam why-slow <symbol>` | Surface runtime hotspots and slow callers for a specific symbol (uses runtime traces if present) |
|
|
335
337
|
| `roam recommend <symbol>` | Surface related symbols using call-graph + co-change + clone signals |
|
|
336
338
|
| `roam graph-stats` | Graph-level invariants: density, weak components, non-trivial cycles, top inbound symbols |
|
|
337
339
|
| `roam api [--scope <dir>]` | List the public API surface (exported public symbols + signatures) |
|
|
338
340
|
| `roam exit-codes` | List every roam exit code with its meaning |
|
|
339
341
|
| `roam version [--check]` | Show installed version; with `--check` also queries PyPI for newer releases |
|
|
340
|
-
| `roam audit [--brief]` | One-shot AI
|
|
342
|
+
| `roam audit [--brief]` | One-shot AI-governance audit envelope — chains health + debt + dead + risk + test-pyramid + api into a single envelope |
|
|
341
343
|
| `roam disambiguate <name>` | List every symbol matching the name with file/line/kind/signature/docstring snippet to pick the right one |
|
|
342
344
|
| `roam pre-commit [--install\|--print]` | Install or preview a roam-critique git pre-commit hook |
|
|
343
345
|
| `roam mcp-status` | MCP server health: preset, registered tools, backpressure limits, cache entries, watcher state |
|
|
@@ -924,7 +926,7 @@ pip install "roam-code[mcp]"
|
|
|
924
926
|
roam mcp
|
|
925
927
|
```
|
|
926
928
|
|
|
927
|
-
|
|
929
|
+
136 tools, 10 resources, and 5 prompts are available in the full preset. Most tools are read-only index queries; side-effect tools are explicitly annotated.
|
|
928
930
|
|
|
929
931
|
**MCP v2 highlights (v11):**
|
|
930
932
|
- In-process MCP execution (no subprocess shell-out per call)
|
|
@@ -957,7 +959,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
957
959
|
<details>
|
|
958
960
|
<summary><strong>MCP tool list (all 136)</strong></summary>
|
|
959
961
|
|
|
960
|
-
*New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam
|
|
962
|
+
*New in v12.26: `roam_pr_analyze`, `roam_pr_comment_render`, `roam_metrics_push`, `roam_audit_trail_verify`, `roam_audit_trail_export`, `roam_audit_trail_conformance_check`, `roam_rules_validate`, `roam_dogfood` — Roam Review + Cloud engines + governance audit-trail toolkit + production-grade rules linting + one-shot v2 stack runner.*
|
|
961
963
|
|
|
962
964
|
| Tool | Description |
|
|
963
965
|
|------|-------------|
|
|
@@ -977,7 +979,7 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
977
979
|
| `roam_oracle_is_test_only` | Boolean oracle: are ALL callers of this symbol in test files? |
|
|
978
980
|
| `roam_oracle_is_reachable_from_entry` | Boolean oracle: can BFS reach this symbol from any entry-point? |
|
|
979
981
|
| `roam_oracle_is_clone_of` | Boolean oracle: does this symbol participate in a persisted clone cluster? |
|
|
980
|
-
| `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (
|
|
982
|
+
| `roam_oracle_test_only` | Alias of `roam_oracle_is_test_only` (shorter name) |
|
|
981
983
|
| `roam_oracle_batch` | Run multiple oracle queries in one call (tri-state envelopes per result) |
|
|
982
984
|
| `roam_taint_classify` | LLM-augmented taint classification (IDOR/AUTHZ/SQLI/...) via MCP sampling |
|
|
983
985
|
| `roam_taint` | Static taint analysis — graph-reach BFS with OpenVEX-correct findings |
|
|
@@ -990,10 +992,10 @@ Core preset tools: `roam_affected_tests`, `roam_batch_get`, `roam_batch_search`,
|
|
|
990
992
|
| `roam_pr_risk` | Risk score for pending changes |
|
|
991
993
|
| `roam_pr_analyze` | Agent-aware PR verdict: pr-prep + AI-likelihood + `.roam/rules.yml` + INTENTIONAL/SAFE/REVIEW/BLOCK |
|
|
992
994
|
| `roam_pr_comment_render` | Render a markdown PR comment from a `roam_pr_analyze` envelope |
|
|
993
|
-
| `roam_metrics_push` | Push metrics-only summary (no source
|
|
995
|
+
| `roam_metrics_push` | Push metrics-only summary (no source-code bodies) to Roam Cloud; default dry-run |
|
|
994
996
|
| `roam_audit_trail_verify` | Verify SHA-256 chain integrity of an EU AI Act audit-trail JSONL |
|
|
995
997
|
| `roam_audit_trail_export` | Export the audit trail as markdown / json / csv (with date / verdict filters) for procurement |
|
|
996
|
-
| `roam_audit_trail_conformance_check` | Score the audit trail against
|
|
998
|
+
| `roam_audit_trail_conformance_check` | Score the audit trail against governance-evidence checks (chain / timestamps / actors / reproducibility / retention) |
|
|
997
999
|
| `roam_rules_validate` | Lint a `.roam/rules.yml` for typos, schema mistakes, unknown patterns, duplicate IDs |
|
|
998
1000
|
| `roam_dogfood` | One-shot v2 stack runner — audit + pr-analyze + audit-trail + conformance in one envelope |
|
|
999
1001
|
| `roam_breaking_changes` | Detect breaking changes between refs |
|
|
@@ -1180,11 +1182,11 @@ Add to `.vscode/mcp.json`:
|
|
|
1180
1182
|
|
|
1181
1183
|
</details>
|
|
1182
1184
|
|
|
1183
|
-
## Roam
|
|
1185
|
+
## Roam Review (PR bot for AI-generated changes)
|
|
1184
1186
|
|
|
1185
|
-
Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam
|
|
1187
|
+
Most "AI safety net" tools — CodeRabbit, Greptile, Qodo — review PR **semantics** (does the diff *look* right?). They don't read your **graph**: who calls the changed symbol, which layer it belongs to, whether the AI just touched a god-component with 47 callers. Roam Review fills that gap.
|
|
1186
1188
|
|
|
1187
|
-
`roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and
|
|
1189
|
+
`roam pr-analyze` is the CLI engine: pipe a unified diff in, get back a verdict (`INTENTIONAL` / `SAFE` / `REVIEW` / `BLOCK`) plus AI-likelihood score, blast radius, rule violations, suggested reviewers, and a governance audit-trail record.
|
|
1188
1190
|
|
|
1189
1191
|
```bash
|
|
1190
1192
|
git diff main..HEAD | roam pr-analyze --explain --with-reviewers --audit-trail
|
|
@@ -1192,7 +1194,7 @@ roam pr-analyze main..HEAD --gate # exit 5 on BLOCK (CI gat
|
|
|
1192
1194
|
roam --json pr-analyze --input pr.diff | roam pr-comment-render # ready-to-post markdown
|
|
1193
1195
|
roam pr-analyze --batch ./diffs/ --cache --parallel 4 # 24-55x speedup on incremental re-runs
|
|
1194
1196
|
roam audit-trail-verify # check SHA-256 chain integrity
|
|
1195
|
-
roam audit-trail-conformance-check --gate #
|
|
1197
|
+
roam audit-trail-conformance-check --gate # governance-evidence score (CI)
|
|
1196
1198
|
```
|
|
1197
1199
|
|
|
1198
1200
|
**Nine weighted heuristic signals** score the diff for AI-likelihood: add/remove ratio, comment density, test coverage, function-size variance, generic naming, orphan imports, **placeholder density** (TODO/FIXME/NotImplementedError stubs), **LLM-phrase density** ("we use this approach because…"), **suspicious imports** (numbered modules, mass typing imports). Each carries **language-aware weights** across Python / TypeScript / JavaScript / Go / Rust / Java / Kotlin. Starter rule packs ship for Python, TypeScript, Go, and Java at [`templates/rules/`](templates/rules/) — drop one at `.roam/rules.yml` to enable. Custom rules look like:
|
|
@@ -1214,13 +1216,13 @@ rules:
|
|
|
1214
1216
|
|
|
1215
1217
|
A **drift baseline** (`--save-baseline` / `--baseline FILE`) compares the current PR's signals against the previous analysis and auto-escalates the verdict on regression — the GitHub App reads this to render `(+5 vs prev)` / `(-22 vs prev)` arrows on every push.
|
|
1216
1218
|
|
|
1217
|
-
The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports.
|
|
1219
|
+
The **`pr-analyze --audit-trail`** flag appends a SHA-256-chained record to `.roam/audit-trail.jsonl` for each analysis (actor, repo, git SHA, diff hash, verdict, blast radius, AI-likelihood, intent marker). `roam audit-trail-verify` walks the chain and surfaces tampered records; `roam audit-trail-export --format md|csv|json` produces procurement-friendly reports. This is best framed as SOC 2 CC8.1, ISO 42001, and internal AI-governance evidence. Article 12 is only relevant for actual Annex III high-risk AI-system buyers, and Roam's records are supporting evidence rather than complete runtime inference logs.
|
|
1218
1220
|
|
|
1219
1221
|
A hosted GitHub App is in development on top of this CLI engine. Until it ships, the CLI is usable today as a free CI gate (`roam pr-analyze --gate` exits 5 on BLOCK).
|
|
1220
1222
|
|
|
1221
|
-
## Roam Cloud
|
|
1223
|
+
## Roam Cloud (metrics history, no source upload)
|
|
1222
1224
|
|
|
1223
|
-
`roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud
|
|
1225
|
+
`roam metrics-push` sends a *summary-only* payload from `roam audit --json` to a Roam Cloud endpoint — numerical metrics, file paths (or SHA-256 hashes when `--anonymize`), and identifier names only. **No source-code bodies are transmitted**, ever. Inspect the exact payload locally with `--dry-run` before any token is set.
|
|
1224
1226
|
|
|
1225
1227
|
```bash
|
|
1226
1228
|
roam metrics-push --dry-run # local-only inspection
|
|
@@ -1455,7 +1457,7 @@ Codebase
|
|
|
1455
1457
|
|
|
|
1456
1458
|
[1] Discovery ──── git ls-files (respects .gitignore + .roamignore)
|
|
1457
1459
|
|
|
|
1458
|
-
[2] Parse ──────── tree-sitter AST per file (
|
|
1460
|
+
[2] Parse ──────── tree-sitter AST per file (28 languages)
|
|
1459
1461
|
|
|
|
1460
1462
|
[3] Extract ────── symbols + references (calls, imports, inheritance)
|
|
1461
1463
|
|
|
|
@@ -1663,8 +1665,8 @@ roam-code/
|
|
|
1663
1665
|
├── action.yml # Reusable GitHub Action
|
|
1664
1666
|
├── src/roam/
|
|
1665
1667
|
│ ├── __init__.py # Version (from pyproject.toml)
|
|
1666
|
-
│ ├── cli.py # Click CLI (
|
|
1667
|
-
│ ├── mcp_server.py # MCP server (
|
|
1668
|
+
│ ├── cli.py # Click CLI (194 canonical + 7 aliases)
|
|
1669
|
+
│ ├── mcp_server.py # MCP server (136 tools, 10 resources, 5 prompts)
|
|
1668
1670
|
│ ├── db/
|
|
1669
1671
|
│ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
|
|
1670
1672
|
│ │ ├── schema.py # Tables, indexes, migrations
|
|
@@ -1758,7 +1760,7 @@ Optional: Local semantic ONNX stack (`numpy`, `onnxruntime`, `tokenizers`) via `
|
|
|
1758
1760
|
### Shipped
|
|
1759
1761
|
|
|
1760
1762
|
- [x] MCP v2 agent surface: in-process execution, compound operations, presets, schemas, annotations, and compatibility profiles.
|
|
1761
|
-
- [x] Full command and MCP inventory parity in docs:
|
|
1763
|
+
- [x] Full command and MCP inventory parity in docs: 197 canonical CLI commands and 136 MCP tools.
|
|
1762
1764
|
- [x] CI hardening: composite action, changed-only mode, trend-aware gates, sticky PR updater, and SARIF guardrails.
|
|
1763
1765
|
- [x] Performance foundation: FTS5/BM25 search, O(changed) incremental indexing, DB/index optimizations.
|
|
1764
1766
|
- [x] Agent governance suite: `vibe-check`, `ai-readiness`, `verify`, `ai-ratio`, `duplicates`, advanced `algo` scoring/SARIF.
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "roam-code"
|
|
7
|
-
version = "12.
|
|
7
|
+
version = "12.47"
|
|
8
8
|
description = "Instant codebase comprehension for AI coding agents"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
license = "Apache-2.0"
|
|
12
12
|
authors = [
|
|
13
|
-
{name = "
|
|
13
|
+
{name = "Cranot"},
|
|
14
14
|
]
|
|
15
15
|
keywords = ["code-intelligence", "static-analysis", "mcp-server", "tree-sitter", "architecture", "code-graph", "ai-coding", "graph-analysis", "code-quality", "cli", "codebase", "code-analysis", "ai-tools", "mcp", "sql"]
|
|
16
16
|
classifiers = [
|
|
@@ -41,11 +41,13 @@ dependencies = [
|
|
|
41
41
|
]
|
|
42
42
|
|
|
43
43
|
[project.urls]
|
|
44
|
-
Homepage = "https://
|
|
45
|
-
Documentation = "https://
|
|
44
|
+
Homepage = "https://roam-code.com/"
|
|
45
|
+
Documentation = "https://roam-code.com/docs/"
|
|
46
46
|
Repository = "https://github.com/Cranot/roam-code"
|
|
47
47
|
Issues = "https://github.com/Cranot/roam-code/issues"
|
|
48
48
|
Changelog = "https://github.com/Cranot/roam-code/blob/main/CHANGELOG.md"
|
|
49
|
+
Pricing = "https://roam-code.com/pricing"
|
|
50
|
+
Security = "https://roam-code.com/security"
|
|
49
51
|
|
|
50
52
|
[project.scripts]
|
|
51
53
|
roam = "roam.cli:cli"
|
|
@@ -4,7 +4,7 @@ import sys
|
|
|
4
4
|
|
|
5
5
|
from roam.cli import cli
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# graceful Ctrl-C: exit 130 (SIGINT convention) without
|
|
8
8
|
# spilling a Python traceback. Long-running commands still leave any
|
|
9
9
|
# committed DB rows in place — this just suppresses the noise.
|
|
10
10
|
try:
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
"""roam Code Graph Attestation (CGA).
|
|
2
|
-
|
|
3
|
-
Phase-3/E.1 chain partner for ``roam taint`` (already shipped E.2).
|
|
1
|
+
"""roam Code Graph Attestation (CGA)./E.1 chain partner for ``roam taint`` (already shipped E.2).
|
|
4
2
|
Per the v12 brainstorm 05_security_enterprise.md and the senior review,
|
|
5
3
|
this primitive becomes the moat for CRA Sep-2026 / EO 14028 / OSPS
|
|
6
4
|
Baseline conformance: every PR ships a signed in-toto attestation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Capability Registry — decorator-driven introspection for roam commands.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Capability Registry — declarative manifest of public surface. The
|
|
4
4
|
architect's correction: the per-command capability YAML must be derived
|
|
5
5
|
from decorators, not hand-edited. This module implements the decorator
|
|
6
6
|
plus an emitter that walks all registered commands and produces a
|