code-graph-rag 0.4.19__tar.gz → 0.5.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 (476) hide show
  1. {code_graph_rag-0.4.19/code_graph_rag.egg-info → code_graph_rag-0.5.0}/PKG-INFO +1 -1
  2. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/README.md +3 -4
  3. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0/code_graph_rag.egg-info}/PKG-INFO +1 -1
  4. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/SOURCES.txt +2 -0
  5. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/cli_help.py +2 -1
  6. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/config.py +17 -2
  7. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_js.py +21 -0
  8. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/cli.py +68 -4
  9. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/core.py +5 -1
  10. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/mcp.py +9 -0
  11. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/security.py +36 -0
  12. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/signature.py +74 -39
  13. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/signature_bind.py +5 -2
  14. code_graph_rag-0.5.0/codebase_rag/editing/signature_js.py +249 -0
  15. code_graph_rag-0.5.0/codebase_rag/editing/signature_js_bind.py +265 -0
  16. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/signature_spec.py +50 -7
  17. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/transaction.py +6 -0
  18. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/logs.py +4 -0
  19. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/mcp/server.py +69 -10
  20. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/mcp/tools.py +11 -0
  21. code_graph_rag-0.5.0/codebase_rag/sensitive_paths.py +164 -0
  22. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tool_errors.py +11 -0
  23. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/file_editor.py +10 -0
  24. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/file_writer.py +5 -0
  25. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/tool_descriptions.py +2 -1
  26. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/pyproject.toml +3 -3
  27. code_graph_rag-0.4.19/codebase_rag/sensitive_paths.py +0 -41
  28. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/LICENSE +0 -0
  29. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/PYPI_README.md +0 -0
  30. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/cgr/__init__.py +0 -0
  31. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/dependency_links.txt +0 -0
  32. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/entry_points.txt +0 -0
  33. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/requires.txt +0 -0
  34. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/code_graph_rag.egg-info/top_level.txt +0 -0
  35. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/__init__.py +0 -0
  36. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/_cli_env.py +0 -0
  37. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/__init__.py +0 -0
  38. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_analyzer.py +0 -0
  39. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/c.yaml +0 -0
  40. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/cpp.yaml +0 -0
  41. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/csharp.yaml +0 -0
  42. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/dart.yaml +0 -0
  43. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/go.yaml +0 -0
  44. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/java.yaml +0 -0
  45. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/javascript.yaml +0 -0
  46. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/lua.yaml +0 -0
  47. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/php.yaml +0 -0
  48. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/python.yaml +0 -0
  49. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/ruby.yaml +0 -0
  50. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/rust.yaml +0 -0
  51. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/scala.yaml +0 -0
  52. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/tsx.yaml +0 -0
  53. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/patterns/typescript.yaml +0 -0
  54. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/c.yaml +0 -0
  55. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/cpp.yaml +0 -0
  56. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/csharp.yaml +0 -0
  57. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/dart.yaml +0 -0
  58. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/go.yaml +0 -0
  59. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/java.yaml +0 -0
  60. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/javascript.yaml +0 -0
  61. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/lua.yaml +0 -0
  62. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/php.yaml +0 -0
  63. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/python.yaml +0 -0
  64. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/ruby.yaml +0 -0
  65. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/rust.yaml +0 -0
  66. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/scala.yaml +0 -0
  67. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/tsx.yaml +0 -0
  68. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/security/typescript.yaml +0 -0
  69. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/c.yaml +0 -0
  70. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/cpp.yaml +0 -0
  71. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/csharp.yaml +0 -0
  72. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/dart.yaml +0 -0
  73. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/go.yaml +0 -0
  74. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/java.yaml +0 -0
  75. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/javascript.yaml +0 -0
  76. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/lua.yaml +0 -0
  77. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/php.yaml +0 -0
  78. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/python.yaml +0 -0
  79. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/ruby.yaml +0 -0
  80. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/rust.yaml +0 -0
  81. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/scala.yaml +0 -0
  82. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/tsx.yaml +0 -0
  83. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/analyzers/ast_grep_rules/smells/typescript.yaml +0 -0
  84. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/ast_cache.py +0 -0
  85. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/capture.py +0 -0
  86. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/check_isolation.py +0 -0
  87. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/checkout_state.py +0 -0
  88. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/cli.py +0 -0
  89. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/cli_runtime.py +0 -0
  90. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/console_marks.py +0 -0
  91. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/__init__.py +0 -0
  92. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_cpp.py +0 -0
  93. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_csharp.py +0 -0
  94. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_dart.py +0 -0
  95. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_go.py +0 -0
  96. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_java.py +0 -0
  97. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_julia.py +0 -0
  98. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_lua.py +0 -0
  99. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_nodes.py +0 -0
  100. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_php.py +0 -0
  101. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_python.py +0 -0
  102. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_rust.py +0 -0
  103. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_scala.py +0 -0
  104. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/ast_sql.py +0 -0
  105. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/build.py +0 -0
  106. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/deadcode_roots.py +0 -0
  107. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/deps.py +0 -0
  108. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/duplicates.py +0 -0
  109. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/embedded_graph.py +0 -0
  110. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/fqn_specs.py +0 -0
  111. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/graph.py +0 -0
  112. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/health.py +0 -0
  113. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/interface.py +0 -0
  114. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/lang_tooling.py +0 -0
  115. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/languages.py +0 -0
  116. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/notebook.py +0 -0
  117. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/port.py +0 -0
  118. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/providers.py +0 -0
  119. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/sqlite_vectors.py +0 -0
  120. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/stdlib_types.py +0 -0
  121. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/structural.py +0 -0
  122. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/constants/trace.py +0 -0
  123. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/context_pruning.py +0 -0
  124. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/context_slice.py +0 -0
  125. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/crash_correlation.py +0 -0
  126. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/cypher_queries.py +0 -0
  127. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/dead_code.py +0 -0
  128. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/decorators.py +0 -0
  129. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/docker-compose.yaml +0 -0
  130. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/duplicates.py +0 -0
  131. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/__init__.py +0 -0
  132. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/cli.py +0 -0
  133. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/contract.py +0 -0
  134. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/import_paths.py +0 -0
  135. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/imports.py +0 -0
  136. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/occurrences.py +0 -0
  137. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/patcher.py +0 -0
  138. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/rename.py +0 -0
  139. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/signature_contract.py +0 -0
  140. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editing/sites.py +0 -0
  141. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/editor_links.py +0 -0
  142. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/__init__.py +0 -0
  143. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/compiler.py +0 -0
  144. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/connection.py +0 -0
  145. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/cypher_ast.py +0 -0
  146. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/executor.py +0 -0
  147. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/expressions.py +0 -0
  148. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/extension.py +0 -0
  149. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/functions.py +0 -0
  150. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/lexer.py +0 -0
  151. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/limits.py +0 -0
  152. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/native.py +0 -0
  153. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/parser.py +0 -0
  154. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/procedures.py +0 -0
  155. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/sql.py +0 -0
  156. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/store.py +0 -0
  157. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedded_graph/types.py +0 -0
  158. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/embedder.py +0 -0
  159. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/exceptions.py +0 -0
  160. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/flow_verdict.py +0 -0
  161. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/function_registry.py +0 -0
  162. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/gloss.py +0 -0
  163. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/gloss_anchor.py +0 -0
  164. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/gloss_repair.py +0 -0
  165. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/graph_audit.py +0 -0
  166. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/graph_cli.py +0 -0
  167. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/graph_dialects.py +0 -0
  168. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/graph_loader.py +0 -0
  169. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/graph_query.py +0 -0
  170. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/graph_updater.py +0 -0
  171. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/instructions_trust.py +0 -0
  172. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/interface_skip.py +0 -0
  173. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/language_spec.py +0 -0
  174. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/main.py +0 -0
  175. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/mcp/__init__.py +0 -0
  176. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/mcp/client.py +0 -0
  177. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/mgclient_compat.py +0 -0
  178. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/mgclient_probe.py +0 -0
  179. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/models.py +0 -0
  180. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parser_fingerprint.py +0 -0
  181. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parser_loader.py +0 -0
  182. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/__init__.py +0 -0
  183. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/anchor_hash.py +0 -0
  184. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_fingerprint.py +0 -0
  185. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/bash.yaml +0 -0
  186. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/elixir.yaml +0 -0
  187. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/haskell.yaml +0 -0
  188. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/kotlin.yaml +0 -0
  189. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/nix.yaml +0 -0
  190. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/ruby.yaml +0 -0
  191. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/solidity.yaml +0 -0
  192. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_patterns/swift.yaml +0 -0
  193. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_scope.py +0 -0
  194. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/ast_grep_tier.py +0 -0
  195. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/build_lock.py +0 -0
  196. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/call_processor.py +0 -0
  197. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/call_resolver.py +0 -0
  198. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/__init__.py +0 -0
  199. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/base_targets.py +0 -0
  200. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/cpp_modules.py +0 -0
  201. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/identity.py +0 -0
  202. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/method_override.py +0 -0
  203. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/mixin.py +0 -0
  204. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/node_type.py +0 -0
  205. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/parent_extraction.py +0 -0
  206. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/relationships.py +0 -0
  207. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/class_ingest/utils.py +0 -0
  208. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/contract_linking.py +0 -0
  209. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/contracts.py +0 -0
  210. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/__init__.py +0 -0
  211. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/class_macro.py +0 -0
  212. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/function_values.py +0 -0
  213. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/local_types.py +0 -0
  214. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/overloads.py +0 -0
  215. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/preproc_recovery.py +0 -0
  216. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/trailing_annotation.py +0 -0
  217. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/type_inference.py +0 -0
  218. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp/utils.py +0 -0
  219. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/__init__.py +0 -0
  220. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/constants.py +0 -0
  221. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/frontend.py +0 -0
  222. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/cpp_frontend/qn.py +0 -0
  223. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/__init__.py +0 -0
  224. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/arity.py +0 -0
  225. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/type_inference.py +0 -0
  226. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp/utils.py +0 -0
  227. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/__init__.py +0 -0
  228. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/frontend.py +0 -0
  229. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.cs +0 -0
  230. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/roslyn/Frontend.csproj +0 -0
  231. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/csharp_frontend/roslyn/Program.cs +0 -0
  232. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/__init__.py +0 -0
  233. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/package_paths.py +0 -0
  234. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/type_inference.py +0 -0
  235. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/dart/utils.py +0 -0
  236. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/definition_docstring.py +0 -0
  237. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/definition_processor.py +0 -0
  238. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/dependency_parser.py +0 -0
  239. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/dispatch_registry.py +0 -0
  240. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/document_tier.py +0 -0
  241. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/endpoint_prefixes.py +0 -0
  242. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/endpoint_routes.py +0 -0
  243. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/endpoints.py +0 -0
  244. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/enum_variants.py +0 -0
  245. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/export_detection.py +0 -0
  246. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/factory.py +0 -0
  247. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/field_nodes.py +0 -0
  248. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/flat_module.py +0 -0
  249. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/flow_access/__init__.py +0 -0
  250. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/flow_access/constants.py +0 -0
  251. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/flow_access/processor.py +0 -0
  252. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontend_mode.py +0 -0
  253. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/__init__.py +0 -0
  254. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/cpp.py +0 -0
  255. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/csharp.py +0 -0
  256. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/go.py +0 -0
  257. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/java.py +0 -0
  258. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/protocol.py +0 -0
  259. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/python.py +0 -0
  260. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/frontends/registry.py +0 -0
  261. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/function_ingest.py +0 -0
  262. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/__init__.py +0 -0
  263. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/builds.py +0 -0
  264. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/interface_ingest.py +0 -0
  265. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/interfaces.py +0 -0
  266. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/link_state.py +0 -0
  267. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/module_paths.py +0 -0
  268. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/type_inference.py +0 -0
  269. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go/utils.py +0 -0
  270. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/__init__.py +0 -0
  271. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/frontend.py +0 -0
  272. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/gotypes/go.mod +0 -0
  273. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/gotypes/go.sum +0 -0
  274. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/go_frontend/gotypes/main.go +0 -0
  275. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/__init__.py +0 -0
  276. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/base.py +0 -0
  277. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/cpp.py +0 -0
  278. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/java.py +0 -0
  279. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/js_ts.py +0 -0
  280. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/julia.py +0 -0
  281. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/lua.py +0 -0
  282. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/php.py +0 -0
  283. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/protocol.py +0 -0
  284. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/python.py +0 -0
  285. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/registry.py +0 -0
  286. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/handlers/rust.py +0 -0
  287. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/import_processor.py +0 -0
  288. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/interface_fingerprint.py +0 -0
  289. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/__init__.py +0 -0
  290. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/constants.py +0 -0
  291. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/descriptor.py +0 -0
  292. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/extract.py +0 -0
  293. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/models.py +0 -0
  294. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/processor.py +0 -0
  295. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/registry.py +0 -0
  296. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/resource_names.py +0 -0
  297. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/io_access/url_folding.py +0 -0
  298. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/__init__.py +0 -0
  299. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/method_resolver.py +0 -0
  300. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/type_inference.py +0 -0
  301. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/type_resolver.py +0 -0
  302. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/utils.py +0 -0
  303. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java/variable_analyzer.py +0 -0
  304. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_frontend/__init__.py +0 -0
  305. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_frontend/frontend.py +0 -0
  306. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_frontend/javac/cgr/Frontend.java +0 -0
  307. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_generated.py +0 -0
  308. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/java_lombok.py +0 -0
  309. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/__init__.py +0 -0
  310. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/commonjs_exports.py +0 -0
  311. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/ingest.py +0 -0
  312. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/module_paths.py +0 -0
  313. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/module_system.py +0 -0
  314. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/overloads.py +0 -0
  315. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/reexports.py +0 -0
  316. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/type_inference.py +0 -0
  317. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/js_ts/utils.py +0 -0
  318. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/julia/__init__.py +0 -0
  319. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/julia/utils.py +0 -0
  320. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/lua/__init__.py +0 -0
  321. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/lua/type_inference.py +0 -0
  322. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/lua/utils.py +0 -0
  323. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/module_docstring.py +0 -0
  324. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/native_trees.py +0 -0
  325. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/notebook.py +0 -0
  326. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/parameter_nodes.py +0 -0
  327. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/__init__.py +0 -0
  328. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/class_names.py +0 -0
  329. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/namespaces.py +0 -0
  330. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/php/utils.py +0 -0
  331. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/positional_params.py +0 -0
  332. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/__init__.py +0 -0
  333. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/ast_analyzer.py +0 -0
  334. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/class_aliases.py +0 -0
  335. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/definition_index.py +0 -0
  336. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/expression_analyzer.py +0 -0
  337. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/flow_bindings.py +0 -0
  338. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/forward_refs.py +0 -0
  339. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/overloads.py +0 -0
  340. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/patterns.py +0 -0
  341. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/receiver_rebinding.py +0 -0
  342. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/type_inference.py +0 -0
  343. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/utils.py +0 -0
  344. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/variable_analyzer.py +0 -0
  345. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py/with_analyzer.py +0 -0
  346. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py_frontend/__init__.py +0 -0
  347. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/py_frontend/frontend.py +0 -0
  348. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/python_source_roots.py +0 -0
  349. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/rpc_exposure.py +0 -0
  350. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/__init__.py +0 -0
  351. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/cargo_semver.py +0 -0
  352. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/type_inference.py +0 -0
  353. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/rs/utils.py +0 -0
  354. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/scala/__init__.py +0 -0
  355. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/scala/utils.py +0 -0
  356. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/semantic_call_join.py +0 -0
  357. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/sql_ddl.py +0 -0
  358. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/sql_recovery.py +0 -0
  359. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/stdlib_extractor.py +0 -0
  360. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/string_call.py +0 -0
  361. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/structure_processor.py +0 -0
  362. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/type_facts.py +0 -0
  363. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/type_inference.py +0 -0
  364. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/parsers/utils.py +0 -0
  365. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/path_filters.py +0 -0
  366. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/port_cli.py +0 -0
  367. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/port_parity.py +0 -0
  368. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/project_selection.py +0 -0
  369. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/prompts.py +0 -0
  370. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/providers/__init__.py +0 -0
  371. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/providers/base.py +0 -0
  372. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/providers/litellm.py +0 -0
  373. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/c_sharp.scm +0 -0
  374. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/dart.scm +0 -0
  375. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/java.scm +0 -0
  376. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/javascript.scm +0 -0
  377. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/julia.scm +0 -0
  378. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/php.scm +0 -0
  379. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/python.scm +0 -0
  380. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/rust.scm +0 -0
  381. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/queries/highlights/typescript.scm +0 -0
  382. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/readme_sections.py +0 -0
  383. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/schema_builder.py +0 -0
  384. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/schema_parse.py +0 -0
  385. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/schemas.py +0 -0
  386. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/__init__.py +0 -0
  387. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/anthropic_token_counter.py +0 -0
  388. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/cypher_guard.py +0 -0
  389. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/filtering.py +0 -0
  390. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/gloss_cleanup.py +0 -0
  391. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/graph_diff.py +0 -0
  392. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/graph_service.py +0 -0
  393. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/llm.py +0 -0
  394. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/neo4j_driver.py +0 -0
  395. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/protobuf_service.py +0 -0
  396. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/provenance.py +0 -0
  397. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/resource_cleanup.py +0 -0
  398. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/services/usage_cost.py +0 -0
  399. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/source_checkout.py +0 -0
  400. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/sql_names.py +0 -0
  401. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/sqlite_vectors.py +0 -0
  402. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/stack/__init__.py +0 -0
  403. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/stack/cli.py +0 -0
  404. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/stack/constants.py +0 -0
  405. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/stack/health.py +0 -0
  406. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/stack/manager.py +0 -0
  407. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/structural_check.py +0 -0
  408. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/structural_delta.py +0 -0
  409. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/sync_guard.py +0 -0
  410. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/sync_lock.py +0 -0
  411. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/taint.py +0 -0
  412. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/__init__.py +0 -0
  413. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/ast_grep_service.py +0 -0
  414. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/code_retrieval.py +0 -0
  415. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/codebase_query.py +0 -0
  416. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/directory_lister.py +0 -0
  417. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/duplicate_detection.py +0 -0
  418. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/file_reader.py +0 -0
  419. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/graph_refresh.py +0 -0
  420. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/graph_rerank.py +0 -0
  421. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/health_checker.py +0 -0
  422. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/language.py +0 -0
  423. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/language_catalog.py +0 -0
  424. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/research.py +0 -0
  425. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/semantic_search.py +0 -0
  426. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/shell_command.py +0 -0
  427. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/structural_editor.py +0 -0
  428. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/structural_search.py +0 -0
  429. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tools/web_search.py +0 -0
  430. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/__init__.py +0 -0
  431. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/carry.py +0 -0
  432. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/cli.py +0 -0
  433. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/cpuprofile.py +0 -0
  434. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/dispatch_site.py +0 -0
  435. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/ebpf_pprof.py +0 -0
  436. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/ingest.py +0 -0
  437. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/instrumented.py +0 -0
  438. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/pprof.py +0 -0
  439. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/pytest_plugin.py +0 -0
  440. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/records.py +0 -0
  441. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/resolution.py +0 -0
  442. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/rust_pprof.py +0 -0
  443. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/sourcemap.py +0 -0
  444. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/speedscope.py +0 -0
  445. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/tracer.py +0 -0
  446. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/trace/xdebug.py +0 -0
  447. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/tree_sitter_point.py +0 -0
  448. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/types_defs.py +0 -0
  449. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/unixcoder.py +0 -0
  450. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/__init__.py +0 -0
  451. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/cpp_signatures.py +0 -0
  452. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/dependencies.py +0 -0
  453. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/endpoints.py +0 -0
  454. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/fqn_resolver.py +0 -0
  455. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/interruptible_thread.py +0 -0
  456. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/json_io.py +0 -0
  457. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/path_utils.py +0 -0
  458. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/process_owner.py +0 -0
  459. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/qn_markers.py +0 -0
  460. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/rich_markdown.py +0 -0
  461. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/source_encoding.py +0 -0
  462. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/source_extraction.py +0 -0
  463. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/terminal_console.py +0 -0
  464. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/utils/token_utils.py +0 -0
  465. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/vector_store.py +0 -0
  466. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/watch.py +0 -0
  467. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/workspaces/__init__.py +0 -0
  468. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/workspaces/cli.py +0 -0
  469. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/workspaces/constants.py +0 -0
  470. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/workspaces/models.py +0 -0
  471. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codebase_rag/workspaces/storage.py +0 -0
  472. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codec/__init__.py +0 -0
  473. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codec/schema.proto +0 -0
  474. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codec/schema_pb2.py +0 -0
  475. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/codec/schema_pb2.pyi +0 -0
  476. {code_graph_rag-0.4.19 → code_graph_rag-0.5.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.4.19
3
+ Version: 0.5.0
4
4
  Summary: The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs
5
5
  License-Expression: MIT
6
6
  Keywords: rag,retrieval-augmented-generation,knowledge-graph,code-analysis,tree-sitter,mcp,mcp-server,llm,graph-database,semantic-search,codebase,memgraph,developer-tools,monorepo
@@ -61,10 +61,9 @@ Code-Graph-RAG parses a multi-language codebase with Tree-sitter, sharpened by c
61
61
  ## Latest News 🔥
62
62
 
63
63
  <!-- SECTION:latest_news -->
64
- - **Quiet Mode Enhancement**: The `--quiet` flag for the CLI now suppresses the scanning line for dead code and duplicates, providing a cleaner output.
65
- - **Context Budget Fix**: The system now correctly handles cases where a target doesn't fit within the allocated budget, preventing unexpected behaviour.
66
- - **Code Quality**: Changes have been made to report decorator and modifier changes that affect method calls and to ensure submodule grammars are loaded correctly.
67
- - **CGR Prune Feature**: A new `cgr prune` functionality has been added to remove projects where the root no longer exists.
64
+ - **Rust Upgrade**: Updated Rust to version 1.99.1-slim-trixie.
65
+ - **Signature Functionality**: Added support for reading and writing JavaScript headers for change signatures, including the ability to change the signature of JavaScript functions or methods.
66
+ - **macOS Compatibility**: The build now leaves macOS-14 support.
68
67
  <!-- /SECTION:latest_news -->
69
68
 
70
69
  See [NEWS.md](NEWS.md) for the full history.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-graph-rag
3
- Version: 0.4.19
3
+ Version: 0.5.0
4
4
  Summary: The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs
5
5
  License-Expression: MIT
6
6
  Keywords: rag,retrieval-augmented-generation,knowledge-graph,code-analysis,tree-sitter,mcp,mcp-server,llm,graph-database,semantic-search,codebase,memgraph,developer-tools,monorepo
@@ -171,6 +171,8 @@ codebase_rag/editing/rename.py
171
171
  codebase_rag/editing/signature.py
172
172
  codebase_rag/editing/signature_bind.py
173
173
  codebase_rag/editing/signature_contract.py
174
+ codebase_rag/editing/signature_js.py
175
+ codebase_rag/editing/signature_js_bind.py
174
176
  codebase_rag/editing/signature_spec.py
175
177
  codebase_rag/editing/sites.py
176
178
  codebase_rag/editing/transaction.py
@@ -201,7 +201,8 @@ HELP_RENAME_ALLOW_HEURISTIC = (
201
201
  )
202
202
  HELP_RENAME_DRY_RUN = "Print the plan and diff without writing anything."
203
203
  CMD_CHANGE_SIGNATURE = (
204
- "Change a Python definition's parameter list and rewrite every call site "
204
+ "Change a Python or JavaScript definition's parameter list and rewrite "
205
+ "every call site "
205
206
  "the graph knows; sites the mapping cannot complete are listed, not touched; "
206
207
  "refuses on a graph a stopped sync left partial."
207
208
  )
@@ -48,8 +48,12 @@ def merge_dotenv(path: Path) -> dict[str, str]:
48
48
  # value, and a reference to it in the file reads that value too.
49
49
  values = DotEnv(path, encoding=cs.ENCODING_UTF8, override=False).dict()
50
50
  refused: dict[str, str] = {}
51
+ # The file may not set a waiver in any spelling: settings match names
52
+ # without regard to case, so `cgr_allow_sensitive_reads=true` beside an
53
+ # exported `CGR_ALLOW_SENSITIVE_READS=false` won (see load_settings).
54
+ environment_only = {name.upper() for name in cs.ENVIRONMENT_ONLY_SETTINGS}
51
55
  for name, value in values.items():
52
- if value is None or name in os.environ:
56
+ if value is None or name in os.environ or name.upper() in environment_only:
53
57
  continue
54
58
  try:
55
59
  os.environ[name] = value
@@ -620,6 +624,14 @@ class AppConfig(BaseSettings):
620
624
  False, validation_alias="CGR_ALLOW_SENSITIVE_READS"
621
625
  )
622
626
 
627
+ # MCP write_file and surgical_replace_code refuse the same files: an
628
+ # overwrite destroys the secret, and an edit's refusals ("target not
629
+ # found", the lines of each match) let the client guess one character
630
+ # at a time. The CLI agent asks before every write instead.
631
+ ALLOW_SENSITIVE_WRITES: bool = Field(
632
+ False, validation_alias="CGR_ALLOW_SENSITIVE_WRITES"
633
+ )
634
+
623
635
  # A repository's .cgr.md loads only once the user approved its content
624
636
  # (issue #3456). True trusts every repository's file without asking:
625
637
  # for CI on repositories you control, never for code you did not write.
@@ -780,7 +792,10 @@ def load_settings(
780
792
  # when the user exported it: `.env` in the working directory is usually the
781
793
  # analysed repository's file, and could approve its own .cgr.md (Codex
782
794
  # review on PR #3471). Held at its default, silently, like an unset one.
783
- exported = {name.upper() for name in inherited_env}
795
+ # An empty one counts as unset: settings skip an empty variable
796
+ # (env_ignore_empty) and read `.env` in its place, so it let the
797
+ # repository's file decide.
798
+ exported = {name.upper() for name in inherited_env if os.environ.get(name)}
784
799
  waivers = {
785
800
  name for name in cs.ENVIRONMENT_ONLY_SETTINGS if name.upper() not in exported
786
801
  }
@@ -534,3 +534,24 @@ CAPTURE_MODULE_OBJ = "module_obj"
534
534
  CAPTURE_EXPORTS_PROP = "exports_prop"
535
535
  CAPTURE_EXPORT_NAME = "export_name"
536
536
  CAPTURE_EXPORT_FUNCTION = "export_function"
537
+
538
+ # Value nodes a call argument can be without running code, and the methods
539
+ # through which a function is called with an explicit receiver, for
540
+ # change_signature (issue #1908).
541
+ TS_JS_NUMBER = "number"
542
+ TS_JS_NULL = "null"
543
+ TS_JS_UNDEFINED = "undefined"
544
+ TS_JS_ACCESSOR_KEYWORDS = frozenset({"get", "set"})
545
+ JS_RECEIVER_METHODS = frozenset({"call", "apply"})
546
+ # `\u0061` and `\u{61}` both spell the identifier `a`, and a parameter name
547
+ # written with escapes is refused; a direct `eval` reads locals named in a
548
+ # string. For change_signature (issue #1908).
549
+ JS_IDENTIFIER_ESCAPE = r"\\u\{([0-9a-fA-F]+)\}|\\u([0-9a-fA-F]{4})"
550
+ JS_ESCAPE_MARK = "\\"
551
+ JS_EVAL_NAME = "eval"
552
+ # The argument passed for a default a call skips: undefined even where the
553
+ # caller has bound the name `undefined` to something else.
554
+ JS_SKIPPED_ARGUMENT = "void 0"
555
+ # A function body opening with either of these, exactly as written, runs in
556
+ # strict mode, and JavaScript then refuses a default among its parameters.
557
+ JS_USE_STRICT_DIRECTIVES = frozenset({"'use strict'", '"use strict"'})
@@ -1074,9 +1074,9 @@ SIGNATURE_CLI_WRONG_ROOT = (
1074
1074
  "Project {project} was not indexed from {root}; "
1075
1075
  "pass the --repo-path it was indexed from"
1076
1076
  )
1077
- SIGNATURE_NOT_PYTHON = (
1078
- "Cannot change the signature of {qn}: {path} is not Python, and only Python "
1079
- "definitions are supported for now (issue #{issue})"
1077
+ SIGNATURE_UNSUPPORTED_LANGUAGE = (
1078
+ "Cannot change the signature of {qn}: {path} is in a language it does not "
1079
+ "support yet; Python and JavaScript are supported (issue #{issue})"
1080
1080
  )
1081
1081
  SIGNATURE_DEFINITION_UNREADABLE = (
1082
1082
  "Cannot change the signature of {qn}: its file {path} cannot be read "
@@ -1157,7 +1157,7 @@ SIGNATURE_SITE_NO_LOCATION = "site carries no location ({resolution})"
1157
1157
  SIGNATURE_SITE_GUESSED = (
1158
1158
  "site was resolved by {resolution}; pass allow_heuristic to rewrite it"
1159
1159
  )
1160
- SIGNATURE_SITE_NOT_PYTHON = "{path} is not Python"
1160
+ SIGNATURE_SITE_OTHER_LANGUAGE = "{path} is not in the definition's language"
1161
1161
  SIGNATURE_SITE_UNREADABLE_FILE = "file cannot be read ({error})"
1162
1162
  SIGNATURE_SITE_NO_CALL = "no call found at the recorded position"
1163
1163
  SIGNATURE_SITE_UNREADABLE = "arguments cannot be read positionally: `{text}`"
@@ -1176,6 +1176,70 @@ SIGNATURE_SITE_EXPLICIT_RECEIVER = (
1176
1176
  "reaches the method through its class and passes the receiver as an "
1177
1177
  "argument (`{text}`); rewrite it by hand"
1178
1178
  )
1179
+ SIGNATURE_SITE_REORDERS_EFFECTS = (
1180
+ "its arguments run code, and the new order would run them in another "
1181
+ "order: `{text}`"
1182
+ )
1183
+ SIGNATURE_JS_HEADER_PROBE = "function _{params} {{}}"
1184
+ SIGNATURE_JS_CALL_PROBE = "_({args});"
1185
+ SIGNATURE_JS_BAD_LITERAL = (
1186
+ "The value `{literal}` mapped to {name} is not one JavaScript expression; "
1187
+ "written into a call it would not be exactly one argument"
1188
+ )
1189
+ SIGNATURE_JS_UNSUPPORTED_PARAMS = (
1190
+ "Cannot change the signature of {qn}: `{text}` is not a plain parameter "
1191
+ "(a name, with or without a default), and only those can be remapped"
1192
+ )
1193
+ SIGNATURE_JS_BAD_PARAM = (
1194
+ "Not one plain parameter: `{text}` (expected `name` or `name = default`)"
1195
+ )
1196
+ SIGNATURE_JS_INVALID_HEADER = (
1197
+ "The new parameter list of {qn} is not valid JavaScript: `{text}`"
1198
+ )
1199
+ SIGNATURE_JS_CONSTRUCTOR = (
1200
+ "Cannot change the signature of {qn}: a constructor is called through `new` "
1201
+ "and `super(...)`, which are not listed as its call sites"
1202
+ )
1203
+ SIGNATURE_JS_ACCESSOR = (
1204
+ "Cannot change the signature of {qn}: a getter or setter is read or "
1205
+ "assigned, never called with arguments"
1206
+ )
1207
+ SIGNATURE_JS_CALLS_EVAL = (
1208
+ "Cannot add or drop a parameter of {qn}: its body uses `eval`, which can "
1209
+ "read any parameter through a name written in a string"
1210
+ )
1211
+ SIGNATURE_JS_READS_ARGUMENTS = (
1212
+ "Cannot change the signature of {qn}: its body reads `arguments`, which "
1213
+ "sees every value by position"
1214
+ )
1215
+ SIGNATURE_JS_RENAME = (
1216
+ "Cannot rename parameter {old} of {qn} to {new}: renaming is not supported "
1217
+ "for JavaScript yet (issue #{issue})"
1218
+ )
1219
+ SIGNATURE_JS_DROPPED_STILL_READ = (
1220
+ "Cannot drop parameter {name} of {qn}: its body still uses `{name}`, which "
1221
+ "would then reach an outer name or throw ReferenceError; remove that use by "
1222
+ "hand first"
1223
+ )
1224
+ SIGNATURE_JS_DUPLICATE_PARAM = (
1225
+ "Cannot change the signature of {qn}: it declares parameter {name} more "
1226
+ "than once, and the body sees only the last of them"
1227
+ )
1228
+ SIGNATURE_JS_REORDERS_DEFAULTS = (
1229
+ "Cannot change the signature of {qn}: the defaults of {first} and {second} "
1230
+ "would run in the other order when a call leaves both out, and one of them "
1231
+ "runs code the other can observe"
1232
+ )
1233
+ SIGNATURE_JS_DEFAULT_READS_LATER = (
1234
+ "Cannot change the signature of {qn}: the default of {name} reads `{later}`, "
1235
+ "which is not bound yet when that default runs, so a call leaving {name} "
1236
+ "out would throw ReferenceError"
1237
+ )
1238
+ SIGNATURE_JS_STRICT_DEFAULTS = (
1239
+ "Cannot change the signature of {qn}: its body opens with a 'use strict' "
1240
+ "directive, and JavaScript refuses that directive in a function with a "
1241
+ "default parameter, so the new header would not load"
1242
+ )
1179
1243
  SIGNATURE_PLANNED = "{count} site(s) would be rewritten, {skipped} left unmapped"
1180
1244
  SIGNATURE_PARSE_FAILED = "Signature change rolled back: {files} would no longer parse"
1181
1245
  SIGNATURE_CONTRACT_FAILED = (
@@ -348,7 +348,11 @@ CGR_INSTRUCTIONS_SEPARATOR = "\n\n---\n\n"
348
348
  # Read only from the environment cgr starts with, never from `.env` in the
349
349
  # working directory, which usually belongs to the repository being analysed.
350
350
  ENVIRONMENT_ONLY_SETTINGS = frozenset(
351
- {"CGR_TRUST_PROJECT_INSTRUCTIONS", "CGR_ALLOW_SENSITIVE_READS"}
351
+ {
352
+ "CGR_TRUST_PROJECT_INSTRUCTIONS",
353
+ "CGR_ALLOW_SENSITIVE_READS",
354
+ "CGR_ALLOW_SENSITIVE_WRITES",
355
+ }
352
356
  )
353
357
  # Every file cgr keeps about one checkout. They live in that checkout's
354
358
  # directory under CGR_HOME / CGR_STATE_DIRNAME rather than in the working
@@ -116,6 +116,11 @@ MCP_READ_ONLY_REFUSED = (
116
116
  )
117
117
 
118
118
 
119
+ # The HTTP transport serves plain HTTP; a Host header leaves port 80 out.
120
+ HTTP_SCHEME = "http"
121
+ HTTP_DEFAULT_PORT = 80
122
+
123
+
119
124
  class MCPTransport(StrEnum):
120
125
  STDIO = "stdio"
121
126
  HTTP = "http"
@@ -217,6 +222,10 @@ MCP_READ_SENSITIVE_REFUSED = (
217
222
  "{path} looks like a credential file, so it is not served over MCP. "
218
223
  "Export CGR_ALLOW_SENSITIVE_READS=true in the server's environment to serve it."
219
224
  )
225
+ MCP_WRITE_SENSITIVE_REFUSED = (
226
+ "{path} looks like a credential file, so it is not changed over MCP. "
227
+ "Export CGR_ALLOW_SENSITIVE_WRITES=true in the server's environment to allow it."
228
+ )
220
229
  # A `path:line` target whose line no source file can reach; sent on, it
221
230
  # overflows the 64-bit Bolt integer in the driver.
222
231
  MCP_RESOLVE_LINE_OUT_OF_RANGE = "Line {line} of {path} is out of range."
@@ -1340,3 +1340,39 @@ SENSITIVE_PARENT_FILES = frozenset(
1340
1340
  )
1341
1341
  # Everything under these directories is key material.
1342
1342
  SENSITIVE_DIR_NAMES = frozenset({".ssh", ".gnupg"})
1343
+ # Windows drops trailing dots and spaces from a name, so `.git.` opens `.git`.
1344
+ WINDOWS_IGNORED_NAME_TAIL = ". "
1345
+ # A worktree's git directory names the shared one, which holds the config.
1346
+ GIT_COMMONDIR_FILENAME = "commondir"
1347
+ # What git looks for to take a folder for a git directory: a HEAD file beside
1348
+ # these folders, or beside a `commondir` file.
1349
+ GIT_HEAD_FILENAME = "HEAD"
1350
+ GIT_DIR_SUBDIRS = ("objects", "refs")
1351
+ # Asks git which git directory, and which shared one, it uses for a folder.
1352
+ # `rev-parse` runs nothing a config names, and fsmonitor is switched off on
1353
+ # top. The answer must not hang on settings the project can reach (its
1354
+ # `.env` reaches the environment): bare-repository discovery and the
1355
+ # ownership check are fixed here, on the command line, which outranks every
1356
+ # config file. Needs git 2.31 for `--path-format`; an older git falls back
1357
+ # to the rules that need no git.
1358
+ GIT_LOCATE_DIR_ARGS = (
1359
+ "-c",
1360
+ "core.fsmonitor=false",
1361
+ "-c",
1362
+ "safe.bareRepository=all",
1363
+ "-c",
1364
+ "safe.directory=*",
1365
+ "rev-parse",
1366
+ "--path-format=absolute",
1367
+ "--git-dir",
1368
+ "--git-common-dir",
1369
+ )
1370
+ GIT_LOCATE_DIR_TIMEOUT_S = 5
1371
+ GIT_CEILING_DIRECTORIES_ENV = "GIT_CEILING_DIRECTORIES"
1372
+ # Every variable git reads starts with this; none is passed on, so a
1373
+ # `GIT_DIR` or `GIT_CONFIG_PARAMETERS` the project set cannot steer or break
1374
+ # the answer. Only the repository's own config is read.
1375
+ GIT_ENV_PREFIX = "GIT_"
1376
+ GIT_CONFIG_NOSYSTEM_ENV = "GIT_CONFIG_NOSYSTEM"
1377
+ GIT_CONFIG_GLOBAL_ENV = "GIT_CONFIG_GLOBAL"
1378
+ GIT_ENV_ON = "1"
@@ -23,9 +23,9 @@ the structural delta and undone when its postcondition contract (issue
23
23
  #1531) fails: every site of the changed signature must read as mapped or
24
24
  be in the unmapped list.
25
25
 
26
- Python only for now: the header and the argument lists are read with the
27
- Python grammar, and a definition in any other language refuses (issue
28
- #1908).
26
+ Headers and argument lists are read and written through a dialect per
27
+ language: Python, and JavaScript (`signature_js.py`, `signature_js_bind.py`). A definition in any
28
+ other language refuses (issue #1908).
29
29
  """
30
30
 
31
31
  from __future__ import annotations
@@ -49,17 +49,19 @@ from .signature_bind import (
49
49
  _find_definition,
50
50
  _params_of,
51
51
  _refuse_body_conflicts,
52
+ _render_arguments,
52
53
  _render_site,
53
54
  _take_receiver,
54
55
  _text,
55
56
  )
56
57
  from .signature_contract import enforce_contract
58
+ from .signature_js_bind import JAVASCRIPT
57
59
  from .signature_spec import (
58
60
  _CALL,
59
61
  _DEFINITION,
60
- _IDENTIFIER_RE,
61
62
  LANGUAGES_ISSUE,
62
63
  ParamSpec,
64
+ SignatureDialect,
63
65
  SignatureRefused,
64
66
  SignatureReport,
65
67
  SignatureSite,
@@ -69,6 +71,7 @@ from .signature_spec import (
69
71
  _Edit,
70
72
  _Header,
71
73
  _new_specs,
74
+ _parse_new_param,
72
75
  _resolve_sources,
73
76
  _Source,
74
77
  _Unmapped,
@@ -95,8 +98,7 @@ class SignatureChanger:
95
98
  # transaction undone when the contract fails.
96
99
  self.reingest = reingest
97
100
  parsers, _queries = load_parsers()
98
- self._parsers = dict(parsers)
99
- self._parser: Parser = self._parsers[cs.SupportedLanguage.PYTHON]
101
+ self._parsers: dict[cs.SupportedLanguage, Parser] = dict(parsers)
100
102
 
101
103
  # -- planning --
102
104
 
@@ -126,14 +128,17 @@ class SignatureChanger:
126
128
  patcher = Patcher(self.repo_root, parsers=self._parsers)
127
129
  members = hierarchy(self.fetch_all, self.project, qn).members
128
130
  headers = [self._header(member, patcher) for member in members]
131
+ dialect = _DIALECTS[headers[0].language]
129
132
  old = headers[0].params
130
133
  old_names = [p.name for p in old]
131
134
  _check_hierarchy(qn, headers, old_names)
132
- new = _new_specs(new_params, old)
135
+ new = _new_specs(
136
+ new_params, old, dialect.parse_new_param, dialect.defaults_last
137
+ )
133
138
  sources = _resolve_sources(new, old, mapping or {})
134
139
  for spec, source in zip(new, sources, strict=True):
135
140
  if source is not None and source.literal is not None:
136
- _check_literal(spec, source.literal)
141
+ dialect.check_literal(spec, source.literal)
137
142
  # A bare old name carries that parameter's own spelling over (each
138
143
  # override keeps its own); spelling a kept parameter out again
139
144
  # re-annotates it.
@@ -143,11 +148,10 @@ class SignatureChanger:
143
148
  # that happens to match the primary compared equal and counted as
144
149
  # carried -- leaving an override declaring `a: str` un-annotated,
145
150
  # which is the opposite of what was asked (Copilot, PR #1533).
146
- carried = {
147
- text.strip()
148
- for text in new_params
149
- if _IDENTIFIER_RE.fullmatch(text.strip()) and text.strip() in old_names
150
- }
151
+ #
152
+ # An old name is a name in every dialect, so membership is the test:
153
+ # a Python identifier pattern would miss JavaScript's `$a`.
154
+ carried = {text.strip() for text in new_params if text.strip() in old_names}
151
155
  # An old parameter fed to a new one of another name is renamed, and
152
156
  # the body must follow or the definition would be broken.
153
157
  renamed = [
@@ -157,11 +161,11 @@ class SignatureChanger:
157
161
  and source.index is not None
158
162
  and old_names[source.index] != spec.name
159
163
  ]
160
- _refuse_body_conflicts(headers, old_names, new, renamed)
164
+ dialect.refuse_body_conflicts(headers, old_names, new, renamed)
161
165
  sites: list[SignatureSite] = []
162
166
  edits: list[_Edit] = []
163
167
  for header in headers:
164
- edits.extend(_definition_edits(header, new, carried, renamed))
168
+ edits.extend(dialect.definition_edits(header, new, carried, renamed))
165
169
  sites.append(
166
170
  SignatureSite(
167
171
  _DEFINITION,
@@ -197,9 +201,13 @@ class SignatureChanger:
197
201
  path = definition["path"]
198
202
  if not definition["found"] or not path:
199
203
  raise SignatureRefused(cs.RENAME_UNKNOWN.format(qn=qn))
200
- if get_language_for_extension(Path(path).suffix) != cs.SupportedLanguage.PYTHON:
204
+ language = get_language_for_extension(Path(path).suffix)
205
+ dialect = _DIALECTS.get(language) if language is not None else None
206
+ if language is None or dialect is None:
201
207
  raise SignatureRefused(
202
- cs.SIGNATURE_NOT_PYTHON.format(qn=qn, path=path, issue=LANGUAGES_ISSUE)
208
+ cs.SIGNATURE_UNSUPPORTED_LANGUAGE.format(
209
+ qn=qn, path=path, issue=LANGUAGES_ISSUE
210
+ )
203
211
  )
204
212
  try:
205
213
  source = patcher.source(path)
@@ -210,13 +218,13 @@ class SignatureChanger:
210
218
  start = definition["start_line"] or 1
211
219
  end = definition["end_line"] or start
212
220
  name = definition["name"] or qn.rsplit(cs.SEPARATOR_DOT, 1)[-1]
213
- root = self._parser.parse(source).root_node
214
- node = _find_definition(root, name, start, end)
221
+ root = self._parsers[language].parse(source).root_node
222
+ node = dialect.find_definition(root, name, start, end)
215
223
  params = node.child_by_field_name(cs.FIELD_PARAMETERS) if node else None
216
224
  if node is None or params is None:
217
225
  raise SignatureRefused(cs.SIGNATURE_NO_HEADER.format(qn=qn, path=path))
218
- specs = _params_of(params, source, qn)
219
- receiver = _take_receiver(qn, definition["label"], specs, node, source)
226
+ specs = dialect.params_of(params, source, qn)
227
+ receiver = dialect.take_receiver(qn, definition["label"], specs, node, source)
220
228
  return _Header(
221
229
  qn,
222
230
  path,
@@ -227,6 +235,7 @@ class SignatureChanger:
227
235
  specs,
228
236
  node,
229
237
  source,
238
+ language,
230
239
  )
231
240
 
232
241
  def _collect_sites(
@@ -241,6 +250,7 @@ class SignatureChanger:
241
250
  edits: list[_Edit],
242
251
  ) -> list[UnmappedSite]:
243
252
  unmapped: list[UnmappedSite] = []
253
+ render = _DIALECTS[headers[0].language].render_arguments
244
254
  candidates = self._candidates(headers, old, allow_heuristic, patcher, unmapped)
245
255
  # Innermost first, so a site nested in another's arguments (or a
246
256
  # body rename inside a recursive call) is already planned when the
@@ -257,7 +267,7 @@ class SignatureChanger:
257
267
  for index in order:
258
268
  candidate = candidates[index]
259
269
  try:
260
- edit = _render_site(candidate, new, sources, edits)
270
+ edit = _render_site(candidate, new, sources, edits, render)
261
271
  except _Unmapped as skip:
262
272
  unmapped.append(
263
273
  UnmappedSite(
@@ -350,8 +360,11 @@ class SignatureChanger:
350
360
  )
351
361
  if resolution in AMBIGUOUS and not allow_heuristic:
352
362
  raise _Unmapped(cs.SIGNATURE_SITE_GUESSED.format(resolution=resolution))
353
- if get_language_for_extension(Path(path).suffix) != cs.SupportedLanguage.PYTHON:
354
- raise _Unmapped(cs.SIGNATURE_SITE_NOT_PYTHON.format(path=path))
363
+ # A call from another language reaches the definition through some
364
+ # binding layer this operation cannot read.
365
+ if get_language_for_extension(Path(path).suffix) != header.language:
366
+ raise _Unmapped(cs.SIGNATURE_SITE_OTHER_LANGUAGE.format(path=path))
367
+ dialect = _DIALECTS[header.language]
355
368
  try:
356
369
  source = patcher.source(path)
357
370
  except PatcherError as error:
@@ -364,24 +377,12 @@ class SignatureChanger:
364
377
  if end_line is not None and end_col is not None
365
378
  else None
366
379
  )
367
- root = self._parser.parse(source).root_node
380
+ root = self._parsers[header.language].parse(source).root_node
368
381
  call = call_node_at(root, line, col, recorded_end)
369
382
  if call is None:
370
383
  raise _Unmapped(cs.SIGNATURE_SITE_NO_CALL)
371
- args = call.child_by_field_name(cs.FIELD_ARGUMENTS)
372
- if args is None or args.type != cs.TS_ARGUMENT_LIST:
373
- # `helper(x for x in xs)`: a generator, not a list of values.
374
- raise _Unmapped(
375
- cs.SIGNATURE_SITE_UNREADABLE.format(text=_text(args or call, source))
376
- )
377
- if _binds_its_receiver(header) and _passes_receiver(call, source, header.qn):
378
- # `Base.f(obj, a)` passes `self` as its first argument: binding
379
- # it to the first declared parameter would shift every value
380
- # one slot. Left as written rather than guessed at.
381
- raise _Unmapped(
382
- cs.SIGNATURE_SITE_EXPLICIT_RECEIVER.format(text=_text(call, source))
383
- )
384
- bound = _bind_arguments(args, source, old)
384
+ args = dialect.site_arguments(header, call, source)
385
+ bound = dialect.bind_arguments(args, source, old)
385
386
  site = SignatureSite(_CALL, path, line, col, row["qualified_name"], resolution)
386
387
  return _Candidate(
387
388
  site, (args.start_byte, args.end_byte), _text(args, source), bound
@@ -487,6 +488,23 @@ class SignatureChanger:
487
488
  return report
488
489
 
489
490
 
491
+ def _python_site_arguments(header: _Header, call: Node, source: bytes) -> Node:
492
+ args = call.child_by_field_name(cs.FIELD_ARGUMENTS)
493
+ if args is None or args.type != cs.TS_ARGUMENT_LIST:
494
+ # `helper(x for x in xs)`: a generator, not a list of values.
495
+ raise _Unmapped(
496
+ cs.SIGNATURE_SITE_UNREADABLE.format(text=_text(args or call, source))
497
+ )
498
+ if _binds_its_receiver(header) and _passes_receiver(call, source, header.qn):
499
+ # `Base.f(obj, a)` passes `self` as its first argument: binding
500
+ # it to the first declared parameter would shift every value
501
+ # one slot. Left as written rather than guessed at.
502
+ raise _Unmapped(
503
+ cs.SIGNATURE_SITE_EXPLICIT_RECEIVER.format(text=_text(call, source))
504
+ )
505
+ return args
506
+
507
+
490
508
  def _binds_its_receiver(header: _Header) -> bool:
491
509
  """An instance method: called through an instance, `self` is implicit.
492
510
 
@@ -566,6 +584,23 @@ def _imported_as(node: Node, source: bytes, alias: str) -> str | None:
566
584
  return None
567
585
 
568
586
 
587
+ _DIALECTS: dict[cs.SupportedLanguage, SignatureDialect] = {
588
+ cs.SupportedLanguage.PYTHON: SignatureDialect(
589
+ find_definition=_find_definition,
590
+ params_of=_params_of,
591
+ take_receiver=_take_receiver,
592
+ parse_new_param=_parse_new_param,
593
+ check_literal=_check_literal,
594
+ refuse_body_conflicts=_refuse_body_conflicts,
595
+ definition_edits=_definition_edits,
596
+ site_arguments=_python_site_arguments,
597
+ bind_arguments=_bind_arguments,
598
+ render_arguments=_render_arguments,
599
+ ),
600
+ cs.SupportedLanguage.JS: JAVASCRIPT,
601
+ }
602
+
603
+
569
604
  def change_signature(
570
605
  repo_root: Path,
571
606
  fetch_all: QueryFn,
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  import re
9
9
  import symtable
10
- from collections.abc import Iterable, Mapping, Sequence
10
+ from collections.abc import Callable, Iterable, Mapping, Sequence
11
11
  from itertools import product
12
12
 
13
13
  from tree_sitter import Node
@@ -508,6 +508,9 @@ def _render_site(
508
508
  new: Sequence[ParamSpec],
509
509
  sources: Sequence[_Source | None],
510
510
  edits: list[_Edit],
511
+ render: Callable[
512
+ [Sequence[ParamSpec], Sequence[_Source | None], Mapping[int, _Binding]], str
513
+ ] = _render_arguments,
511
514
  ) -> _Edit | None:
512
515
  """The site's edit, with any edit planned inside its arguments folded in.
513
516
 
@@ -516,7 +519,7 @@ def _render_site(
516
519
  """
517
520
  bound, consumed = _fold(candidate, edits)
518
521
  _refuse_dropped_effects(sources, bound)
519
- text = _render_arguments(new, sources, bound)
522
+ text = render(new, sources, bound)
520
523
  for edit in consumed:
521
524
  edits.remove(edit)
522
525
  if not consumed and text == candidate.text: