roam-code 12.12__tar.gz → 12.12.2__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.
Files changed (583) hide show
  1. {roam_code-12.12/src/roam_code.egg-info → roam_code-12.12.2}/PKG-INFO +1 -1
  2. {roam_code-12.12 → roam_code-12.12.2}/pyproject.toml +13 -1
  3. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_ask.py +7 -2
  4. {roam_code-12.12 → roam_code-12.12.2}/src/roam/competitor_site_data.py +1 -1
  5. roam_code-12.12.2/src/roam/languages/extractors/kotlin.yaml +113 -0
  6. roam_code-12.12.2/src/roam/mcp-server-card.json +156 -0
  7. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_server.py +23 -19
  8. roam_code-12.12.2/src/roam/security/taint_rules/api_error_leak.yaml +28 -0
  9. roam_code-12.12.2/src/roam/security/taint_rules/java_fileupload_path_traversal.yaml +28 -0
  10. roam_code-12.12.2/src/roam/security/taint_rules/js_insecure_jwt_decode.yaml +23 -0
  11. roam_code-12.12.2/src/roam/security/taint_rules/js_localstorage_secrets.yaml +25 -0
  12. roam_code-12.12.2/src/roam/security/taint_rules/js_prototype_pollution.yaml +30 -0
  13. roam_code-12.12.2/src/roam/security/taint_rules/js_ssrf.yaml +21 -0
  14. roam_code-12.12.2/src/roam/security/taint_rules/js_xss.yaml +23 -0
  15. roam_code-12.12.2/src/roam/security/taint_rules/python_basic.yaml +25 -0
  16. roam_code-12.12.2/src/roam/security/taint_rules/python_deserialization.yaml +34 -0
  17. roam_code-12.12.2/src/roam/security/taint_rules/python_path_traversal.yaml +22 -0
  18. roam_code-12.12.2/src/roam/security/taint_rules/python_socketio_remote_source.yaml +33 -0
  19. roam_code-12.12.2/src/roam/security/taint_rules/python_sqli.yaml +21 -0
  20. roam_code-12.12.2/src/roam/security/taint_rules/python_urllib_open_redirect.yaml +30 -0
  21. roam_code-12.12.2/src/roam/security/taint_rules/vue_v_html.yaml +26 -0
  22. roam_code-12.12.2/src/roam/templates/ci/Jenkinsfile +186 -0
  23. roam_code-12.12.2/src/roam/templates/ci/azure-pipelines.yml +162 -0
  24. roam_code-12.12.2/src/roam/templates/ci/bitbucket-pipelines.yml +179 -0
  25. roam_code-12.12.2/src/roam/templates/ci/gitlab-ci.yml +138 -0
  26. {roam_code-12.12 → roam_code-12.12.2/src/roam_code.egg-info}/PKG-INFO +1 -1
  27. {roam_code-12.12 → roam_code-12.12.2}/src/roam_code.egg-info/SOURCES.txt +20 -0
  28. {roam_code-12.12 → roam_code-12.12.2}/tests/test_doc_consistency.py +42 -9
  29. {roam_code-12.12 → roam_code-12.12.2}/LICENSE +0 -0
  30. {roam_code-12.12 → roam_code-12.12.2}/README.md +0 -0
  31. {roam_code-12.12 → roam_code-12.12.2}/setup.cfg +0 -0
  32. {roam_code-12.12 → roam_code-12.12.2}/src/roam/__init__.py +0 -0
  33. {roam_code-12.12 → roam_code-12.12.2}/src/roam/__main__.py +0 -0
  34. {roam_code-12.12 → roam_code-12.12.2}/src/roam/analysis/__init__.py +0 -0
  35. {roam_code-12.12 → roam_code-12.12.2}/src/roam/analysis/effects.py +0 -0
  36. {roam_code-12.12 → roam_code-12.12.2}/src/roam/analysis/taint.py +0 -0
  37. {roam_code-12.12 → roam_code-12.12.2}/src/roam/api.py +0 -0
  38. {roam_code-12.12 → roam_code-12.12.2}/src/roam/ask/__init__.py +0 -0
  39. {roam_code-12.12 → roam_code-12.12.2}/src/roam/ask/classifier.py +0 -0
  40. {roam_code-12.12 → roam_code-12.12.2}/src/roam/ask/recipes.py +0 -0
  41. {roam_code-12.12 → roam_code-12.12.2}/src/roam/ask/runner.py +0 -0
  42. {roam_code-12.12 → roam_code-12.12.2}/src/roam/ask/workflow.py +0 -0
  43. {roam_code-12.12 → roam_code-12.12.2}/src/roam/attest/__init__.py +0 -0
  44. {roam_code-12.12 → roam_code-12.12.2}/src/roam/attest/cga.py +0 -0
  45. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/__init__.py +0 -0
  46. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/base.py +0 -0
  47. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/bridge_config.py +0 -0
  48. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/bridge_django.py +0 -0
  49. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/bridge_protobuf.py +0 -0
  50. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/bridge_rest_api.py +0 -0
  51. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/bridge_salesforce.py +0 -0
  52. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/bridge_template.py +0 -0
  53. {roam_code-12.12 → roam_code-12.12.2}/src/roam/bridges/registry.py +0 -0
  54. {roam_code-12.12 → roam_code-12.12.2}/src/roam/catalog/__init__.py +0 -0
  55. {roam_code-12.12 → roam_code-12.12.2}/src/roam/catalog/detectors.py +0 -0
  56. {roam_code-12.12 → roam_code-12.12.2}/src/roam/catalog/fixes.py +0 -0
  57. {roam_code-12.12 → roam_code-12.12.2}/src/roam/catalog/python_idioms.py +0 -0
  58. {roam_code-12.12 → roam_code-12.12.2}/src/roam/catalog/smells.py +0 -0
  59. {roam_code-12.12 → roam_code-12.12.2}/src/roam/catalog/tasks.py +0 -0
  60. {roam_code-12.12 → roam_code-12.12.2}/src/roam/cli.py +0 -0
  61. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/__init__.py +0 -0
  62. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/changed_files.py +0 -0
  63. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_adrs.py +0 -0
  64. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_adversarial.py +0 -0
  65. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_affected.py +0 -0
  66. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_affected_tests.py +0 -0
  67. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_agent_context.py +0 -0
  68. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_agent_export.py +0 -0
  69. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_agent_plan.py +0 -0
  70. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_ai_ratio.py +0 -0
  71. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_ai_readiness.py +0 -0
  72. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_alerts.py +0 -0
  73. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_annotate.py +0 -0
  74. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_api_changes.py +0 -0
  75. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_api_drift.py +0 -0
  76. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_attest.py +0 -0
  77. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_auth_gaps.py +0 -0
  78. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_bisect.py +0 -0
  79. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_breaking.py +0 -0
  80. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_budget.py +0 -0
  81. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_bus_factor.py +0 -0
  82. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_capsule.py +0 -0
  83. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_cga.py +0 -0
  84. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_check_rules.py +0 -0
  85. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_ci_setup.py +0 -0
  86. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_clean.py +0 -0
  87. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_clones.py +0 -0
  88. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_closure.py +0 -0
  89. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_clusters.py +0 -0
  90. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_codeowners.py +0 -0
  91. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_complexity.py +0 -0
  92. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_config.py +0 -0
  93. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_congestion.py +0 -0
  94. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_context.py +0 -0
  95. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_conventions.py +0 -0
  96. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_coupling.py +0 -0
  97. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_coverage_gaps.py +0 -0
  98. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_critique.py +0 -0
  99. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_cut.py +0 -0
  100. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_dark_matter.py +0 -0
  101. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_dashboard.py +0 -0
  102. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_dead.py +0 -0
  103. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_debt.py +0 -0
  104. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_deps.py +0 -0
  105. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_describe.py +0 -0
  106. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_dev_profile.py +0 -0
  107. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_diagnose.py +0 -0
  108. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_diff.py +0 -0
  109. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_doc_staleness.py +0 -0
  110. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_docs_coverage.py +0 -0
  111. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_doctor.py +0 -0
  112. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_drift.py +0 -0
  113. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_duplicates.py +0 -0
  114. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_effects.py +0 -0
  115. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_endpoints.py +0 -0
  116. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_entry_points.py +0 -0
  117. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_eval_retrieve.py +0 -0
  118. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_fan.py +0 -0
  119. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_file.py +0 -0
  120. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_fingerprint.py +0 -0
  121. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_fitness.py +0 -0
  122. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_flag_dead.py +0 -0
  123. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_fleet.py +0 -0
  124. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_fn_coupling.py +0 -0
  125. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_forecast.py +0 -0
  126. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_grep.py +0 -0
  127. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_guard.py +0 -0
  128. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_health.py +0 -0
  129. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_hooks.py +0 -0
  130. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_hotspots.py +0 -0
  131. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_hover.py +0 -0
  132. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_impact.py +0 -0
  133. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_index.py +0 -0
  134. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_index_bundle.py +0 -0
  135. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_ingest_trace.py +0 -0
  136. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_init.py +0 -0
  137. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_intent.py +0 -0
  138. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_invariants.py +0 -0
  139. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_layers.py +0 -0
  140. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_map.py +0 -0
  141. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_math.py +0 -0
  142. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_mcp_setup.py +0 -0
  143. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_metrics.py +0 -0
  144. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_migration_safety.py +0 -0
  145. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_minimap.py +0 -0
  146. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_missing_index.py +0 -0
  147. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_module.py +0 -0
  148. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_mutate.py +0 -0
  149. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_n1.py +0 -0
  150. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_oracle.py +0 -0
  151. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_orchestrate.py +0 -0
  152. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_orphan_routes.py +0 -0
  153. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_over_fetch.py +0 -0
  154. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_owner.py +0 -0
  155. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_partition.py +0 -0
  156. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_path_coverage.py +0 -0
  157. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_patterns.py +0 -0
  158. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_plan.py +0 -0
  159. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_plan_refactor.py +0 -0
  160. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_pr_diff.py +0 -0
  161. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_pr_risk.py +0 -0
  162. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_preflight.py +0 -0
  163. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_py_modern.py +0 -0
  164. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_py_types.py +0 -0
  165. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_pytest_fixtures.py +0 -0
  166. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_relate.py +0 -0
  167. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_report.py +0 -0
  168. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_reset.py +0 -0
  169. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_retrieve.py +0 -0
  170. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_risk.py +0 -0
  171. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_rules.py +0 -0
  172. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_safe_delete.py +0 -0
  173. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_safe_zones.py +0 -0
  174. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_sbom.py +0 -0
  175. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_schema.py +0 -0
  176. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_search.py +0 -0
  177. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_search_semantic.py +0 -0
  178. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_secrets.py +0 -0
  179. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_semantic_diff.py +0 -0
  180. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_simulate.py +0 -0
  181. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_simulate_departure.py +0 -0
  182. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_sketch.py +0 -0
  183. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_smells.py +0 -0
  184. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_spectral.py +0 -0
  185. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_split.py +0 -0
  186. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_suggest_refactoring.py +0 -0
  187. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_suggest_reviewers.py +0 -0
  188. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_supply_chain.py +0 -0
  189. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_symbol.py +0 -0
  190. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_syntax_check.py +0 -0
  191. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_taint.py +0 -0
  192. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_test_gaps.py +0 -0
  193. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_test_scaffold.py +0 -0
  194. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_testmap.py +0 -0
  195. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_tour.py +0 -0
  196. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_trace.py +0 -0
  197. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_trends.py +0 -0
  198. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_triage.py +0 -0
  199. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_understand.py +0 -0
  200. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_uses.py +0 -0
  201. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_verify.py +0 -0
  202. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_verify_imports.py +0 -0
  203. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_vibe_check.py +0 -0
  204. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_visualize.py +0 -0
  205. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_vuln_map.py +0 -0
  206. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_vuln_reach.py +0 -0
  207. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_vulns.py +0 -0
  208. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_watch.py +0 -0
  209. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_weather.py +0 -0
  210. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_why.py +0 -0
  211. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_workflow.py +0 -0
  212. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_ws.py +0 -0
  213. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/cmd_xlang.py +0 -0
  214. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/codeowners_helpers.py +0 -0
  215. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/context_helpers.py +0 -0
  216. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/gate_presets.py +0 -0
  217. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/graph_helpers.py +0 -0
  218. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/metrics_history.py +0 -0
  219. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/next_steps.py +0 -0
  220. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/resolve.py +0 -0
  221. {roam_code-12.12 → roam_code-12.12.2}/src/roam/commands/suppression.py +0 -0
  222. {roam_code-12.12 → roam_code-12.12.2}/src/roam/config.py +0 -0
  223. {roam_code-12.12 → roam_code-12.12.2}/src/roam/coverage_reports.py +0 -0
  224. {roam_code-12.12 → roam_code-12.12.2}/src/roam/critique/__init__.py +0 -0
  225. {roam_code-12.12 → roam_code-12.12.2}/src/roam/critique/aggregator.py +0 -0
  226. {roam_code-12.12 → roam_code-12.12.2}/src/roam/critique/checks.py +0 -0
  227. {roam_code-12.12 → roam_code-12.12.2}/src/roam/db/__init__.py +0 -0
  228. {roam_code-12.12 → roam_code-12.12.2}/src/roam/db/connection.py +0 -0
  229. {roam_code-12.12 → roam_code-12.12.2}/src/roam/db/queries.py +0 -0
  230. {roam_code-12.12 → roam_code-12.12.2}/src/roam/db/schema.py +0 -0
  231. {roam_code-12.12 → roam_code-12.12.2}/src/roam/eval/__init__.py +0 -0
  232. {roam_code-12.12 → roam_code-12.12.2}/src/roam/eval/harness.py +0 -0
  233. {roam_code-12.12 → roam_code-12.12.2}/src/roam/exit_codes.py +0 -0
  234. {roam_code-12.12 → roam_code-12.12.2}/src/roam/fleet/__init__.py +0 -0
  235. {roam_code-12.12 → roam_code-12.12.2}/src/roam/fleet/adapters.py +0 -0
  236. {roam_code-12.12 → roam_code-12.12.2}/src/roam/fleet/manifest.py +0 -0
  237. {roam_code-12.12 → roam_code-12.12.2}/src/roam/git_utils.py +0 -0
  238. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/__init__.py +0 -0
  239. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/anomaly.py +0 -0
  240. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/builder.py +0 -0
  241. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/clone_detect.py +0 -0
  242. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/clusters.py +0 -0
  243. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/cycles.py +0 -0
  244. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/dark_matter.py +0 -0
  245. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/diff.py +0 -0
  246. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/fingerprint.py +0 -0
  247. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/layers.py +0 -0
  248. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/pagerank.py +0 -0
  249. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/partition.py +0 -0
  250. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/pathfinding.py +0 -0
  251. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/propagation.py +0 -0
  252. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/simulate.py +0 -0
  253. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/spectral.py +0 -0
  254. {roam_code-12.12 → roam_code-12.12.2}/src/roam/graph/stats.py +0 -0
  255. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/__init__.py +0 -0
  256. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/complexity.py +0 -0
  257. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/discovery.py +0 -0
  258. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/django_post.py +0 -0
  259. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/file_roles.py +0 -0
  260. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/git_stats.py +0 -0
  261. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/gitignore.py +0 -0
  262. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/incremental.py +0 -0
  263. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/indexer.py +0 -0
  264. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/parser.py +0 -0
  265. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/pytest_fixtures.py +0 -0
  266. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/registry_dispatch.py +0 -0
  267. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/relations.py +0 -0
  268. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/symbols.py +0 -0
  269. {roam_code-12.12 → roam_code-12.12.2}/src/roam/index/test_conventions.py +0 -0
  270. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/__init__.py +0 -0
  271. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/apex_lang.py +0 -0
  272. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/aura_lang.py +0 -0
  273. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/base.py +0 -0
  274. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/c_lang.py +0 -0
  275. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/csharp_lang.py +0 -0
  276. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/extractor_schema.py +0 -0
  277. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/foxpro_lang.py +0 -0
  278. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/generic_lang.py +0 -0
  279. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/go_lang.py +0 -0
  280. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/hcl_lang.py +0 -0
  281. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/java_lang.py +0 -0
  282. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/javascript_lang.py +0 -0
  283. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/kotlin_lang.py +0 -0
  284. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/php_lang.py +0 -0
  285. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/python_lang.py +0 -0
  286. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/query_engine.py +0 -0
  287. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/registry.py +0 -0
  288. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/ruby_lang.py +0 -0
  289. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/rust_lang.py +0 -0
  290. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/scala_lang.py +0 -0
  291. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/sfxml_lang.py +0 -0
  292. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/sql_lang.py +0 -0
  293. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/swift_lang.py +0 -0
  294. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/typescript_lang.py +0 -0
  295. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/visualforce_lang.py +0 -0
  296. {roam_code-12.12 → roam_code-12.12.2}/src/roam/languages/yaml_lang.py +0 -0
  297. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/__init__.py +0 -0
  298. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/completions.py +0 -0
  299. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/concurrency.py +0 -0
  300. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/progress.py +0 -0
  301. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/sampling.py +0 -0
  302. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/session.py +0 -0
  303. {roam_code-12.12 → roam_code-12.12.2}/src/roam/mcp_extras/watcher.py +0 -0
  304. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/__init__.py +0 -0
  305. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/confidence.py +0 -0
  306. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/errors.py +0 -0
  307. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/file_role_hints.py +0 -0
  308. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/formatter.py +0 -0
  309. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/framework_filter.py +0 -0
  310. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/mermaid.py +0 -0
  311. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/project_shape.py +0 -0
  312. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/sarif.py +0 -0
  313. {roam_code-12.12 → roam_code-12.12.2}/src/roam/output/schema_registry.py +0 -0
  314. {roam_code-12.12 → roam_code-12.12.2}/src/roam/plugins.py +0 -0
  315. {roam_code-12.12 → roam_code-12.12.2}/src/roam/refactor/__init__.py +0 -0
  316. {roam_code-12.12 → roam_code-12.12.2}/src/roam/refactor/codegen.py +0 -0
  317. {roam_code-12.12 → roam_code-12.12.2}/src/roam/refactor/transforms.py +0 -0
  318. {roam_code-12.12 → roam_code-12.12.2}/src/roam/retrieve/__init__.py +0 -0
  319. {roam_code-12.12 → roam_code-12.12.2}/src/roam/retrieve/learned_ranker.py +0 -0
  320. {roam_code-12.12 → roam_code-12.12.2}/src/roam/retrieve/pipeline.py +0 -0
  321. {roam_code-12.12 → roam_code-12.12.2}/src/roam/retrieve/rerank.py +0 -0
  322. {roam_code-12.12 → roam_code-12.12.2}/src/roam/retrieve/seeds.py +0 -0
  323. {roam_code-12.12 → roam_code-12.12.2}/src/roam/retrieve/semantic.py +0 -0
  324. {roam_code-12.12 → roam_code-12.12.2}/src/roam/rules/__init__.py +0 -0
  325. {roam_code-12.12 → roam_code-12.12.2}/src/roam/rules/ast_match.py +0 -0
  326. {roam_code-12.12 → roam_code-12.12.2}/src/roam/rules/builtin.py +0 -0
  327. {roam_code-12.12 → roam_code-12.12.2}/src/roam/rules/dataflow.py +0 -0
  328. {roam_code-12.12 → roam_code-12.12.2}/src/roam/rules/engine.py +0 -0
  329. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/__init__.py +0 -0
  330. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/daemon.py +0 -0
  331. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/graph_backend.py +0 -0
  332. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/hotspots.py +0 -0
  333. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/lock_modes.py +0 -0
  334. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/lockmgr.py +0 -0
  335. {roam_code-12.12 → roam_code-12.12.2}/src/roam/runtime/trace_ingest.py +0 -0
  336. {roam_code-12.12 → roam_code-12.12.2}/src/roam/search/__init__.py +0 -0
  337. {roam_code-12.12 → roam_code-12.12.2}/src/roam/search/framework_packs.py +0 -0
  338. {roam_code-12.12 → roam_code-12.12.2}/src/roam/search/index_embeddings.py +0 -0
  339. {roam_code-12.12 → roam_code-12.12.2}/src/roam/search/onnx_embeddings.py +0 -0
  340. {roam_code-12.12 → roam_code-12.12.2}/src/roam/search/tfidf.py +0 -0
  341. {roam_code-12.12 → roam_code-12.12.2}/src/roam/security/__init__.py +0 -0
  342. {roam_code-12.12 → roam_code-12.12.2}/src/roam/security/aibom_extension.py +0 -0
  343. {roam_code-12.12 → roam_code-12.12.2}/src/roam/security/taint_classifier.py +0 -0
  344. {roam_code-12.12 → roam_code-12.12.2}/src/roam/security/taint_engine.py +0 -0
  345. {roam_code-12.12 → roam_code-12.12.2}/src/roam/security/vuln_reach.py +0 -0
  346. {roam_code-12.12 → roam_code-12.12.2}/src/roam/security/vuln_store.py +0 -0
  347. {roam_code-12.12 → roam_code-12.12.2}/src/roam/surface_counts.py +0 -0
  348. {roam_code-12.12 → roam_code-12.12.2}/src/roam/templates/__init__.py +0 -0
  349. {roam_code-12.12 → roam_code-12.12.2}/src/roam/templates/ci/__init__.py +0 -0
  350. {roam_code-12.12 → roam_code-12.12.2}/src/roam/workspace/__init__.py +0 -0
  351. {roam_code-12.12 → roam_code-12.12.2}/src/roam/workspace/aggregator.py +0 -0
  352. {roam_code-12.12 → roam_code-12.12.2}/src/roam/workspace/api_scanner.py +0 -0
  353. {roam_code-12.12 → roam_code-12.12.2}/src/roam/workspace/config.py +0 -0
  354. {roam_code-12.12 → roam_code-12.12.2}/src/roam/workspace/db.py +0 -0
  355. {roam_code-12.12 → roam_code-12.12.2}/src/roam_code.egg-info/dependency_links.txt +0 -0
  356. {roam_code-12.12 → roam_code-12.12.2}/src/roam_code.egg-info/entry_points.txt +0 -0
  357. {roam_code-12.12 → roam_code-12.12.2}/src/roam_code.egg-info/requires.txt +0 -0
  358. {roam_code-12.12 → roam_code-12.12.2}/src/roam_code.egg-info/top_level.txt +0 -0
  359. {roam_code-12.12 → roam_code-12.12.2}/tests/test_adrs.py +0 -0
  360. {roam_code-12.12 → roam_code-12.12.2}/tests/test_adversarial.py +0 -0
  361. {roam_code-12.12 → roam_code-12.12.2}/tests/test_affected.py +0 -0
  362. {roam_code-12.12 → roam_code-12.12.2}/tests/test_agent_export.py +0 -0
  363. {roam_code-12.12 → roam_code-12.12.2}/tests/test_agent_mode.py +0 -0
  364. {roam_code-12.12 → roam_code-12.12.2}/tests/test_agent_plan_context.py +0 -0
  365. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ai_ratio.py +0 -0
  366. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ai_readiness.py +0 -0
  367. {roam_code-12.12 → roam_code-12.12.2}/tests/test_alerts_cmd.py +0 -0
  368. {roam_code-12.12 → roam_code-12.12.2}/tests/test_annotations.py +0 -0
  369. {roam_code-12.12 → roam_code-12.12.2}/tests/test_anomaly.py +0 -0
  370. {roam_code-12.12 → roam_code-12.12.2}/tests/test_api_changes.py +0 -0
  371. {roam_code-12.12 → roam_code-12.12.2}/tests/test_api_drift.py +0 -0
  372. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ask.py +0 -0
  373. {roam_code-12.12 → roam_code-12.12.2}/tests/test_attest.py +0 -0
  374. {roam_code-12.12 → roam_code-12.12.2}/tests/test_auth_gaps.py +0 -0
  375. {roam_code-12.12 → roam_code-12.12.2}/tests/test_backend_fixes_round2.py +0 -0
  376. {roam_code-12.12 → roam_code-12.12.2}/tests/test_backend_fixes_round3.py +0 -0
  377. {roam_code-12.12 → roam_code-12.12.2}/tests/test_basic.py +0 -0
  378. {roam_code-12.12 → roam_code-12.12.2}/tests/test_batch_mcp.py +0 -0
  379. {roam_code-12.12 → roam_code-12.12.2}/tests/test_bisect.py +0 -0
  380. {roam_code-12.12 → roam_code-12.12.2}/tests/test_bridge_django.py +0 -0
  381. {roam_code-12.12 → roam_code-12.12.2}/tests/test_bridges.py +0 -0
  382. {roam_code-12.12 → roam_code-12.12.2}/tests/test_bridges_extended.py +0 -0
  383. {roam_code-12.12 → roam_code-12.12.2}/tests/test_budget.py +0 -0
  384. {roam_code-12.12 → roam_code-12.12.2}/tests/test_budget_flag.py +0 -0
  385. {roam_code-12.12 → roam_code-12.12.2}/tests/test_budget_phase2.py +0 -0
  386. {roam_code-12.12 → roam_code-12.12.2}/tests/test_bus_factor.py +0 -0
  387. {roam_code-12.12 → roam_code-12.12.2}/tests/test_capsule.py +0 -0
  388. {roam_code-12.12 → roam_code-12.12.2}/tests/test_cga.py +0 -0
  389. {roam_code-12.12 → roam_code-12.12.2}/tests/test_check_rules.py +0 -0
  390. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ci_gate_eval.py +0 -0
  391. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ci_sarif_guard.py +0 -0
  392. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ci_setup.py +0 -0
  393. {roam_code-12.12 → roam_code-12.12.2}/tests/test_clones.py +0 -0
  394. {roam_code-12.12 → roam_code-12.12.2}/tests/test_closure.py +0 -0
  395. {roam_code-12.12 → roam_code-12.12.2}/tests/test_codeowners.py +0 -0
  396. {roam_code-12.12 → roam_code-12.12.2}/tests/test_commands_architecture.py +0 -0
  397. {roam_code-12.12 → roam_code-12.12.2}/tests/test_commands_exploration.py +0 -0
  398. {roam_code-12.12 → roam_code-12.12.2}/tests/test_commands_health.py +0 -0
  399. {roam_code-12.12 → roam_code-12.12.2}/tests/test_commands_refactoring.py +0 -0
  400. {roam_code-12.12 → roam_code-12.12.2}/tests/test_commands_workflow.py +0 -0
  401. {roam_code-12.12 → roam_code-12.12.2}/tests/test_competitor_site_data.py +0 -0
  402. {roam_code-12.12 → roam_code-12.12.2}/tests/test_comprehensive.py +0 -0
  403. {roam_code-12.12 → roam_code-12.12.2}/tests/test_config.py +0 -0
  404. {roam_code-12.12 → roam_code-12.12.2}/tests/test_congestion.py +0 -0
  405. {roam_code-12.12 → roam_code-12.12.2}/tests/test_context_propagation.py +0 -0
  406. {roam_code-12.12 → roam_code-12.12.2}/tests/test_conventions_cmd.py +0 -0
  407. {roam_code-12.12 → roam_code-12.12.2}/tests/test_coverage_gaps_cmd.py +0 -0
  408. {roam_code-12.12 → roam_code-12.12.2}/tests/test_coverage_ingestion.py +0 -0
  409. {roam_code-12.12 → roam_code-12.12.2}/tests/test_critique.py +0 -0
  410. {roam_code-12.12 → roam_code-12.12.2}/tests/test_cut.py +0 -0
  411. {roam_code-12.12 → roam_code-12.12.2}/tests/test_dark_matter.py +0 -0
  412. {roam_code-12.12 → roam_code-12.12.2}/tests/test_dark_matter_helpers.py +0 -0
  413. {roam_code-12.12 → roam_code-12.12.2}/tests/test_dashboard.py +0 -0
  414. {roam_code-12.12 → roam_code-12.12.2}/tests/test_dataflow_dead.py +0 -0
  415. {roam_code-12.12 → roam_code-12.12.2}/tests/test_dead_aging.py +0 -0
  416. {roam_code-12.12 → roam_code-12.12.2}/tests/test_defer_loading.py +0 -0
  417. {roam_code-12.12 → roam_code-12.12.2}/tests/test_demo_gif_asset.py +0 -0
  418. {roam_code-12.12 → roam_code-12.12.2}/tests/test_describe.py +0 -0
  419. {roam_code-12.12 → roam_code-12.12.2}/tests/test_detail_flag_hints.py +0 -0
  420. {roam_code-12.12 → roam_code-12.12.2}/tests/test_detector_precision.py +0 -0
  421. {roam_code-12.12 → roam_code-12.12.2}/tests/test_deterministic_output.py +0 -0
  422. {roam_code-12.12 → roam_code-12.12.2}/tests/test_dev_profile.py +0 -0
  423. {roam_code-12.12 → roam_code-12.12.2}/tests/test_difficulty_scoring.py +0 -0
  424. {roam_code-12.12 → roam_code-12.12.2}/tests/test_doc_staleness.py +0 -0
  425. {roam_code-12.12 → roam_code-12.12.2}/tests/test_docker_assets.py +0 -0
  426. {roam_code-12.12 → roam_code-12.12.2}/tests/test_docs_coverage.py +0 -0
  427. {roam_code-12.12 → roam_code-12.12.2}/tests/test_docs_site_quality.py +0 -0
  428. {roam_code-12.12 → roam_code-12.12.2}/tests/test_doctor.py +0 -0
  429. {roam_code-12.12 → roam_code-12.12.2}/tests/test_drift.py +0 -0
  430. {roam_code-12.12 → roam_code-12.12.2}/tests/test_drift_by_team.py +0 -0
  431. {roam_code-12.12 → roam_code-12.12.2}/tests/test_duplicates.py +0 -0
  432. {roam_code-12.12 → roam_code-12.12.2}/tests/test_effects.py +0 -0
  433. {roam_code-12.12 → roam_code-12.12.2}/tests/test_effects_propagation.py +0 -0
  434. {roam_code-12.12 → roam_code-12.12.2}/tests/test_endpoints.py +0 -0
  435. {roam_code-12.12 → roam_code-12.12.2}/tests/test_entry_points_cmd.py +0 -0
  436. {roam_code-12.12 → roam_code-12.12.2}/tests/test_eval_retrieve.py +0 -0
  437. {roam_code-12.12 → roam_code-12.12.2}/tests/test_except_pass_narrow.py +0 -0
  438. {roam_code-12.12 → roam_code-12.12.2}/tests/test_exclude_patterns.py +0 -0
  439. {roam_code-12.12 → roam_code-12.12.2}/tests/test_exit_codes.py +0 -0
  440. {roam_code-12.12 → roam_code-12.12.2}/tests/test_extractor_grammar_drift.py +0 -0
  441. {roam_code-12.12 → roam_code-12.12.2}/tests/test_fallback_contracts.py +0 -0
  442. {roam_code-12.12 → roam_code-12.12.2}/tests/test_file_roles.py +0 -0
  443. {roam_code-12.12 → roam_code-12.12.2}/tests/test_fingerprint.py +0 -0
  444. {roam_code-12.12 → roam_code-12.12.2}/tests/test_fixes.py +0 -0
  445. {roam_code-12.12 → roam_code-12.12.2}/tests/test_flag_dead.py +0 -0
  446. {roam_code-12.12 → roam_code-12.12.2}/tests/test_fleet.py +0 -0
  447. {roam_code-12.12 → roam_code-12.12.2}/tests/test_fn_coupling.py +0 -0
  448. {roam_code-12.12 → roam_code-12.12.2}/tests/test_forecast.py +0 -0
  449. {roam_code-12.12 → roam_code-12.12.2}/tests/test_formatters.py +0 -0
  450. {roam_code-12.12 → roam_code-12.12.2}/tests/test_foxpro.py +0 -0
  451. {roam_code-12.12 → roam_code-12.12.2}/tests/test_framework_detection.py +0 -0
  452. {roam_code-12.12 → roam_code-12.12.2}/tests/test_gate_presets.py +0 -0
  453. {roam_code-12.12 → roam_code-12.12.2}/tests/test_git_utils.py +0 -0
  454. {roam_code-12.12 → roam_code-12.12.2}/tests/test_guard.py +0 -0
  455. {roam_code-12.12 → roam_code-12.12.2}/tests/test_health_gate.py +0 -0
  456. {roam_code-12.12 → roam_code-12.12.2}/tests/test_hooks.py +0 -0
  457. {roam_code-12.12 → roam_code-12.12.2}/tests/test_hotspots.py +0 -0
  458. {roam_code-12.12 → roam_code-12.12.2}/tests/test_hover.py +0 -0
  459. {roam_code-12.12 → roam_code-12.12.2}/tests/test_index.py +0 -0
  460. {roam_code-12.12 → roam_code-12.12.2}/tests/test_index_bundle.py +0 -0
  461. {roam_code-12.12 → roam_code-12.12.2}/tests/test_init_cmd.py +0 -0
  462. {roam_code-12.12 → roam_code-12.12.2}/tests/test_install_check.py +0 -0
  463. {roam_code-12.12 → roam_code-12.12.2}/tests/test_intent.py +0 -0
  464. {roam_code-12.12 → roam_code-12.12.2}/tests/test_invariants.py +0 -0
  465. {roam_code-12.12 → roam_code-12.12.2}/tests/test_json_contracts.py +0 -0
  466. {roam_code-12.12 → roam_code-12.12.2}/tests/test_json_error_envelope.py +0 -0
  467. {roam_code-12.12 → roam_code-12.12.2}/tests/test_kotlin_swift_extractors.py +0 -0
  468. {roam_code-12.12 → roam_code-12.12.2}/tests/test_language_corpus.py +0 -0
  469. {roam_code-12.12 → roam_code-12.12.2}/tests/test_languages.py +0 -0
  470. {roam_code-12.12 → roam_code-12.12.2}/tests/test_library_api.py +0 -0
  471. {roam_code-12.12 → roam_code-12.12.2}/tests/test_math.py +0 -0
  472. {roam_code-12.12 → roam_code-12.12.2}/tests/test_math_tips.py +0 -0
  473. {roam_code-12.12 → roam_code-12.12.2}/tests/test_mcp_extras.py +0 -0
  474. {roam_code-12.12 → roam_code-12.12.2}/tests/test_mcp_server.py +0 -0
  475. {roam_code-12.12 → roam_code-12.12.2}/tests/test_mcp_setup.py +0 -0
  476. {roam_code-12.12 → roam_code-12.12.2}/tests/test_mermaid.py +0 -0
  477. {roam_code-12.12 → roam_code-12.12.2}/tests/test_metrics_cmd.py +0 -0
  478. {roam_code-12.12 → roam_code-12.12.2}/tests/test_migration_safety.py +0 -0
  479. {roam_code-12.12 → roam_code-12.12.2}/tests/test_minimap.py +0 -0
  480. {roam_code-12.12 → roam_code-12.12.2}/tests/test_missing_index.py +0 -0
  481. {roam_code-12.12 → roam_code-12.12.2}/tests/test_mutate.py +0 -0
  482. {roam_code-12.12 → roam_code-12.12.2}/tests/test_n1.py +0 -0
  483. {roam_code-12.12 → roam_code-12.12.2}/tests/test_next_steps.py +0 -0
  484. {roam_code-12.12 → roam_code-12.12.2}/tests/test_onboard.py +0 -0
  485. {roam_code-12.12 → roam_code-12.12.2}/tests/test_oracle.py +0 -0
  486. {roam_code-12.12 → roam_code-12.12.2}/tests/test_orchestrate.py +0 -0
  487. {roam_code-12.12 → roam_code-12.12.2}/tests/test_orphan_routes.py +0 -0
  488. {roam_code-12.12 → roam_code-12.12.2}/tests/test_oss_bench_harness.py +0 -0
  489. {roam_code-12.12 → roam_code-12.12.2}/tests/test_over_fetch.py +0 -0
  490. {roam_code-12.12 → roam_code-12.12.2}/tests/test_pagerank_truncation.py +0 -0
  491. {roam_code-12.12 → roam_code-12.12.2}/tests/test_partition.py +0 -0
  492. {roam_code-12.12 → roam_code-12.12.2}/tests/test_path_coverage.py +0 -0
  493. {roam_code-12.12 → roam_code-12.12.2}/tests/test_patterns_cmd.py +0 -0
  494. {roam_code-12.12 → roam_code-12.12.2}/tests/test_performance.py +0 -0
  495. {roam_code-12.12 → roam_code-12.12.2}/tests/test_personalized_pagerank.py +0 -0
  496. {roam_code-12.12 → roam_code-12.12.2}/tests/test_plan.py +0 -0
  497. {roam_code-12.12 → roam_code-12.12.2}/tests/test_plugin_discovery.py +0 -0
  498. {roam_code-12.12 → roam_code-12.12.2}/tests/test_pr_comment_script.py +0 -0
  499. {roam_code-12.12 → roam_code-12.12.2}/tests/test_pr_diff.py +0 -0
  500. {roam_code-12.12 → roam_code-12.12.2}/tests/test_pr_risk_author.py +0 -0
  501. {roam_code-12.12 → roam_code-12.12.2}/tests/test_progress.py +0 -0
  502. {roam_code-12.12 → roam_code-12.12.2}/tests/test_progressive_disclosure.py +0 -0
  503. {roam_code-12.12 → roam_code-12.12.2}/tests/test_properties.py +0 -0
  504. {roam_code-12.12 → roam_code-12.12.2}/tests/test_pytest_fixtures.py +0 -0
  505. {roam_code-12.12 → roam_code-12.12.2}/tests/test_python_extractor_v2.py +0 -0
  506. {roam_code-12.12 → roam_code-12.12.2}/tests/test_python_idioms_e2e.py +0 -0
  507. {roam_code-12.12 → roam_code-12.12.2}/tests/test_python_pivot.py +0 -0
  508. {roam_code-12.12 → roam_code-12.12.2}/tests/test_readme_surface_consistency.py +0 -0
  509. {roam_code-12.12 → roam_code-12.12.2}/tests/test_realworld_feedback.py +0 -0
  510. {roam_code-12.12 → roam_code-12.12.2}/tests/test_refactoring_intelligence.py +0 -0
  511. {roam_code-12.12 → roam_code-12.12.2}/tests/test_registry_dispatch.py +0 -0
  512. {roam_code-12.12 → roam_code-12.12.2}/tests/test_relate.py +0 -0
  513. {roam_code-12.12 → roam_code-12.12.2}/tests/test_report.py +0 -0
  514. {roam_code-12.12 → roam_code-12.12.2}/tests/test_reset_clean.py +0 -0
  515. {roam_code-12.12 → roam_code-12.12.2}/tests/test_resolve.py +0 -0
  516. {roam_code-12.12 → roam_code-12.12.2}/tests/test_retrieve.py +0 -0
  517. {roam_code-12.12 → roam_code-12.12.2}/tests/test_retrieve_cross_repo.py +0 -0
  518. {roam_code-12.12 → roam_code-12.12.2}/tests/test_retrieve_seeds.py +0 -0
  519. {roam_code-12.12 → roam_code-12.12.2}/tests/test_risk.py +0 -0
  520. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ruby.py +0 -0
  521. {roam_code-12.12 → roam_code-12.12.2}/tests/test_rule_profiles.py +0 -0
  522. {roam_code-12.12 → roam_code-12.12.2}/tests/test_rules.py +0 -0
  523. {roam_code-12.12 → roam_code-12.12.2}/tests/test_rules_ast_match.py +0 -0
  524. {roam_code-12.12 → roam_code-12.12.2}/tests/test_rules_community_pack.py +0 -0
  525. {roam_code-12.12 → roam_code-12.12.2}/tests/test_rules_dataflow.py +0 -0
  526. {roam_code-12.12 → roam_code-12.12.2}/tests/test_rules_symbol_requirements.py +0 -0
  527. {roam_code-12.12 → roam_code-12.12.2}/tests/test_runtime.py +0 -0
  528. {roam_code-12.12 → roam_code-12.12.2}/tests/test_runtime_score.py +0 -0
  529. {roam_code-12.12 → roam_code-12.12.2}/tests/test_salesforce.py +0 -0
  530. {roam_code-12.12 → roam_code-12.12.2}/tests/test_sarif_flag.py +0 -0
  531. {roam_code-12.12 → roam_code-12.12.2}/tests/test_sbom.py +0 -0
  532. {roam_code-12.12 → roam_code-12.12.2}/tests/test_scala.py +0 -0
  533. {roam_code-12.12 → roam_code-12.12.2}/tests/test_schema_versioning.py +0 -0
  534. {roam_code-12.12 → roam_code-12.12.2}/tests/test_search_explain.py +0 -0
  535. {roam_code-12.12 → roam_code-12.12.2}/tests/test_secrets.py +0 -0
  536. {roam_code-12.12 → roam_code-12.12.2}/tests/test_secrets_v2.py +0 -0
  537. {roam_code-12.12 → roam_code-12.12.2}/tests/test_semantic_diff.py +0 -0
  538. {roam_code-12.12 → roam_code-12.12.2}/tests/test_semantic_onnx.py +0 -0
  539. {roam_code-12.12 → roam_code-12.12.2}/tests/test_semantic_search.py +0 -0
  540. {roam_code-12.12 → roam_code-12.12.2}/tests/test_simulate.py +0 -0
  541. {roam_code-12.12 → roam_code-12.12.2}/tests/test_simulate_departure.py +0 -0
  542. {roam_code-12.12 → roam_code-12.12.2}/tests/test_sketch.py +0 -0
  543. {roam_code-12.12 → roam_code-12.12.2}/tests/test_smells.py +0 -0
  544. {roam_code-12.12 → roam_code-12.12.2}/tests/test_smoke.py +0 -0
  545. {roam_code-12.12 → roam_code-12.12.2}/tests/test_sna_metrics.py +0 -0
  546. {roam_code-12.12 → roam_code-12.12.2}/tests/test_spectral.py +0 -0
  547. {roam_code-12.12 → roam_code-12.12.2}/tests/test_split_cmd.py +0 -0
  548. {roam_code-12.12 → roam_code-12.12.2}/tests/test_sql.py +0 -0
  549. {roam_code-12.12 → roam_code-12.12.2}/tests/test_suggest_reviewers.py +0 -0
  550. {roam_code-12.12 → roam_code-12.12.2}/tests/test_supply_chain.py +0 -0
  551. {roam_code-12.12 → roam_code-12.12.2}/tests/test_surface_counts.py +0 -0
  552. {roam_code-12.12 → roam_code-12.12.2}/tests/test_syntax_check.py +0 -0
  553. {roam_code-12.12 → roam_code-12.12.2}/tests/test_taint.py +0 -0
  554. {roam_code-12.12 → roam_code-12.12.2}/tests/test_taint_analysis.py +0 -0
  555. {roam_code-12.12 → roam_code-12.12.2}/tests/test_taint_classifier.py +0 -0
  556. {roam_code-12.12 → roam_code-12.12.2}/tests/test_taint_intraprocedural.py +0 -0
  557. {roam_code-12.12 → roam_code-12.12.2}/tests/test_test_conventions.py +0 -0
  558. {roam_code-12.12 → roam_code-12.12.2}/tests/test_test_gaps.py +0 -0
  559. {roam_code-12.12 → roam_code-12.12.2}/tests/test_test_scaffold.py +0 -0
  560. {roam_code-12.12 → roam_code-12.12.2}/tests/test_testmap.py +0 -0
  561. {roam_code-12.12 → roam_code-12.12.2}/tests/test_top_flag_consistency.py +0 -0
  562. {roam_code-12.12 → roam_code-12.12.2}/tests/test_tour_cmd.py +0 -0
  563. {roam_code-12.12 → roam_code-12.12.2}/tests/test_trends.py +0 -0
  564. {roam_code-12.12 → roam_code-12.12.2}/tests/test_trends_cohort.py +0 -0
  565. {roam_code-12.12 → roam_code-12.12.2}/tests/test_triage.py +0 -0
  566. {roam_code-12.12 → roam_code-12.12.2}/tests/test_uses_cmd.py +0 -0
  567. {roam_code-12.12 → roam_code-12.12.2}/tests/test_v12_2.py +0 -0
  568. {roam_code-12.12 → roam_code-12.12.2}/tests/test_v6_features.py +0 -0
  569. {roam_code-12.12 → roam_code-12.12.2}/tests/test_v71_features.py +0 -0
  570. {roam_code-12.12 → roam_code-12.12.2}/tests/test_v7_features.py +0 -0
  571. {roam_code-12.12 → roam_code-12.12.2}/tests/test_v82_features.py +0 -0
  572. {roam_code-12.12 → roam_code-12.12.2}/tests/test_verify.py +0 -0
  573. {roam_code-12.12 → roam_code-12.12.2}/tests/test_verify_imports.py +0 -0
  574. {roam_code-12.12 → roam_code-12.12.2}/tests/test_vibe_check.py +0 -0
  575. {roam_code-12.12 → roam_code-12.12.2}/tests/test_visualize.py +0 -0
  576. {roam_code-12.12 → roam_code-12.12.2}/tests/test_vuln.py +0 -0
  577. {roam_code-12.12 → roam_code-12.12.2}/tests/test_vulns_cmd.py +0 -0
  578. {roam_code-12.12 → roam_code-12.12.2}/tests/test_watch.py +0 -0
  579. {roam_code-12.12 → roam_code-12.12.2}/tests/test_why.py +0 -0
  580. {roam_code-12.12 → roam_code-12.12.2}/tests/test_workspace.py +0 -0
  581. {roam_code-12.12 → roam_code-12.12.2}/tests/test_ws_resolve_fixes.py +0 -0
  582. {roam_code-12.12 → roam_code-12.12.2}/tests/test_xlang.py +0 -0
  583. {roam_code-12.12 → roam_code-12.12.2}/tests/test_yaml_hcl.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 12.12
3
+ Version: 12.12.2
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "roam-code"
7
- version = "12.12"
7
+ version = "12.12.2"
8
8
  description = "Instant codebase comprehension for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -103,6 +103,18 @@ dev = [
103
103
  [tool.setuptools.packages.find]
104
104
  where = ["src"]
105
105
 
106
+ [tool.setuptools.package-data]
107
+ # v12.12.1 / 12.12.2 — without these, data files don't ship in the
108
+ # wheel. Pre-12.12.1 PyPI installs silently loaded zero taint rules;
109
+ # v12.12.1 fixed taint + extractors but still missed Jenkinsfile (no
110
+ # extension) and the MCP server card. v12.12.2 bundles every file
111
+ # under templates/ci/ (Jenkinsfile + the YAMLs) and ships the server
112
+ # card alongside the package so ``roam mcp --card`` works post-install.
113
+ "roam.security.taint_rules" = ["*.yaml", "*.yml"]
114
+ "roam.languages.extractors" = ["*.yaml", "*.yml"]
115
+ "roam.templates.ci" = ["*"]
116
+ "roam" = ["mcp-server-card.json"]
117
+
106
118
  [tool.pytest.ini_options]
107
119
  testpaths = ["tests"]
108
120
  addopts = "-q --tb=short"
@@ -16,9 +16,13 @@ import click
16
16
  from roam.ask.classifier import classify
17
17
  from roam.ask.recipes import RECIPES, Recipe, by_name
18
18
  from roam.ask.runner import extract_symbol, fill_followups, run_recipe
19
+ from roam.output.confidence import DEFAULT_CONFIDENCE_THRESHOLD, is_low_confidence
19
20
  from roam.output.formatter import json_envelope, to_json
20
21
 
21
- _CONFIDENCE_THRESHOLD = 0.15
22
+ # Single source of truth for the low-confidence threshold across
23
+ # ranked-output commands. Imported from output.confidence so cmd_ask
24
+ # and any future ranker stay in lockstep.
25
+ _CONFIDENCE_THRESHOLD = DEFAULT_CONFIDENCE_THRESHOLD
22
26
 
23
27
 
24
28
  def _recipe_listing_payload(recipe: Recipe) -> dict:
@@ -236,7 +240,8 @@ def ask(ctx, query, list_recipes, explain, recipe_override):
236
240
 
237
241
  ranked = _rank_recipes(query_text, recipe_override)
238
242
 
239
- if not ranked or ranked[0][1] < _CONFIDENCE_THRESHOLD:
243
+ top_score = ranked[0][1] if ranked else 0.0
244
+ if not ranked or is_low_confidence(top_score, _CONFIDENCE_THRESHOLD):
240
245
  # Low confidence — show top-3 and bail out.
241
246
  _emit_low_confidence(query_text, ranked, json_mode)
242
247
  return
@@ -1364,7 +1364,7 @@ MAP_METADATA: dict[str, dict[str, object]] = {
1364
1364
  "peer": True,
1365
1365
  "graph": "PageRank + Tarjan + Louvain + layers",
1366
1366
  "note": "Graph algorithms (PageRank, SCC, Louvain, Fiedler) on tree-sitter ASTs fused with git history in SQLite. 122 MCP tools, 155 CLI commands. 19 Python idiom detectors (v12.7+).",
1367
- "version_evaluated": "12.10.1",
1367
+ "version_evaluated": "12.12.2",
1368
1368
  "repo_url": "https://github.com/Cranot/roam-code",
1369
1369
  },
1370
1370
  "CKB/CodeMCP": {
@@ -0,0 +1,113 @@
1
+ # Kotlin Language Extractor
2
+ # Extracts symbols, references, and inheritance from Kotlin source code.
3
+ #
4
+ # Tree-sitter query notes:
5
+ # - 'class' is a reserved keyword in query syntax, can't be used as node type
6
+ # - Use (class_declaration (type_identifier) @name) to match all classes/interfaces
7
+ # - Kind resolution happens in query_engine by checking first child type
8
+
9
+ language: kotlin
10
+ extensions: [.kt, .kts]
11
+ grammar_alias: kotlin
12
+ description: Kotlin programming language extractor
13
+
14
+ # -------------------------------------------------------------------------
15
+ # Symbol Extraction
16
+ # -------------------------------------------------------------------------
17
+
18
+ symbols:
19
+ # All class declarations (classes, interfaces, data classes, enums, sealed)
20
+ # Kind is resolved in query_engine by checking first child type
21
+ - query: |
22
+ (class_declaration
23
+ (type_identifier) @name
24
+ ) @def
25
+ kind:
26
+ default: class
27
+ context:
28
+ class_body: class
29
+ def_capture: def
30
+ name_capture: name
31
+
32
+ # Object declarations (singleton)
33
+ - query: |
34
+ (object_declaration
35
+ (type_identifier) @name
36
+ ) @def
37
+ kind:
38
+ default: object
39
+ context:
40
+ class_body: object
41
+ def_capture: def
42
+ name_capture: name
43
+
44
+ # Functions (top-level and methods)
45
+ - query: |
46
+ (function_declaration
47
+ (simple_identifier) @name
48
+ ) @def
49
+ kind:
50
+ default: function
51
+ context:
52
+ class_body: method
53
+ def_capture: def
54
+ name_capture: name
55
+
56
+ # Properties with variable_declaration (val name: Type)
57
+ - query: |
58
+ (property_declaration
59
+ (variable_declaration
60
+ (simple_identifier) @name)
61
+ ) @def
62
+ kind:
63
+ default: property
64
+ context:
65
+ class_body: field
66
+ def_capture: def
67
+ name_capture: name
68
+
69
+ # Type aliases
70
+ - query: |
71
+ (type_alias
72
+ (type_identifier) @name
73
+ ) @def
74
+ kind: typealias
75
+ def_capture: def
76
+ name_capture: name
77
+
78
+ # -------------------------------------------------------------------------
79
+ # Inheritance Extraction
80
+ # -------------------------------------------------------------------------
81
+
82
+ inheritance:
83
+ extends:
84
+ # class Child : Parent(args) - constructor invocation style
85
+ - query: |
86
+ (class_declaration
87
+ (type_identifier) @child
88
+ (delegation_specifier
89
+ (constructor_invocation
90
+ (user_type
91
+ (type_identifier) @parent)))
92
+ ) @inherit
93
+ relationship: extends
94
+ child_capture: child
95
+ parent_capture: parent
96
+
97
+ # object Child : Parent - object inheritance
98
+ - query: |
99
+ (object_declaration
100
+ (type_identifier) @child
101
+ (delegation_specifier
102
+ (user_type
103
+ (type_identifier) @parent))
104
+ ) @inherit
105
+ relationship: extends
106
+ child_capture: child
107
+ parent_capture: parent
108
+
109
+ # -------------------------------------------------------------------------
110
+ # References (disabled for now)
111
+ # -------------------------------------------------------------------------
112
+
113
+ references: {}
@@ -0,0 +1,156 @@
1
+ {
2
+ "$schema": "https://schemas.modelcontextprotocol.io/server-card/v1",
3
+ "name": "roam-code",
4
+ "display_name": "roam — instant codebase intelligence",
5
+ "version": "12.12.2",
6
+ "description": "Architectural sight for AI agents before they edit. Pre-indexes symbols, call graphs, dependencies, architecture layers, and git history into a local SQLite DB. 122 MCP tools, 10 resources, 5 prompts, 27 languages. 100% local, zero API keys.",
7
+ "vendor": {
8
+ "name": "Cranot",
9
+ "url": "https://github.com/Cranot"
10
+ },
11
+ "homepage": "https://cranot.github.io/roam-code/",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/Cranot/roam-code"
15
+ },
16
+ "documentation": "https://cranot.github.io/roam-code/getting-started.html",
17
+ "license": "MIT",
18
+ "spdx_license_id": "MIT",
19
+ "categories": [
20
+ "code-intelligence",
21
+ "static-analysis",
22
+ "code-graph",
23
+ "ai-coding",
24
+ "supply-chain",
25
+ "security",
26
+ "attestation"
27
+ ],
28
+ "tags": [
29
+ "code-intelligence",
30
+ "tree-sitter",
31
+ "mcp-server",
32
+ "code-graph",
33
+ "graph-analysis",
34
+ "code-quality",
35
+ "openvex",
36
+ "in-toto",
37
+ "cosign",
38
+ "code-rag",
39
+ "agent-tools"
40
+ ],
41
+ "transport": {
42
+ "primary": "stdio",
43
+ "supported": ["stdio", "sse", "streamable-http"],
44
+ "default_command": ["roam", "mcp"]
45
+ },
46
+ "install": {
47
+ "pypi": "roam-code",
48
+ "command": "pip install \"roam-code[mcp]\"",
49
+ "min_python": "3.9",
50
+ "post_install": "roam init"
51
+ },
52
+ "capabilities": {
53
+ "tools": {
54
+ "total": 120,
55
+ "presets": {
56
+ "core": 33,
57
+ "review": 50,
58
+ "refactor": 60,
59
+ "debug": 55,
60
+ "architecture": 70,
61
+ "compliance": 14,
62
+ "full": 120
63
+ },
64
+ "tasks_api": {
65
+ "supported": true,
66
+ "spec_version": "2025-11-25",
67
+ "required_tools": [
68
+ "roam_init",
69
+ "roam_reindex",
70
+ "roam_health",
71
+ "roam_understand",
72
+ "roam_simulate"
73
+ ]
74
+ },
75
+ "sampling": true,
76
+ "completions": true,
77
+ "progress": true
78
+ },
79
+ "resources": {
80
+ "total": 10,
81
+ "watched": true
82
+ },
83
+ "prompts": {
84
+ "total": 5
85
+ }
86
+ },
87
+ "languages_supported": [
88
+ "python", "javascript", "typescript", "java", "go", "rust", "c",
89
+ "csharp", "php", "ruby", "kotlin", "swift", "scala", "sql", "foxpro",
90
+ "apex", "aura", "visualforce", "sfxml", "hcl", "yaml", "vue", "tsx",
91
+ "jsx", "html", "css", "objective-c"
92
+ ],
93
+ "compliance_artifacts": {
94
+ "in_toto_v1_predicate": "https://roam-code.dev/CodeGraph/v1",
95
+ "in_toto_v1_aibom_predicate": "https://roam-code.dev/CodeGraph-AIBOM/v1",
96
+ "openvex_compatible": true,
97
+ "openvex_disallowed_labels": ["code_not_reachable"],
98
+ "sbom_formats": ["cyclonedx-1.7", "spdx-2.3"],
99
+ "aibom_extension_version": "0.1",
100
+ "sigstore": {
101
+ "keyless_signing": true,
102
+ "offline_signing": true,
103
+ "verify_command": "roam cga verify <statement>"
104
+ }
105
+ },
106
+ "agent_first_features": {
107
+ "boolean_oracles": [
108
+ "roam_oracle_symbol_exists",
109
+ "roam_oracle_route_exists",
110
+ "roam_oracle_is_test_only",
111
+ "roam_oracle_is_reachable_from_entry",
112
+ "roam_oracle_is_clone_of"
113
+ ],
114
+ "compound_tools": [
115
+ "roam_explore",
116
+ "roam_prepare_change",
117
+ "roam_review_change",
118
+ "roam_diagnose_issue"
119
+ ],
120
+ "intent_classifier": "roam_ask",
121
+ "fleet_planner": "roam_fleet_plan",
122
+ "patch_verifier": "roam_critique",
123
+ "graph_aware_retrieval": "roam_retrieve",
124
+ "llm_augmented_taint": "roam_taint_classify"
125
+ },
126
+ "operational": {
127
+ "telemetry": "none",
128
+ "network_required": false,
129
+ "api_keys_required": false,
130
+ "container_required": false,
131
+ "average_index_time_seconds_per_kloc": 0.6,
132
+ "typical_db_size_per_kloc_kb": 80
133
+ },
134
+ "compatibility": {
135
+ "claude_code": "tested",
136
+ "claude_desktop": "tested",
137
+ "cursor": "tested",
138
+ "windsurf": "tested",
139
+ "vscode": "tested",
140
+ "gemini_cli": "tested",
141
+ "codex_cli": "tested",
142
+ "continue_dev": "via mcp-setup snippet"
143
+ },
144
+ "discovery": {
145
+ "registries": [
146
+ "pypi",
147
+ "github",
148
+ "modelcontextprotocol.io",
149
+ "pulsemcp.com",
150
+ "smithery.ai",
151
+ "mcp.so"
152
+ ],
153
+ "card_url": "https://cranot.github.io/roam-code/.well-known/mcp-server-card.json"
154
+ },
155
+ "schema_version": 1
156
+ }
@@ -5873,31 +5873,35 @@ def mcp_cmd(transport, host, port, no_auto_index, list_tools, list_tools_json, c
5873
5873
 
5874
5874
  if card:
5875
5875
  # MCP Server Card per blog.modelcontextprotocol.io/posts/2026-mcp-roadmap.
5876
- # Loaded from the canonical static file so the CLI and the hosted
5877
- # docs site agree byte-for-byte. First-mover discovery for the
5878
- # MCP ecosystem registries (PulseMCP, mcp.so, Smithery, etc.).
5876
+ # First-mover discovery for the MCP ecosystem registries
5877
+ # (PulseMCP, mcp.so, Smithery, etc.). v12.12.2: the card is
5878
+ # now bundled inside the installed package (src/roam/mcp-server-card.json)
5879
+ # so post-PyPI ``roam mcp --card`` works without a source
5880
+ # checkout. The docs/site/.well-known/ copy stays canonical for
5881
+ # the hosted /well-known URL — they are kept in sync via the
5882
+ # release process.
5879
5883
  from pathlib import Path as _Path
5880
5884
 
5881
- card_path = (
5885
+ bundled = _Path(__file__).resolve().parent / "mcp-server-card.json"
5886
+ if bundled.is_file():
5887
+ click.echo(bundled.read_text(encoding="utf-8").rstrip())
5888
+ return
5889
+
5890
+ # Source-checkout fallback so dev runs against an unbuilt tree
5891
+ # still find the docs-site copy.
5892
+ for candidate in (
5882
5893
  _Path(__file__).resolve().parents[1].parent.parent
5883
5894
  / "docs"
5884
5895
  / "site"
5885
5896
  / ".well-known"
5886
- / "mcp-server-card.json"
5887
- )
5888
- if not card_path.is_file():
5889
- # Fallback: walk up from the current module file two more levels.
5890
- card_path = (
5891
- _Path(__file__).resolve().parent.parent.parent
5892
- / "docs"
5893
- / "site"
5894
- / ".well-known"
5895
- / "mcp-server-card.json"
5896
- )
5897
- if not card_path.is_file():
5898
- click.echo("error: server card file not found", err=True)
5899
- raise SystemExit(1)
5900
- click.echo(card_path.read_text(encoding="utf-8").rstrip())
5897
+ / "mcp-server-card.json",
5898
+ _Path(__file__).resolve().parent.parent.parent / "docs" / "site" / ".well-known" / "mcp-server-card.json",
5899
+ ):
5900
+ if candidate.is_file():
5901
+ click.echo(candidate.read_text(encoding="utf-8").rstrip())
5902
+ return
5903
+ click.echo("error: server card file not found", err=True)
5904
+ raise SystemExit(1)
5901
5905
  return
5902
5906
 
5903
5907
  if mcp is None:
@@ -0,0 +1,28 @@
1
+ id: js-api-error-leak
2
+ description: Raw backend error.message returned to the client leaks stack traces, ORM details, and SQL fragments (CWE-209 Information Exposure Through an Error Message). Use a sanitised error wrapper.
3
+ severity: warning
4
+ cwe: CWE-209
5
+ languages:
6
+ - javascript
7
+ - typescript
8
+ sources:
9
+ - error.message
10
+ - err.message
11
+ - exception.message
12
+ - error.stack
13
+ - err.stack
14
+ - error.detail
15
+ sinks:
16
+ - res.send
17
+ - res.json
18
+ - res.write
19
+ - response.json
20
+ - response.send
21
+ - throw
22
+ - reply.send
23
+ - context.json
24
+ sanitizers:
25
+ - sanitizeError
26
+ - publicError
27
+ - userFacingError
28
+ - toJSON
@@ -0,0 +1,28 @@
1
+ id: java-fileupload-path-traversal
2
+ description: Multipart upload filename (FileItem / Part / FileUpload) into Files / FileOutputStream / Paths.get without basename or allowlist check. CodeQL 2.24 ships equivalent FileItem and javax/jakarta servlet Part models.
3
+ severity: error
4
+ cwe: CWE-22
5
+ languages:
6
+ - java
7
+ sources:
8
+ - getName
9
+ - getOriginalFilename
10
+ - getSubmittedFileName
11
+ - FileItem.getName
12
+ - Part.getSubmittedFileName
13
+ sinks:
14
+ - Files.write
15
+ - Files.createFile
16
+ - Files.copy
17
+ - Files.move
18
+ - Files.newOutputStream
19
+ - Paths.get
20
+ - File
21
+ - FileOutputStream
22
+ - FileWriter
23
+ sanitizers:
24
+ - Paths.normalize
25
+ - Path.normalize
26
+ - isUnderRoot
27
+ - sanitizeFilename
28
+ - FilenameUtils.getName
@@ -0,0 +1,23 @@
1
+ id: js-insecure-jwt-decode
2
+ description: JWT decoded without signature verification (CWE-347). atob(token.split('.')[1]) reads the payload but does NOT validate the signature; use a verifying library (jsonwebtoken.verify, jose.jwtVerify) instead.
3
+ severity: error
4
+ cwe: CWE-347
5
+ languages:
6
+ - javascript
7
+ - typescript
8
+ sources:
9
+ - req.headers.authorization
10
+ - req.cookies
11
+ - localStorage.getItem
12
+ - sessionStorage.getItem
13
+ - document.cookie
14
+ sinks:
15
+ - atob
16
+ - jwt_decode
17
+ - jwtDecode
18
+ - jwt-decode
19
+ - JSON.parse
20
+ sanitizers:
21
+ - jsonwebtoken.verify
22
+ - jose.jwtVerify
23
+ - jwks-rsa
@@ -0,0 +1,25 @@
1
+ id: js-localstorage-secrets
2
+ description: Sensitive data (tokens, credentials, JWTs) stored in localStorage where an XSS gives an attacker exfil. Prefer httpOnly cookies or sessionStorage with care (CWE-922 Insecure Storage of Sensitive Information).
3
+ severity: warning
4
+ cwe: CWE-922
5
+ languages:
6
+ - javascript
7
+ - typescript
8
+ sources:
9
+ - access_token
10
+ - refresh_token
11
+ - id_token
12
+ - jwt
13
+ - apiKey
14
+ - api_key
15
+ - password
16
+ - secret
17
+ - credentials
18
+ - sessionToken
19
+ - bearer
20
+ sinks:
21
+ - localStorage.setItem
22
+ - sessionStorage.setItem
23
+ sanitizers:
24
+ - obfuscate
25
+ - encryptForStorage
@@ -0,0 +1,30 @@
1
+ id: js-prototype-pollution
2
+ description: Untrusted input merged into existing objects (CWE-1321 Improperly Controlled Modification of Object Prototype Attributes).
3
+ severity: error
4
+ cwe: CWE-1321
5
+ languages:
6
+ - javascript
7
+ - typescript
8
+ sources:
9
+ - req.query
10
+ - req.body
11
+ - req.params
12
+ - location.search
13
+ - URLSearchParams
14
+ - JSON.parse
15
+ sinks:
16
+ - Object.assign
17
+ - lodash.merge
18
+ - lodash.mergeWith
19
+ - lodash.set
20
+ - lodash.setWith
21
+ - _.merge
22
+ - _.mergeWith
23
+ - _.set
24
+ - _.setWith
25
+ - $.extend
26
+ - jQuery.extend
27
+ sanitizers:
28
+ - sanitizeObject
29
+ - reject_proto_keys
30
+ - hasOwnProperty
@@ -0,0 +1,21 @@
1
+ id: js-ssrf
2
+ description: Untrusted URL flowing into outbound HTTP request
3
+ severity: warning
4
+ cwe: CWE-918
5
+ languages:
6
+ - javascript
7
+ - typescript
8
+ sources:
9
+ - req.query
10
+ - req.body
11
+ - req.params
12
+ sinks:
13
+ - fetch
14
+ - axios.get
15
+ - axios.post
16
+ - http.get
17
+ - https.get
18
+ - request.get
19
+ sanitizers:
20
+ - validateUrl
21
+ - urlAllowList
@@ -0,0 +1,23 @@
1
+ id: js-xss
2
+ description: Untrusted input flowing into the DOM without escaping
3
+ severity: error
4
+ cwe: CWE-79
5
+ languages:
6
+ - javascript
7
+ - typescript
8
+ sources:
9
+ - req.query
10
+ - req.body
11
+ - req.params
12
+ - location.search
13
+ - URLSearchParams
14
+ sinks:
15
+ - innerHTML
16
+ - outerHTML
17
+ - document.write
18
+ - eval
19
+ - dangerouslySetInnerHTML
20
+ sanitizers:
21
+ - DOMPurify.sanitize
22
+ - escape
23
+ - textContent
@@ -0,0 +1,25 @@
1
+ id: python-command-injection
2
+ description: Untrusted user input flowing into shell-style command execution
3
+ severity: error
4
+ cwe: CWE-78
5
+ languages:
6
+ - python
7
+ sources:
8
+ - request.args
9
+ - request.form
10
+ - request.GET
11
+ - request.POST
12
+ - request.json
13
+ - input
14
+ - sys.stdin
15
+ sinks:
16
+ - subprocess.run
17
+ - subprocess.call
18
+ - subprocess.Popen
19
+ - os.system
20
+ - os.popen
21
+ - eval
22
+ - exec
23
+ sanitizers:
24
+ - shlex.quote
25
+ - shlex.split
@@ -0,0 +1,34 @@
1
+ id: python-deserialization
2
+ description: Untrusted input deserialized through pickle/yaml/marshal, enabling RCE
3
+ severity: error
4
+ cwe: CWE-502
5
+ languages:
6
+ - python
7
+ sources:
8
+ - request.args
9
+ - request.form
10
+ - request.GET
11
+ - request.POST
12
+ - request.json
13
+ - request.body
14
+ - request.data
15
+ - request.cookies
16
+ - request.files
17
+ - input
18
+ - sys.stdin
19
+ sinks:
20
+ - pickle.loads
21
+ - pickle.load
22
+ - cPickle.loads
23
+ - cPickle.load
24
+ - marshal.loads
25
+ - marshal.load
26
+ - yaml.load
27
+ - yaml.full_load
28
+ - yaml.unsafe_load
29
+ - shelve.open
30
+ - dill.loads
31
+ - dill.load
32
+ sanitizers:
33
+ - yaml.safe_load
34
+ - json.loads
@@ -0,0 +1,22 @@
1
+ id: python-path-traversal
2
+ description: Untrusted input flowing into filesystem operations without sanitisation
3
+ severity: error
4
+ cwe: CWE-22
5
+ languages:
6
+ - python
7
+ sources:
8
+ - request.args
9
+ - request.form
10
+ - request.files
11
+ - input
12
+ sinks:
13
+ - open
14
+ - os.path.join
15
+ - shutil.copy
16
+ - shutil.move
17
+ - pathlib.Path
18
+ sanitizers:
19
+ - secure_filename
20
+ - werkzeug.utils.secure_filename
21
+ - os.path.normpath
22
+ - os.path.abspath