roam-code 9.0.0__tar.gz → 9.1.0__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 (167) hide show
  1. {roam_code-9.0.0/src/roam_code.egg-info → roam_code-9.1.0}/PKG-INFO +20 -13
  2. {roam_code-9.0.0 → roam_code-9.1.0}/README.md +18 -11
  3. {roam_code-9.0.0 → roam_code-9.1.0}/pyproject.toml +2 -2
  4. {roam_code-9.0.0 → roam_code-9.1.0/src/roam_code.egg-info}/PKG-INFO +20 -13
  5. {roam_code-9.0.0 → roam_code-9.1.0}/LICENSE +0 -0
  6. {roam_code-9.0.0 → roam_code-9.1.0}/setup.cfg +0 -0
  7. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/__init__.py +0 -0
  8. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/__main__.py +0 -0
  9. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/bridges/__init__.py +0 -0
  10. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/bridges/base.py +0 -0
  11. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/bridges/bridge_protobuf.py +0 -0
  12. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/bridges/bridge_salesforce.py +0 -0
  13. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/bridges/registry.py +0 -0
  14. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/catalog/__init__.py +0 -0
  15. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/catalog/detectors.py +0 -0
  16. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/catalog/tasks.py +0 -0
  17. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/cli.py +0 -0
  18. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/__init__.py +0 -0
  19. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/changed_files.py +0 -0
  20. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_affected_tests.py +0 -0
  21. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_alerts.py +0 -0
  22. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_breaking.py +0 -0
  23. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_bus_factor.py +0 -0
  24. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_clusters.py +0 -0
  25. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_complexity.py +0 -0
  26. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_context.py +0 -0
  27. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_conventions.py +0 -0
  28. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_coupling.py +0 -0
  29. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_coverage_gaps.py +0 -0
  30. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_dead.py +0 -0
  31. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_debt.py +0 -0
  32. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_deps.py +0 -0
  33. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_describe.py +0 -0
  34. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_diagnose.py +0 -0
  35. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_diff.py +0 -0
  36. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_digest.py +0 -0
  37. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_doc_staleness.py +0 -0
  38. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_entry_points.py +0 -0
  39. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_fan.py +0 -0
  40. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_file.py +0 -0
  41. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_fitness.py +0 -0
  42. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_fn_coupling.py +0 -0
  43. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_grep.py +0 -0
  44. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_health.py +0 -0
  45. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_impact.py +0 -0
  46. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_index.py +0 -0
  47. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_init.py +0 -0
  48. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_layers.py +0 -0
  49. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_map.py +0 -0
  50. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_math.py +0 -0
  51. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_module.py +0 -0
  52. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_owner.py +0 -0
  53. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_patterns.py +0 -0
  54. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_pr_risk.py +0 -0
  55. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_preflight.py +0 -0
  56. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_report.py +0 -0
  57. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_risk.py +0 -0
  58. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_safe_delete.py +0 -0
  59. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_safe_zones.py +0 -0
  60. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_search.py +0 -0
  61. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_sketch.py +0 -0
  62. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_snapshot.py +0 -0
  63. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_split.py +0 -0
  64. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_symbol.py +0 -0
  65. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_testmap.py +0 -0
  66. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_tour.py +0 -0
  67. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_trace.py +0 -0
  68. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_trend.py +0 -0
  69. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_understand.py +0 -0
  70. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_uses.py +0 -0
  71. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_visualize.py +0 -0
  72. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_weather.py +0 -0
  73. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_why.py +0 -0
  74. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_ws.py +0 -0
  75. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/cmd_xlang.py +0 -0
  76. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/context_helpers.py +0 -0
  77. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/gate_presets.py +0 -0
  78. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/graph_helpers.py +0 -0
  79. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/metrics_history.py +0 -0
  80. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/commands/resolve.py +0 -0
  81. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/db/__init__.py +0 -0
  82. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/db/connection.py +0 -0
  83. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/db/queries.py +0 -0
  84. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/db/schema.py +0 -0
  85. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/__init__.py +0 -0
  86. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/anomaly.py +0 -0
  87. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/builder.py +0 -0
  88. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/clusters.py +0 -0
  89. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/cycles.py +0 -0
  90. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/layers.py +0 -0
  91. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/pagerank.py +0 -0
  92. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/graph/pathfinding.py +0 -0
  93. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/__init__.py +0 -0
  94. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/complexity.py +0 -0
  95. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/discovery.py +0 -0
  96. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/file_roles.py +0 -0
  97. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/git_stats.py +0 -0
  98. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/incremental.py +0 -0
  99. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/indexer.py +0 -0
  100. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/parser.py +0 -0
  101. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/relations.py +0 -0
  102. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/symbols.py +0 -0
  103. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/index/test_conventions.py +0 -0
  104. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/__init__.py +0 -0
  105. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/apex_lang.py +0 -0
  106. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/aura_lang.py +0 -0
  107. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/base.py +0 -0
  108. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/c_lang.py +0 -0
  109. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/csharp_lang.py +0 -0
  110. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/foxpro_lang.py +0 -0
  111. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/generic_lang.py +0 -0
  112. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/go_lang.py +0 -0
  113. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/java_lang.py +0 -0
  114. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/javascript_lang.py +0 -0
  115. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/php_lang.py +0 -0
  116. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/python_lang.py +0 -0
  117. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/registry.py +0 -0
  118. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/rust_lang.py +0 -0
  119. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/sfxml_lang.py +0 -0
  120. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/typescript_lang.py +0 -0
  121. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/languages/visualforce_lang.py +0 -0
  122. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/mcp_server.py +0 -0
  123. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/output/__init__.py +0 -0
  124. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/output/formatter.py +0 -0
  125. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/output/sarif.py +0 -0
  126. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/workspace/__init__.py +0 -0
  127. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/workspace/aggregator.py +0 -0
  128. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/workspace/api_scanner.py +0 -0
  129. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/workspace/config.py +0 -0
  130. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam/workspace/db.py +0 -0
  131. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam_code.egg-info/SOURCES.txt +0 -0
  132. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam_code.egg-info/dependency_links.txt +0 -0
  133. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam_code.egg-info/entry_points.txt +0 -0
  134. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam_code.egg-info/requires.txt +0 -0
  135. {roam_code-9.0.0 → roam_code-9.1.0}/src/roam_code.egg-info/top_level.txt +0 -0
  136. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_anomaly.py +0 -0
  137. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_basic.py +0 -0
  138. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_bridges.py +0 -0
  139. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_commands_architecture.py +0 -0
  140. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_commands_exploration.py +0 -0
  141. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_commands_health.py +0 -0
  142. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_commands_refactoring.py +0 -0
  143. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_commands_workflow.py +0 -0
  144. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_comprehensive.py +0 -0
  145. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_dead_aging.py +0 -0
  146. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_file_roles.py +0 -0
  147. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_fixes.py +0 -0
  148. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_formatters.py +0 -0
  149. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_foxpro.py +0 -0
  150. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_framework_detection.py +0 -0
  151. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_gate_presets.py +0 -0
  152. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_json_contracts.py +0 -0
  153. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_languages.py +0 -0
  154. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_math.py +0 -0
  155. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_performance.py +0 -0
  156. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_pr_risk_author.py +0 -0
  157. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_python_extractor_v2.py +0 -0
  158. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_resolve.py +0 -0
  159. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_salesforce.py +0 -0
  160. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_smoke.py +0 -0
  161. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_test_conventions.py +0 -0
  162. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_v6_features.py +0 -0
  163. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_v71_features.py +0 -0
  164. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_v7_features.py +0 -0
  165. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_v82_features.py +0 -0
  166. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_visualize.py +0 -0
  167. {roam_code-9.0.0 → roam_code-9.1.0}/tests/test_workspace.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 9.0.0
3
+ Version: 9.1.0
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/Cranot/roam-code
8
8
  Project-URL: Repository, https://github.com/Cranot/roam-code
9
9
  Project-URL: Issues, https://github.com/Cranot/roam-code/issues
@@ -37,9 +37,9 @@ Dynamic: license-file
37
37
 
38
38
  # roam
39
39
 
40
- **Roam pre-indexes your codebase into a semantic graph so AI agents can query structure instead of grepping files.**
40
+ **Instant codebase comprehension for AI coding agents. Semantic graph, algorithm anti-pattern detection, architecture health -- one CLI, zero API keys.**
41
41
 
42
- *5 core commands · advanced tools when you need them*
42
+ *56 commands · 22 languages · algorithm catalog · 100% local*
43
43
 
44
44
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
45
45
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -57,7 +57,7 @@ Roam pre-indexes your codebase into a semantic graph -- symbols, dependencies, c
57
57
 
58
58
  Unlike LSPs (editor-bound and language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact.
59
59
 
60
- A semantic graph means Roam understands what functions call what, how modules depend on each other, which tests cover which code, and the overall architecture structure.
60
+ A semantic graph means Roam understands what functions call what, how modules depend on each other, which tests cover which code, the overall architecture structure, and where algorithms can be improved. The built-in algorithm catalog detects 23 anti-patterns (O(n^2) loops, N+1 queries, quadratic string building, branching recursion) and suggests better approaches with Big-O improvements.
61
61
 
62
62
  ```
63
63
  Codebase ──> [Index] ──> Semantic Graph ──> CLI ──> AI Agent
@@ -100,6 +100,7 @@ $ roam diff # blast radius of uncommitted changes
100
100
  - **Large codebases (100+ files)** -- graph queries beat linear search at scale
101
101
  - **Architecture governance** -- health scores, CI quality gates, dependency cycle detection
102
102
  - **Safe refactoring** -- blast radius, affected tests, pre-change safety checks
103
+ - **Algorithm optimization** -- detect O(n^2) loops, N+1 queries, and 21 other anti-patterns with suggested fixes
103
104
  - **Multi-repo projects** -- cross-repo API edge detection between frontend and backend
104
105
 
105
106
  ### When NOT to use Roam
@@ -119,6 +120,8 @@ $ roam diff # blast radius of uncommitted changes
119
120
 
120
121
  **Fully local.** No API keys, telemetry, or network calls. Works in air-gapped environments.
121
122
 
123
+ **Algorithm-aware.** Built-in catalog of 23 anti-patterns. Detects suboptimal algorithms (quadratic loops, N+1 queries, unbounded recursion) and suggests fixes with Big-O improvements and confidence scores.
124
+
122
125
  **CI-ready.** `--json` output, `--gate` quality gates, GitHub Action, SARIF 2.1.0.
123
126
 
124
127
  | | Without Roam | With Roam |
@@ -211,7 +214,7 @@ roam health
211
214
 
212
215
  ## Commands
213
216
 
214
- The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. 56 total commands are organized into 7 categories.
217
+ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. 56 commands are organized into 7 categories.
215
218
 
216
219
  <details>
217
220
  <summary><strong>Full command reference</strong></summary>
@@ -564,7 +567,7 @@ pip install fastmcp
564
567
  fastmcp run roam.mcp_server:mcp
565
568
  ```
566
569
 
567
- 19 read-only tools and 2 resources. All tools query the index -- they never modify your code.
570
+ 20 read-only tools and 2 resources. All tools query the index -- they never modify your code.
568
571
 
569
572
  <details>
570
573
  <summary><strong>MCP tool list</strong></summary>
@@ -588,6 +591,7 @@ fastmcp run roam.mcp_server:mcp
588
591
  | `tour` | Auto-generated onboarding guide |
589
592
  | `diagnose` | Root cause analysis for debugging |
590
593
  | `visualize` | Generate Mermaid or DOT architecture diagrams |
594
+ | `math` | Algorithm anti-pattern detection with confidence calibration |
591
595
  | `ws_understand` | Unified multi-repo workspace overview |
592
596
  | `ws_context` | Cross-repo augmented symbol context |
593
597
 
@@ -894,13 +898,15 @@ Codebase
894
898
  |
895
899
  [5] Metrics ────── adaptive PageRank, betweenness, cognitive complexity, Halstead
896
900
  |
897
- [6] Git ────────── churn, co-change matrix, authorship, Renyi entropy
901
+ [6] Algorithms ── 23-pattern anti-pattern catalog (O(n^2) loops, N+1, recursion)
902
+ |
903
+ [7] Git ────────── churn, co-change matrix, authorship, Renyi entropy
898
904
  |
899
- [7] Clusters ───── Louvain community detection
905
+ [8] Clusters ───── Louvain community detection
900
906
  |
901
- [8] Health ─────── per-file scores (7-factor) + composite score (0-100)
907
+ [9] Health ─────── per-file scores (7-factor) + composite score (0-100)
902
908
  |
903
- [9] Store ──────── .roam/index.db (SQLite, WAL mode)
909
+ [10] Store ─────── .roam/index.db (SQLite, WAL mode)
904
910
  ```
905
911
 
906
912
  After the first full index, `roam index` only re-processes changed files (mtime + SHA-256 hash). Incremental updates are near-instant.
@@ -927,6 +933,7 @@ After the first full index, `roam index` only re-processes changed files (mtime
927
933
  - **Lift** -- association rule mining metric for co-change statistical significance (Agrawal & Srikant, 1994)
928
934
  - **Halstead metrics** -- volume, difficulty, effort, and predicted bugs from operator/operand counts (Halstead, 1977)
929
935
  - **SQALE remediation cost** -- time-to-fix estimates per issue type for tech debt prioritization (Letouzey, 2012)
936
+ - **Algorithm anti-pattern catalog** -- 23 patterns detecting suboptimal algorithms (quadratic loops, N+1 queries, quadratic string building, branching recursion, manual top-k, loop-invariant calls) with confidence calibration via caller-count and bounded-loop analysis
930
937
 
931
938
  </details>
932
939
 
@@ -1042,8 +1049,8 @@ roam-code/
1042
1049
  ├── action.yml # Reusable GitHub Action
1043
1050
  ├── src/roam/
1044
1051
  │ ├── __init__.py # Version (from pyproject.toml)
1045
- │ ├── cli.py # Click CLI (57 commands, 7 categories)
1046
- │ ├── mcp_server.py # MCP server (19 tools, 2 resources)
1052
+ │ ├── cli.py # Click CLI (56 commands, 7 categories)
1053
+ │ ├── mcp_server.py # MCP server (20 tools, 2 resources)
1047
1054
  │ ├── db/
1048
1055
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1049
1056
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -2,9 +2,9 @@
2
2
 
3
3
  # roam
4
4
 
5
- **Roam pre-indexes your codebase into a semantic graph so AI agents can query structure instead of grepping files.**
5
+ **Instant codebase comprehension for AI coding agents. Semantic graph, algorithm anti-pattern detection, architecture health -- one CLI, zero API keys.**
6
6
 
7
- *5 core commands · advanced tools when you need them*
7
+ *56 commands · 22 languages · algorithm catalog · 100% local*
8
8
 
9
9
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
10
10
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -22,7 +22,7 @@ Roam pre-indexes your codebase into a semantic graph -- symbols, dependencies, c
22
22
 
23
23
  Unlike LSPs (editor-bound and language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact.
24
24
 
25
- A semantic graph means Roam understands what functions call what, how modules depend on each other, which tests cover which code, and the overall architecture structure.
25
+ A semantic graph means Roam understands what functions call what, how modules depend on each other, which tests cover which code, the overall architecture structure, and where algorithms can be improved. The built-in algorithm catalog detects 23 anti-patterns (O(n^2) loops, N+1 queries, quadratic string building, branching recursion) and suggests better approaches with Big-O improvements.
26
26
 
27
27
  ```
28
28
  Codebase ──> [Index] ──> Semantic Graph ──> CLI ──> AI Agent
@@ -65,6 +65,7 @@ $ roam diff # blast radius of uncommitted changes
65
65
  - **Large codebases (100+ files)** -- graph queries beat linear search at scale
66
66
  - **Architecture governance** -- health scores, CI quality gates, dependency cycle detection
67
67
  - **Safe refactoring** -- blast radius, affected tests, pre-change safety checks
68
+ - **Algorithm optimization** -- detect O(n^2) loops, N+1 queries, and 21 other anti-patterns with suggested fixes
68
69
  - **Multi-repo projects** -- cross-repo API edge detection between frontend and backend
69
70
 
70
71
  ### When NOT to use Roam
@@ -84,6 +85,8 @@ $ roam diff # blast radius of uncommitted changes
84
85
 
85
86
  **Fully local.** No API keys, telemetry, or network calls. Works in air-gapped environments.
86
87
 
88
+ **Algorithm-aware.** Built-in catalog of 23 anti-patterns. Detects suboptimal algorithms (quadratic loops, N+1 queries, unbounded recursion) and suggests fixes with Big-O improvements and confidence scores.
89
+
87
90
  **CI-ready.** `--json` output, `--gate` quality gates, GitHub Action, SARIF 2.1.0.
88
91
 
89
92
  | | Without Roam | With Roam |
@@ -176,7 +179,7 @@ roam health
176
179
 
177
180
  ## Commands
178
181
 
179
- The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. 56 total commands are organized into 7 categories.
182
+ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. 56 commands are organized into 7 categories.
180
183
 
181
184
  <details>
182
185
  <summary><strong>Full command reference</strong></summary>
@@ -529,7 +532,7 @@ pip install fastmcp
529
532
  fastmcp run roam.mcp_server:mcp
530
533
  ```
531
534
 
532
- 19 read-only tools and 2 resources. All tools query the index -- they never modify your code.
535
+ 20 read-only tools and 2 resources. All tools query the index -- they never modify your code.
533
536
 
534
537
  <details>
535
538
  <summary><strong>MCP tool list</strong></summary>
@@ -553,6 +556,7 @@ fastmcp run roam.mcp_server:mcp
553
556
  | `tour` | Auto-generated onboarding guide |
554
557
  | `diagnose` | Root cause analysis for debugging |
555
558
  | `visualize` | Generate Mermaid or DOT architecture diagrams |
559
+ | `math` | Algorithm anti-pattern detection with confidence calibration |
556
560
  | `ws_understand` | Unified multi-repo workspace overview |
557
561
  | `ws_context` | Cross-repo augmented symbol context |
558
562
 
@@ -859,13 +863,15 @@ Codebase
859
863
  |
860
864
  [5] Metrics ────── adaptive PageRank, betweenness, cognitive complexity, Halstead
861
865
  |
862
- [6] Git ────────── churn, co-change matrix, authorship, Renyi entropy
866
+ [6] Algorithms ── 23-pattern anti-pattern catalog (O(n^2) loops, N+1, recursion)
867
+ |
868
+ [7] Git ────────── churn, co-change matrix, authorship, Renyi entropy
863
869
  |
864
- [7] Clusters ───── Louvain community detection
870
+ [8] Clusters ───── Louvain community detection
865
871
  |
866
- [8] Health ─────── per-file scores (7-factor) + composite score (0-100)
872
+ [9] Health ─────── per-file scores (7-factor) + composite score (0-100)
867
873
  |
868
- [9] Store ──────── .roam/index.db (SQLite, WAL mode)
874
+ [10] Store ─────── .roam/index.db (SQLite, WAL mode)
869
875
  ```
870
876
 
871
877
  After the first full index, `roam index` only re-processes changed files (mtime + SHA-256 hash). Incremental updates are near-instant.
@@ -892,6 +898,7 @@ After the first full index, `roam index` only re-processes changed files (mtime
892
898
  - **Lift** -- association rule mining metric for co-change statistical significance (Agrawal & Srikant, 1994)
893
899
  - **Halstead metrics** -- volume, difficulty, effort, and predicted bugs from operator/operand counts (Halstead, 1977)
894
900
  - **SQALE remediation cost** -- time-to-fix estimates per issue type for tech debt prioritization (Letouzey, 2012)
901
+ - **Algorithm anti-pattern catalog** -- 23 patterns detecting suboptimal algorithms (quadratic loops, N+1 queries, quadratic string building, branching recursion, manual top-k, loop-invariant calls) with confidence calibration via caller-count and bounded-loop analysis
895
902
 
896
903
  </details>
897
904
 
@@ -1007,8 +1014,8 @@ roam-code/
1007
1014
  ├── action.yml # Reusable GitHub Action
1008
1015
  ├── src/roam/
1009
1016
  │ ├── __init__.py # Version (from pyproject.toml)
1010
- │ ├── cli.py # Click CLI (57 commands, 7 categories)
1011
- │ ├── mcp_server.py # MCP server (19 tools, 2 resources)
1017
+ │ ├── cli.py # Click CLI (56 commands, 7 categories)
1018
+ │ ├── mcp_server.py # MCP server (20 tools, 2 resources)
1012
1019
  │ ├── db/
1013
1020
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1014
1021
  │ │ ├── schema.py # Tables, indexes, migrations
@@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "roam-code"
7
- version = "9.0.0"
7
+ version = "9.1.0"
8
8
  description = "Instant codebase comprehension for AI coding agents"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
11
- license = {text = "MIT"}
11
+ license = "MIT"
12
12
  authors = [
13
13
  {name = "CosmoHac"},
14
14
  ]
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roam-code
3
- Version: 9.0.0
3
+ Version: 9.1.0
4
4
  Summary: Instant codebase comprehension for AI coding agents
5
5
  Author: CosmoHac
6
- License: MIT
6
+ License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/Cranot/roam-code
8
8
  Project-URL: Repository, https://github.com/Cranot/roam-code
9
9
  Project-URL: Issues, https://github.com/Cranot/roam-code/issues
@@ -37,9 +37,9 @@ Dynamic: license-file
37
37
 
38
38
  # roam
39
39
 
40
- **Roam pre-indexes your codebase into a semantic graph so AI agents can query structure instead of grepping files.**
40
+ **Instant codebase comprehension for AI coding agents. Semantic graph, algorithm anti-pattern detection, architecture health -- one CLI, zero API keys.**
41
41
 
42
- *5 core commands · advanced tools when you need them*
42
+ *56 commands · 22 languages · algorithm catalog · 100% local*
43
43
 
44
44
  [![PyPI version](https://img.shields.io/pypi/v/roam-code?style=flat-square&color=blue)](https://pypi.org/project/roam-code/)
45
45
  [![GitHub stars](https://img.shields.io/github/stars/Cranot/roam-code?style=flat-square)](https://github.com/Cranot/roam-code/stargazers)
@@ -57,7 +57,7 @@ Roam pre-indexes your codebase into a semantic graph -- symbols, dependencies, c
57
57
 
58
58
  Unlike LSPs (editor-bound and language-specific) or Sourcegraph (hosted search), Roam provides architecture-level graph queries -- offline, cross-language, and compact.
59
59
 
60
- A semantic graph means Roam understands what functions call what, how modules depend on each other, which tests cover which code, and the overall architecture structure.
60
+ A semantic graph means Roam understands what functions call what, how modules depend on each other, which tests cover which code, the overall architecture structure, and where algorithms can be improved. The built-in algorithm catalog detects 23 anti-patterns (O(n^2) loops, N+1 queries, quadratic string building, branching recursion) and suggests better approaches with Big-O improvements.
61
61
 
62
62
  ```
63
63
  Codebase ──> [Index] ──> Semantic Graph ──> CLI ──> AI Agent
@@ -100,6 +100,7 @@ $ roam diff # blast radius of uncommitted changes
100
100
  - **Large codebases (100+ files)** -- graph queries beat linear search at scale
101
101
  - **Architecture governance** -- health scores, CI quality gates, dependency cycle detection
102
102
  - **Safe refactoring** -- blast radius, affected tests, pre-change safety checks
103
+ - **Algorithm optimization** -- detect O(n^2) loops, N+1 queries, and 21 other anti-patterns with suggested fixes
103
104
  - **Multi-repo projects** -- cross-repo API edge detection between frontend and backend
104
105
 
105
106
  ### When NOT to use Roam
@@ -119,6 +120,8 @@ $ roam diff # blast radius of uncommitted changes
119
120
 
120
121
  **Fully local.** No API keys, telemetry, or network calls. Works in air-gapped environments.
121
122
 
123
+ **Algorithm-aware.** Built-in catalog of 23 anti-patterns. Detects suboptimal algorithms (quadratic loops, N+1 queries, unbounded recursion) and suggests fixes with Big-O improvements and confidence scores.
124
+
122
125
  **CI-ready.** `--json` output, `--gate` quality gates, GitHub Action, SARIF 2.1.0.
123
126
 
124
127
  | | Without Roam | With Roam |
@@ -211,7 +214,7 @@ roam health
211
214
 
212
215
  ## Commands
213
216
 
214
- The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. 56 total commands are organized into 7 categories.
217
+ The [5 core commands](#core-commands) shown above cover ~80% of agent workflows. 56 commands are organized into 7 categories.
215
218
 
216
219
  <details>
217
220
  <summary><strong>Full command reference</strong></summary>
@@ -564,7 +567,7 @@ pip install fastmcp
564
567
  fastmcp run roam.mcp_server:mcp
565
568
  ```
566
569
 
567
- 19 read-only tools and 2 resources. All tools query the index -- they never modify your code.
570
+ 20 read-only tools and 2 resources. All tools query the index -- they never modify your code.
568
571
 
569
572
  <details>
570
573
  <summary><strong>MCP tool list</strong></summary>
@@ -588,6 +591,7 @@ fastmcp run roam.mcp_server:mcp
588
591
  | `tour` | Auto-generated onboarding guide |
589
592
  | `diagnose` | Root cause analysis for debugging |
590
593
  | `visualize` | Generate Mermaid or DOT architecture diagrams |
594
+ | `math` | Algorithm anti-pattern detection with confidence calibration |
591
595
  | `ws_understand` | Unified multi-repo workspace overview |
592
596
  | `ws_context` | Cross-repo augmented symbol context |
593
597
 
@@ -894,13 +898,15 @@ Codebase
894
898
  |
895
899
  [5] Metrics ────── adaptive PageRank, betweenness, cognitive complexity, Halstead
896
900
  |
897
- [6] Git ────────── churn, co-change matrix, authorship, Renyi entropy
901
+ [6] Algorithms ── 23-pattern anti-pattern catalog (O(n^2) loops, N+1, recursion)
902
+ |
903
+ [7] Git ────────── churn, co-change matrix, authorship, Renyi entropy
898
904
  |
899
- [7] Clusters ───── Louvain community detection
905
+ [8] Clusters ───── Louvain community detection
900
906
  |
901
- [8] Health ─────── per-file scores (7-factor) + composite score (0-100)
907
+ [9] Health ─────── per-file scores (7-factor) + composite score (0-100)
902
908
  |
903
- [9] Store ──────── .roam/index.db (SQLite, WAL mode)
909
+ [10] Store ─────── .roam/index.db (SQLite, WAL mode)
904
910
  ```
905
911
 
906
912
  After the first full index, `roam index` only re-processes changed files (mtime + SHA-256 hash). Incremental updates are near-instant.
@@ -927,6 +933,7 @@ After the first full index, `roam index` only re-processes changed files (mtime
927
933
  - **Lift** -- association rule mining metric for co-change statistical significance (Agrawal & Srikant, 1994)
928
934
  - **Halstead metrics** -- volume, difficulty, effort, and predicted bugs from operator/operand counts (Halstead, 1977)
929
935
  - **SQALE remediation cost** -- time-to-fix estimates per issue type for tech debt prioritization (Letouzey, 2012)
936
+ - **Algorithm anti-pattern catalog** -- 23 patterns detecting suboptimal algorithms (quadratic loops, N+1 queries, quadratic string building, branching recursion, manual top-k, loop-invariant calls) with confidence calibration via caller-count and bounded-loop analysis
930
937
 
931
938
  </details>
932
939
 
@@ -1042,8 +1049,8 @@ roam-code/
1042
1049
  ├── action.yml # Reusable GitHub Action
1043
1050
  ├── src/roam/
1044
1051
  │ ├── __init__.py # Version (from pyproject.toml)
1045
- │ ├── cli.py # Click CLI (57 commands, 7 categories)
1046
- │ ├── mcp_server.py # MCP server (19 tools, 2 resources)
1052
+ │ ├── cli.py # Click CLI (56 commands, 7 categories)
1053
+ │ ├── mcp_server.py # MCP server (20 tools, 2 resources)
1047
1054
  │ ├── db/
1048
1055
  │ │ ├── connection.py # SQLite (WAL, pragmas, batched IN)
1049
1056
  │ │ ├── schema.py # Tables, indexes, migrations
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes