attocode-code-intel 0.1.20__tar.gz → 0.1.22__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 (763) hide show
  1. attocode_code_intel-0.1.22/.gitignore +59 -0
  2. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/PKG-INFO +11 -2
  3. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/README.md +10 -1
  4. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/pyproject.toml +3 -3
  5. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/__init__.py +1 -1
  6. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ast_service.py +19 -1
  7. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +118 -69
  8. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/codebase_context.py +40 -57
  9. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cross_references.py +2 -2
  10. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/semantic_search.py +47 -12
  11. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +2 -2
  12. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ts_parser.py +26 -10
  13. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/llm.py +47 -15
  14. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/synthesis.py +5 -21
  15. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/service.py +4 -0
  16. attocode_code_intel-0.1.22/tests/fixtures/sample_project/.attocode/.gitignore +2 -0
  17. attocode_code_intel-0.1.22/tests/fixtures/sample_project/main.py +34 -0
  18. attocode_code_intel-0.1.22/tests/fixtures/sample_project/models.py +25 -0
  19. attocode_code_intel-0.1.22/tests/fixtures/sample_project/utils.py +26 -0
  20. attocode_code_intel-0.1.22/tests/test_capacity_experiment.py +72 -0
  21. attocode_code_intel-0.1.22/tests/test_discovery_ceiling.py +120 -0
  22. attocode_code_intel-0.1.22/tests/test_fallback_lexical.py +117 -0
  23. attocode_code_intel-0.1.22/tests/test_ocaml_parser_routing.py +88 -0
  24. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_optional_language_depth.py +37 -0
  25. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_product.py +19 -0
  26. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_evidence.py +1 -1
  27. attocode_code_intel-0.1.22/tests/test_search_coverage.py +237 -0
  28. attocode_code_intel-0.1.22/tests/test_search_coverage_scale.py +92 -0
  29. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_synthesis.py +9 -15
  30. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_mcp_bench.py +1 -1
  31. attocode_code_intel-0.1.22/tests/unit/integrations/utilities/__init__.py +0 -0
  32. attocode_code_intel-0.1.20/.gitignore +0 -88
  33. attocode_code_intel-0.1.20/evals/README.md +0 -377
  34. attocode_code_intel-0.1.20/evals/ast_restart_probe.py +0 -101
  35. attocode_code_intel-0.1.20/evals/body_cost_probe.py +0 -101
  36. attocode_code_intel-0.1.20/evals/broad_candidate_audit.yaml +0 -59
  37. attocode_code_intel-0.1.20/evals/broad_query_cases.yaml +0 -89
  38. attocode_code_intel-0.1.20/evals/broad_query_external_cases.yaml +0 -79
  39. attocode_code_intel-0.1.20/evals/broad_query_final_holdout.yaml +0 -78
  40. attocode_code_intel-0.1.20/evals/client_comparison.py +0 -151
  41. attocode_code_intel-0.1.20/evals/client_responses.py +0 -152
  42. attocode_code_intel-0.1.20/evals/codex_repair_study.py +0 -415
  43. attocode_code_intel-0.1.20/evals/daily.py +0 -77
  44. attocode_code_intel-0.1.20/evals/designs/2026-10-13-codex-repair-diagnostic.md +0 -49
  45. attocode_code_intel-0.1.20/evals/designs/2026-10-13-r7-task-completion-pilot.md +0 -253
  46. attocode_code_intel-0.1.20/evals/designs/2026-10-14-workflow-pilot.md +0 -63
  47. attocode_code_intel-0.1.20/evals/designs/2026-10-15-body-file-trial.md +0 -34
  48. attocode_code_intel-0.1.20/evals/designs/2026-10-15-body-file-validation.json +0 -427
  49. attocode_code_intel-0.1.20/evals/designs/2026-10-15-expansion-ablation.md +0 -33
  50. attocode_code_intel-0.1.20/evals/designs/2026-10-15-expansion-development.json +0 -192
  51. attocode_code_intel-0.1.20/evals/designs/2026-10-15-expansion-validation.json +0 -180
  52. attocode_code_intel-0.1.20/evals/designs/2026-10-15-fresh-navigation-queries.json +0 -90
  53. attocode_code_intel-0.1.20/evals/designs/2026-10-15-headroom-retrieval-questions.json +0 -859
  54. attocode_code_intel-0.1.20/evals/designs/2026-10-15-headroom-retrieval.md +0 -17
  55. attocode_code_intel-0.1.20/evals/designs/2026-10-16-cross-file-questions.json +0 -158
  56. attocode_code_intel-0.1.20/evals/designs/2026-10-16-deep-page-questions.json +0 -160
  57. attocode_code_intel-0.1.20/evals/designs/2026-10-16-kotlin-test-paths.json +0 -106
  58. attocode_code_intel-0.1.20/evals/designs/2026-10-16-navigation-prefix-validation.json +0 -266
  59. attocode_code_intel-0.1.20/evals/designs/2026-10-16-navigation-prefix.json +0 -310
  60. attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-candidate.patch.gz +0 -0
  61. attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-development.json +0 -208
  62. attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-freeze.json +0 -48
  63. attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-validation.json +0 -208
  64. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/accepted.patch.gz +0 -0
  65. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/boundaries.patch.gz +0 -0
  66. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/combined.patch.gz +0 -0
  67. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/expansion.patch.gz +0 -0
  68. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/identity.patch.gz +0 -0
  69. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/manifest.json +0 -76
  70. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/negation.patch.gz +0 -0
  71. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/owner_only.patch.gz +0 -0
  72. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/owners.patch.gz +0 -0
  73. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-confirmation-freeze.json +0 -7
  74. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-confirmation.json +0 -206
  75. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-development.json +0 -206
  76. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-freeze.json +0 -348
  77. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-validation.json +0 -206
  78. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-usefulness-development.json +0 -285
  79. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-usefulness-validation.json +0 -285
  80. attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-usefulness.json +0 -36
  81. attocode_code_intel-0.1.20/evals/designs/2026-10-16-test-intent.json +0 -210
  82. attocode_code_intel-0.1.20/evals/designs/2026-10-17-change-focus-candidate.patch.gz +0 -0
  83. attocode_code_intel-0.1.20/evals/designs/2026-10-17-change-workflow-replays.json +0 -98
  84. attocode_code_intel-0.1.20/evals/designs/2026-10-17-change-workflow-replays.md +0 -61
  85. attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-c2f.patch.gz +0 -0
  86. attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-development.json +0 -409
  87. attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-freeze.json +0 -49
  88. attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-t.patch.gz +0 -0
  89. attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-tcf.patch.gz +0 -0
  90. attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-validation.json +0 -394
  91. attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-candidate.patch.gz +0 -0
  92. attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-development.json +0 -328
  93. attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-freeze.json +0 -36
  94. attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-validation.json +0 -342
  95. attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-candidate.json +0 -350
  96. attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-development.json +0 -1467
  97. attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-freeze.json +0 -43
  98. attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-t2.patch.gz +0 -0
  99. attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-t3.patch.gz +0 -0
  100. attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-validation.json +0 -400
  101. attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-candidate.json +0 -244
  102. attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-development.json +0 -1844
  103. attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-freeze.json +0 -47
  104. attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-p.patch.gz +0 -0
  105. attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-pf.patch.gz +0 -0
  106. attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-validation.json +0 -410
  107. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-candidate.json +0 -422
  108. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-development.json +0 -2220
  109. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-freeze.json +0 -44
  110. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q1.patch.gz +0 -0
  111. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q2.patch.gz +0 -0
  112. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q3.patch.gz +0 -0
  113. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q5.patch.gz +0 -0
  114. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s1.patch.gz +0 -0
  115. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2-equivalence.json +0 -12
  116. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2-freeze.json +0 -51
  117. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2-validation.json +0 -536
  118. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2.patch.gz +0 -0
  119. attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-validation.json +0 -558
  120. attocode_code_intel-0.1.20/evals/designs/2026-10-19-cpu-fn-embed-cost.json +0 -33
  121. attocode_code_intel-0.1.20/evals/designs/2026-10-20-clause-balance-validation.json +0 -499
  122. attocode_code_intel-0.1.20/evals/designs/2026-10-20-search-repair-validation.json +0 -419
  123. attocode_code_intel-0.1.20/evals/designs/2026-10-20-test-support-development.json +0 -294
  124. attocode_code_intel-0.1.20/evals/designs/2026-10-20-test-support-freeze.json +0 -32
  125. attocode_code_intel-0.1.20/evals/designs/2026-10-23-preview-windows.json +0 -512
  126. attocode_code_intel-0.1.20/evals/designs/2026-10-23-restart-fingerprints.json +0 -78
  127. attocode_code_intel-0.1.20/evals/discovery_reuse_probe.py +0 -63
  128. attocode_code_intel-0.1.20/evals/external_benchmarks.py +0 -132
  129. attocode_code_intel-0.1.20/evals/external_study.py +0 -409
  130. attocode_code_intel-0.1.20/evals/graded_blind_pack.yaml +0 -755
  131. attocode_code_intel-0.1.20/evals/lexical_sql_probe.py +0 -171
  132. attocode_code_intel-0.1.20/evals/localize_study.py +0 -743
  133. attocode_code_intel-0.1.20/evals/locbench_title_pack.yaml +0 -300
  134. attocode_code_intel-0.1.20/evals/onboarding_study.py +0 -205
  135. attocode_code_intel-0.1.20/evals/pilot.py +0 -206
  136. attocode_code_intel-0.1.20/evals/quality_scoring.py +0 -286
  137. attocode_code_intel-0.1.20/evals/quality_tasks.py +0 -315
  138. attocode_code_intel-0.1.20/evals/release_gate.py +0 -144
  139. attocode_code_intel-0.1.20/evals/repair_grading.py +0 -142
  140. attocode_code_intel-0.1.20/evals/repair_study.py +0 -513
  141. attocode_code_intel-0.1.20/evals/repair_worker.py +0 -442
  142. attocode_code_intel-0.1.20/evals/responses.py +0 -87
  143. attocode_code_intel-0.1.20/evals/restart_discovery_probe.py +0 -101
  144. attocode_code_intel-0.1.20/evals/search_evidence_audit.py +0 -297
  145. attocode_code_intel-0.1.20/evals/source_view_transfer.yaml +0 -58
  146. attocode_code_intel-0.1.20/evals/structural_write_probe.py +0 -83
  147. attocode_code_intel-0.1.20/evals/study.py +0 -485
  148. attocode_code_intel-0.1.20/evals/study_clients.py +0 -167
  149. attocode_code_intel-0.1.20/evals/study_events.py +0 -257
  150. attocode_code_intel-0.1.20/evals/study_tasks.py +0 -173
  151. attocode_code_intel-0.1.20/evals/token_overhead.py +0 -84
  152. attocode_code_intel-0.1.20/evals/understanding_scoring.py +0 -120
  153. attocode_code_intel-0.1.20/evals/understanding_study.py +0 -387
  154. attocode_code_intel-0.1.20/evals/warm_cache.py +0 -496
  155. attocode_code_intel-0.1.20/evals/workflows.py +0 -143
  156. attocode_code_intel-0.1.20/src/attocode_intel/_internal/tricks/recursive_context.py +0 -357
  157. attocode_code_intel-0.1.20/src/attocode_intel/_internal/types/__init__.py +0 -1
  158. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/LICENSE +0 -0
  159. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/GUIDELINES.md +0 -0
  160. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/__init__.py +0 -0
  161. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/errors/__init__.py +0 -0
  162. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
  163. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
  164. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
  165. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
  166. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +0 -0
  167. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
  168. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
  169. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
  170. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
  171. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
  172. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +0 -0
  173. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
  174. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
  175. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
  176. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
  177. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
  178. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
  179. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/index_probe.py +0 -0
  180. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/index_repair.py +0 -0
  181. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/index_store.py +0 -0
  182. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/language_registry.py +0 -0
  183. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
  184. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -0
  185. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/parse_diagnostics.py +0 -0
  186. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
  187. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
  188. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
  189. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
  190. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
  191. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
  192. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
  193. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
  194. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
  195. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
  196. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/lsp/client.py +0 -0
  197. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
  198. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
  199. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
  200. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
  201. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
  202. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
  203. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
  204. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
  205. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
  206. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
  207. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/utilities/ignore.py +0 -0
  208. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
  209. {attocode_code_intel-0.1.20/src/attocode_intel/_internal/tricks → attocode_code_intel-0.1.22/src/attocode_intel/_internal/types}/__init__.py +0 -0
  210. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/types/events.py +0 -0
  211. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/types/severity.py +0 -0
  212. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_shared.py +0 -0
  213. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/analysis_coverage.py +0 -0
  214. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/__init__.py +0 -0
  215. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/access.py +0 -0
  216. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/app.py +0 -0
  217. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/__init__.py +0 -0
  218. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/api_keys.py +0 -0
  219. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/context.py +0 -0
  220. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/jwt.py +0 -0
  221. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/oauth.py +0 -0
  222. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/passwords.py +0 -0
  223. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/deps.py +0 -0
  224. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/knowledge_bridge.py +0 -0
  225. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/mcp_transport.py +0 -0
  226. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/middleware.py +0 -0
  227. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/models.py +0 -0
  228. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/__init__.py +0 -0
  229. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/db_provider.py +0 -0
  230. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/local_provider.py +0 -0
  231. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/remote_provider.py +0 -0
  232. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/repository_source.py +0 -0
  233. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/__init__.py +0 -0
  234. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
  235. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/activity.py +0 -0
  236. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/adr.py +0 -0
  237. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/analysis.py +0 -0
  238. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/api_keys.py +0 -0
  239. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/auth.py +0 -0
  240. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/branches.py +0 -0
  241. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
  242. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/embeddings.py +0 -0
  243. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/files.py +0 -0
  244. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/files_v2.py +0 -0
  245. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/gc.py +0 -0
  246. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/git_v2.py +0 -0
  247. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/graph.py +0 -0
  248. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/graph_viz.py +0 -0
  249. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/health.py +0 -0
  250. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/history.py +0 -0
  251. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/jobs.py +0 -0
  252. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/learning.py +0 -0
  253. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/lsp.py +0 -0
  254. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/notify.py +0 -0
  255. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/operations.py +0 -0
  256. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/orgs.py +0 -0
  257. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/preferences.py +0 -0
  258. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/presence.py +0 -0
  259. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/projects.py +0 -0
  260. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/repos.py +0 -0
  261. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/search.py +0 -0
  262. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/snapshots.py +0 -0
  263. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/webhooks.py +0 -0
  264. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/websocket.py +0 -0
  265. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/static/graph.html +0 -0
  266. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/utils.py +0 -0
  267. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/__init__.py +0 -0
  268. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/hashing.py +0 -0
  269. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/provenance.py +0 -0
  270. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
  271. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/audit.py +0 -0
  272. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/bug_finder.py +0 -0
  273. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/bundle.py +0 -0
  274. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/catalog.py +0 -0
  275. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/change_evidence.py +0 -0
  276. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/change_investigation.py +0 -0
  277. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/change_review.py +0 -0
  278. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/cli.py +0 -0
  279. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/community.py +0 -0
  280. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/__init__.py +0 -0
  281. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/jev.py +0 -0
  282. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/redact.py +0 -0
  283. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/settings.py +0 -0
  284. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/config.py +0 -0
  285. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/crypto.py +0 -0
  286. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/__init__.py +0 -0
  287. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/base.py +0 -0
  288. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/engine.py +0 -0
  289. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/models.py +0 -0
  290. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/entrypoint.py +0 -0
  291. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/focused_evidence.py +0 -0
  292. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/freshness.py +0 -0
  293. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/gateway.py +0 -0
  294. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/__init__.py +0 -0
  295. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/credentials.py +0 -0
  296. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/manager.py +0 -0
  297. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/models.py +0 -0
  298. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/storage.py +0 -0
  299. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/graph_query_parser.py +0 -0
  300. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/helpers.py +0 -0
  301. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/__init__.py +0 -0
  302. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/debouncer.py +0 -0
  303. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/delta_indexer.py +0 -0
  304. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/full_indexer.py +0 -0
  305. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/incremental.py +0 -0
  306. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/parser.py +0 -0
  307. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/summarizer.py +0 -0
  308. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/installer.py +0 -0
  309. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/investigation_cli.py +0 -0
  310. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/knowledge.py +0 -0
  311. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/local_knowledge.py +0 -0
  312. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/alembic.ini +0 -0
  313. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/env.py +0 -0
  314. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/script.py.mako +0 -0
  315. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
  316. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
  317. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
  318. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
  319. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
  320. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
  321. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
  322. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
  323. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
  324. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
  325. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
  326. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
  327. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
  328. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
  329. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
  330. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
  331. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
  332. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
  333. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
  334. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
  335. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/onboarding.py +0 -0
  336. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/output.py +0 -0
  337. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/precision.py +0 -0
  338. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/presence.py +0 -0
  339. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/probe.py +0 -0
  340. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/project_dir.py +0 -0
  341. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/pubsub.py +0 -0
  342. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/query_ranking.py +0 -0
  343. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/readiness.py +0 -0
  344. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/redis.py +0 -0
  345. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/reference_pages.py +0 -0
  346. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/remote.py +0 -0
  347. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/repo_ranker.py +0 -0
  348. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/request_context.py +0 -0
  349. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/__init__.py +0 -0
  350. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/ci.py +0 -0
  351. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/combinators.py +0 -0
  352. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/enricher.py +0 -0
  353. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/evolution.py +0 -0
  354. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/executor.py +0 -0
  355. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/filters/__init__.py +0 -0
  356. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/filters/pipeline.py +0 -0
  357. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/formatter.py +0 -0
  358. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/hygiene.py +0 -0
  359. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/importers/__init__.py +0 -0
  360. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/importers/semgrep.py +0 -0
  361. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/loader.py +0 -0
  362. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/marketplace.py +0 -0
  363. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/metavar.py +0 -0
  364. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/model.py +0 -0
  365. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/__init__.py +0 -0
  366. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
  367. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
  368. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
  369. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
  370. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
  371. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
  372. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
  373. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
  374. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
  375. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
  376. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
  377. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
  378. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
  379. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
  380. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
  381. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
  382. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
  383. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
  384. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
  385. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
  386. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
  387. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
  388. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
  389. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
  390. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
  391. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
  392. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
  393. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
  394. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
  395. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
  396. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
  397. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
  398. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
  399. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
  400. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
  401. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
  402. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
  403. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
  404. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
  405. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
  406. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
  407. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
  408. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
  409. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
  410. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
  411. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
  412. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
  413. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
  414. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
  415. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
  416. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
  417. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
  418. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
  419. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
  420. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
  421. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
  422. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
  423. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
  424. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
  425. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
  426. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
  427. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
  428. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
  429. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
  430. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
  431. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
  432. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
  433. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
  434. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
  435. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
  436. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
  437. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
  438. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
  439. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
  440. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/plugins/__init__.py +0 -0
  441. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
  442. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/profiling.py +0 -0
  443. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/registry.py +0 -0
  444. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/sarif.py +0 -0
  445. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/testing.py +0 -0
  446. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/search_evidence.py +0 -0
  447. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/server.py +0 -0
  448. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/sharing.py +0 -0
  449. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/__init__.py +0 -0
  450. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/branch_overlay.py +0 -0
  451. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/content_store.py +0 -0
  452. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/dependency_store.py +0 -0
  453. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/diff_engine.py +0 -0
  454. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/embedding_store.py +0 -0
  455. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/provenance_store.py +0 -0
  456. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/security_scanner_db.py +0 -0
  457. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/symbol_store.py +0 -0
  458. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/structural_evidence.py +0 -0
  459. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/symbol_inspection.py +0 -0
  460. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/symbol_links.py +0 -0
  461. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/telemetry.py +0 -0
  462. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/test_ranking.py +0 -0
  463. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/__init__.py +0 -0
  464. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/fixtures.py +0 -0
  465. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/helpers.py +0 -0
  466. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/mocks.py +0 -0
  467. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/__init__.py +0 -0
  468. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/adr_tools.py +0 -0
  469. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/analysis_tools.py +0 -0
  470. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/composite_tools.py +0 -0
  471. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
  472. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/dead_code_tools.py +0 -0
  473. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/distill_tools.py +0 -0
  474. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/frecency_tools.py +0 -0
  475. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
  476. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/history_tools.py +0 -0
  477. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/learning_tools.py +0 -0
  478. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/lsp_tools.py +0 -0
  479. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/maintenance_tools.py +0 -0
  480. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/navigation_tools.py +0 -0
  481. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/overlay_tools.py +0 -0
  482. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/pin_store.py +0 -0
  483. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/pin_tools.py +0 -0
  484. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
  485. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/query_history_tools.py +0 -0
  486. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/readiness_tools.py +0 -0
  487. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/rule_tools.py +0 -0
  488. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/search_tools.py +0 -0
  489. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/snapshot_tools.py +0 -0
  490. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/__init__.py +0 -0
  491. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/job_utils.py +0 -0
  492. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/jobs.py +0 -0
  493. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/run.py +0 -0
  494. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/settings.py +0 -0
  495. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/.attocode/rules/team-preferences.yaml +0 -0
  496. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/go/bad_patterns.go +0 -0
  497. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/java/BadPatterns.java +0 -0
  498. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/python/bad_patterns.py +0 -0
  499. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/rust/bad_patterns.rs +0 -0
  500. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/typescript/bad_patterns.ts +0 -0
  501. {attocode_code_intel-0.1.20/tests/integration → attocode_code_intel-0.1.22/tests/fixtures/sample_project}/__init__.py +0 -0
  502. {attocode_code_intel-0.1.20/tests/integration/code_intel → attocode_code_intel-0.1.22/tests/integration}/__init__.py +0 -0
  503. {attocode_code_intel-0.1.20/tests/unit → attocode_code_intel-0.1.22/tests/integration/code_intel}/__init__.py +0 -0
  504. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/conftest.py +0 -0
  505. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_http_smoke.py +0 -0
  506. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_mcp_tools_audit.py +0 -0
  507. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_remote_mcp_http_integration.py +0 -0
  508. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_service_integration.py +0 -0
  509. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/test_rule_bench_floor_e2e.py +0 -0
  510. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_ast_snapshot.py +0 -0
  511. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_behavioral_negation.py +0 -0
  512. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_change_focus.py +0 -0
  513. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_change_investigation.py +0 -0
  514. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_chunk_identity.py +0 -0
  515. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_codex_repair_study.py +0 -0
  516. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_cold_discovery.py +0 -0
  517. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_cold_index_cost.py +0 -0
  518. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_compact_inspection.py +0 -0
  519. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_corpus_capture.py +0 -0
  520. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_daily_workflows.py +0 -0
  521. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_db_navigation_http.py +0 -0
  522. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_discovery_reuse.py +0 -0
  523. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_doctor.py +0 -0
  524. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_doctor_runtime.py +0 -0
  525. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_edit_restart.py +0 -0
  526. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_experiment_dispatch.py +0 -0
  527. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_experiment_evidence.py +0 -0
  528. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_experiment_readiness.py +0 -0
  529. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_external_study.py +0 -0
  530. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_file_symbol_scope.py +0 -0
  531. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_fixture_source_alias.py +0 -0
  532. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_focused_inspection.py +0 -0
  533. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_image_budget.py +0 -0
  534. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_importance_publication.py +0 -0
  535. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_probe.py +0 -0
  536. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_processes.py +0 -0
  537. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_reuse.py +0 -0
  538. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_sequences.py +0 -0
  539. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_kotlin_test_paths.py +0 -0
  540. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_language_capabilities.py +0 -0
  541. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lean_profile.py +0 -0
  542. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lexical_sql_cost.py +0 -0
  543. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_local_reranker.py +0 -0
  544. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_local_workflow_evidence.py +0 -0
  545. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_localize_study.py +0 -0
  546. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lsp_diagnostics.py +0 -0
  547. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lsp_document_lifecycle.py +0 -0
  548. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lsp_stderr_lifecycle.py +0 -0
  549. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_mcp_search_evaluation.py +0 -0
  550. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_mixed_workspace.py +0 -0
  551. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_module_ownership.py +0 -0
  552. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_native_capture.py +0 -0
  553. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_native_experiment.py +0 -0
  554. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_navigation_evidence.py +0 -0
  555. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_navigation_prefix_trial.py +0 -0
  556. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_onboarding_study.py +0 -0
  557. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_operation_contracts.py +0 -0
  558. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_optional_grammar_admission.py +0 -0
  559. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_parse_recovery.py +0 -0
  560. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_parser_thread_isolation.py +0 -0
  561. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_pilot.py +0 -0
  562. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_precision_protocol.py +0 -0
  563. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_precision_recovery.py +0 -0
  564. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_admission.py +0 -0
  565. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_experiment.py +0 -0
  566. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_sources.py +0 -0
  567. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_windows.py +0 -0
  568. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_cloud.py +0 -0
  569. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_evaluation.py +0 -0
  570. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_lifecycle.py +0 -0
  571. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_runner.py +0 -0
  572. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_query_ranking.py +0 -0
  573. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_query_requirements.py +0 -0
  574. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_ranking_intent.py +0 -0
  575. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_real_language_server.py +0 -0
  576. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_recovery_readiness.py +0 -0
  577. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_release_verification.py +0 -0
  578. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_remote.py +0 -0
  579. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_repair_study.py +0 -0
  580. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_restart_experiment.py +0 -0
  581. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_ablation.py +0 -0
  582. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_audit.py +0 -0
  583. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_body_trial.py +0 -0
  584. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_cycle.py +0 -0
  585. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_budget_repair.py +0 -0
  586. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_evidence.py +0 -0
  587. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_evidence_audit.py +0 -0
  588. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_usefulness.py +0 -0
  589. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_snippet_budget.py +0 -0
  590. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_source_exclusions.py +0 -0
  591. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_structural_evidence.py +0 -0
  592. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_structural_write_cost.py +0 -0
  593. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_study.py +0 -0
  594. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_symbol_order.py +0 -0
  595. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_systemone_ranker.py +0 -0
  596. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_test_intent_trial.py +0 -0
  597. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_token_overhead.py +0 -0
  598. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_trigram_workspace.py +0 -0
  599. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_understanding_evaluation.py +0 -0
  600. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_walk_order.py +0 -0
  601. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_warm_cache.py +0 -0
  602. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_workflow_sequences.py +0 -0
  603. {attocode_code_intel-0.1.20/tests/unit/code_intel → attocode_code_intel-0.1.22/tests/unit}/__init__.py +0 -0
  604. {attocode_code_intel-0.1.20/tests/unit/context → attocode_code_intel-0.1.22/tests/unit/code_intel}/__init__.py +0 -0
  605. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/conftest.py +0 -0
  606. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_advisory_lock.py +0 -0
  607. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_api.py +0 -0
  608. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_api_phase3a.py +0 -0
  609. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_api_v2.py +0 -0
  610. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_auth.py +0 -0
  611. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_branch_versioning.py +0 -0
  612. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_bug_finder.py +0 -0
  613. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_call_graph_tool.py +0 -0
  614. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_ci_runner.py +0 -0
  615. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_lifecycle.py +0 -0
  616. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_maintenance_local.py +0 -0
  617. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_ops.py +0 -0
  618. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_query_commands.py +0 -0
  619. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_remote.py +0 -0
  620. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_codex_rereview_polish.py +0 -0
  621. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_combinators.py +0 -0
  622. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_confidence.py +0 -0
  623. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_confidence_adoption.py +0 -0
  624. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_config.py +0 -0
  625. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_config_remote.py +0 -0
  626. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cross_mode.py +0 -0
  627. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_db_security_scan.py +0 -0
  628. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_deps.py +0 -0
  629. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_diff_engine.py +0 -0
  630. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_edge_cases.py +0 -0
  631. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_frecency.py +0 -0
  632. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_fuzzy.py +0 -0
  633. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_index_store_migration.py +0 -0
  634. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_kw_index_status.py +0 -0
  635. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_lsp_call_graph.py +0 -0
  636. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_lsp_enrichment.py +0 -0
  637. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_lsp_extended_models.py +0 -0
  638. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_marketplace.py +0 -0
  639. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_metavar.py +0 -0
  640. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_middleware.py +0 -0
  641. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_notify_enhanced.py +0 -0
  642. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_org_isolation.py +0 -0
  643. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_pack_autoload.py +0 -0
  644. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_profiling.py +0 -0
  645. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_project_discovery.py +0 -0
  646. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_provenance_store.py +0 -0
  647. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_pubsub_streams.py +0 -0
  648. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_query_constraints.py +0 -0
  649. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_query_history.py +0 -0
  650. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_readiness.py +0 -0
  651. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_reindex_embeddings.py +0 -0
  652. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_remote_local_fallback.py +0 -0
  653. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_remote_provider.py +0 -0
  654. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_remote_reliability.py +0 -0
  655. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_repo_ranker.py +0 -0
  656. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_evolution.py +0 -0
  657. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_hygiene.py +0 -0
  658. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_tools.py +0 -0
  659. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_violations.py +0 -0
  660. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rules_engine.py +0 -0
  661. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rules_integration.py +0 -0
  662. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_sarif.py +0 -0
  663. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_search_tools.py +0 -0
  664. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_server_startup.py +0 -0
  665. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_service.py +0 -0
  666. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_service_mode.py +0 -0
  667. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_status_health.py +0 -0
  668. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_structural_executor.py +0 -0
  669. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_supply_chain_rules.py +0 -0
  670. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_testing_framework.py +0 -0
  671. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_webhook_encryption.py +0 -0
  672. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/__init__.py +0 -0
  673. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/conftest.py +0 -0
  674. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_adr_tools.py +0 -0
  675. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_analysis_tools.py +0 -0
  676. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_dead_code_tools.py +0 -0
  677. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_distill_tools.py +0 -0
  678. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_history_tools.py +0 -0
  679. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_learning_tools.py +0 -0
  680. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_lsp_tools.py +0 -0
  681. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_maintenance_tools_phase2.py +0 -0
  682. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_navigation_tools.py +0 -0
  683. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_phase2c_anchors_and_overlays.py +0 -0
  684. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_readiness_tools.py +0 -0
  685. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_search_status_mismatch.py +0 -0
  686. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_search_tools.py +0 -0
  687. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_server_tools.py +0 -0
  688. {attocode_code_intel-0.1.20/tests/unit/eval → attocode_code_intel-0.1.22/tests/unit/context}/__init__.py +0 -0
  689. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_action_hash.py +0 -0
  690. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_ast_service_adapter.py +0 -0
  691. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_blob_oid.py +0 -0
  692. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_cache_manifest.py +0 -0
  693. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_cas.py +0 -0
  694. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_embedding_rotation.py +0 -0
  695. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_pagerank_restoration.py +0 -0
  696. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_provenance.py +0 -0
  697. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_retrieval_pin.py +0 -0
  698. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_vector_store_dim_safety.py +0 -0
  699. {attocode_code_intel-0.1.20/tests/unit/integrations → attocode_code_intel-0.1.22/tests/unit/eval}/__init__.py +0 -0
  700. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/conftest.py +0 -0
  701. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_acc_at_k.py +0 -0
  702. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_broad_candidate_audit.py +0 -0
  703. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_calibration_demo.py +0 -0
  704. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_harness.py +0 -0
  705. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_agents.py +0 -0
  706. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_ci.py +0 -0
  707. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_datasets.py +0 -0
  708. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_dense.py +0 -0
  709. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_function_bm25.py +0 -0
  710. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_function_dense.py +0 -0
  711. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_rerank.py +0 -0
  712. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_retrieve.py +0 -0
  713. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_run.py +0 -0
  714. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_stats.py +0 -0
  715. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_accuracy.py +0 -0
  716. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_config.py +0 -0
  717. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_corpus.py +0 -0
  718. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_evaluator.py +0 -0
  719. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_predicate.py +0 -0
  720. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_scoring.py +0 -0
  721. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_template_engine.py +0 -0
  722. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_harness_import.py +0 -0
  723. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_search_quality_reporting.py +0 -0
  724. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_search_readiness.py +0 -0
  725. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_seed_attocode_fixtures.py +0 -0
  726. {attocode_code_intel-0.1.20/tests/unit/integrations/context → attocode_code_intel-0.1.22/tests/unit/integrations}/__init__.py +0 -0
  727. {attocode_code_intel-0.1.20/tests/unit/integrations/utilities → attocode_code_intel-0.1.22/tests/unit/integrations/context}/__init__.py +0 -0
  728. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_architecture_drift.py +0 -0
  729. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_ast_service_hydration.py +0 -0
  730. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_body_chunking.py +0 -0
  731. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_call_graph.py +0 -0
  732. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_code_analyzer.py +0 -0
  733. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_codebase_ast.py +0 -0
  734. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_codebase_context.py +0 -0
  735. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_context_stores_closed.py +0 -0
  736. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_cross_ref_search.py +0 -0
  737. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_embedder_default.py +0 -0
  738. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_embeddings.py +0 -0
  739. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_embeddings_query.py +0 -0
  740. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_go_symbols.py +0 -0
  741. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_hydration.py +0 -0
  742. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_index_store.py +0 -0
  743. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_model_mismatch.py +0 -0
  744. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_path_downweight.py +0 -0
  745. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_query_routing.py +0 -0
  746. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_semantic_search.py +0 -0
  747. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_supported_languages.py +0 -0
  748. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_temporal_coupling.py +0 -0
  749. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_trigram_index.py +0 -0
  750. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_trigram_regex.py +0 -0
  751. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_ts_parser.py +0 -0
  752. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_dataflow.py +0 -0
  753. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_feature_flags.py +0 -0
  754. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_new_security_rules.py +0 -0
  755. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_security_autofix.py +0 -0
  756. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_security_matcher.py +0 -0
  757. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_streaming_lsp.py +0 -0
  758. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/utilities/test_ignore.py +0 -0
  759. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/utilities/test_token_estimate.py +0 -0
  760. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_code_intel.py +0 -0
  761. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_code_intel_hydration.py +0 -0
  762. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_errors.py +0 -0
  763. {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_memory_store.py +0 -0
@@ -0,0 +1,59 @@
1
+ # Python
2
+ dist/
3
+ __pycache__/
4
+ .venv/
5
+ *.egg-info/
6
+ *.db
7
+ *.db-shm
8
+ *.db-wal
9
+ *.jsonl
10
+ .mypy_cache/
11
+ .pytest_cache/
12
+ .ruff_cache/
13
+
14
+ # Node
15
+ node_modules/
16
+ *.tsbuildinfo
17
+
18
+ # Environment
19
+ .env
20
+
21
+ # Claude/Agent
22
+ .claude/
23
+ .agent/
24
+ .traces/
25
+ .production-agent-sessions/
26
+ .test-sandbox/
27
+
28
+ # Attocode index, caches and private quality runs
29
+ /.attocode/
30
+
31
+ docs/superpowers/
32
+ eval/charts/
33
+ eval/*.md
34
+ eval/*.log
35
+ eval/*.json
36
+
37
+ # Build outputs
38
+ *.vsix
39
+ site/
40
+ snapshot_report.html
41
+ .internal
42
+
43
+ # scripts
44
+ scripts/*
45
+ !scripts/check_pack_licenses.py
46
+ .DS_Store
47
+
48
+ #playwright
49
+ .playwright-mcp
50
+
51
+ #gsd
52
+ .gsd/
53
+ .bg-shell/
54
+
55
+ #cursor
56
+ .cursor/
57
+
58
+ # search-quality sweep scratch output
59
+ eval/sweep_out/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: attocode-code-intel
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: Local code search and navigation for coding agents and people
5
5
  Project-URL: Homepage, https://github.com/eren23/attocode
6
6
  Project-URL: Repository, https://github.com/eren23/attocode
@@ -139,6 +139,15 @@ To use the latest source, install from a clone of this repository: `uv tool inst
139
139
 
140
140
  ## What your agent gets
141
141
 
142
+ Version 0.1.22 adds an opt-in discovery budget of up to 100,000 files
143
+ (`ATTOCODE_INTEL_DISCOVERY_MAX_FILES`; the default stays 50,000). It also packages
144
+ the LLM client, so `ATTOCODE_FLAG_CONFIDENCE=llm` and LLM rule synthesis work from
145
+ a PyPI install when an OpenRouter or Anthropic key is set.
146
+
147
+ Version 0.1.21 includes configured search-discovery coverage, OCaml interface
148
+ parsing and more conservative Go/Rust fallback evidence. The existing 100 ms native
149
+ budget and 50,000-file discovery safety ceiling remain; bounded fallback is heuristic.
150
+
142
151
  Version 0.1.20 improves native OCaml/Perl call candidates and conservative workspace
143
152
  import candidates for OCaml, Perl and Crystal. Physical paths and ambiguity remain
144
153
  guarded; native limits, ranking and dependencies are unchanged. Optional grammars
@@ -229,7 +238,7 @@ failed the frozen protocol. It provides no quality, cost or time benefit evidenc
229
238
 
230
239
  - **First search.** The first tool call starts the index build. A search waits up to 15 seconds for the index. On a large repository, a search can report that the index is warming. Then search again. An empty result during warm-up does not prove that the code is absent.
231
240
  - **Index location.** The index is in `.attocode/` in your project. When the server makes that folder, it adds a `.gitignore`, so the index stays out of commits.
232
- - **What the index reads.** The server reads at most 50,000 files and skips files over 1 MB. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
241
+ - **What the index reads.** By default the server discovers at most 50,000 eligible files and skips files over 1 MB. From 0.1.22, the [discovery budget setting](https://github.com/eren23/attocode/blob/main/docs/intelligence-discovery.md) allows an explicit limit up to 100,000; the selected index can be smaller under its independent file limit. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
233
242
  - **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig. Optional grammars are loaded only when already installed or cached; installing the `tree-sitter-all` extra does not trigger grammar downloads during navigation. A slow grammar falls back after a 100 ms parse budget. Static imports and references are partial evidence, not compiler/type resolution.
234
243
  - **Degraded parsing (development builds).** Selecting a missing definition in
235
244
  a file with a recorded native parse failure permits one bounded retry for
@@ -26,6 +26,15 @@ To use the latest source, install from a clone of this repository: `uv tool inst
26
26
 
27
27
  ## What your agent gets
28
28
 
29
+ Version 0.1.22 adds an opt-in discovery budget of up to 100,000 files
30
+ (`ATTOCODE_INTEL_DISCOVERY_MAX_FILES`; the default stays 50,000). It also packages
31
+ the LLM client, so `ATTOCODE_FLAG_CONFIDENCE=llm` and LLM rule synthesis work from
32
+ a PyPI install when an OpenRouter or Anthropic key is set.
33
+
34
+ Version 0.1.21 includes configured search-discovery coverage, OCaml interface
35
+ parsing and more conservative Go/Rust fallback evidence. The existing 100 ms native
36
+ budget and 50,000-file discovery safety ceiling remain; bounded fallback is heuristic.
37
+
29
38
  Version 0.1.20 improves native OCaml/Perl call candidates and conservative workspace
30
39
  import candidates for OCaml, Perl and Crystal. Physical paths and ambiguity remain
31
40
  guarded; native limits, ranking and dependencies are unchanged. Optional grammars
@@ -116,7 +125,7 @@ failed the frozen protocol. It provides no quality, cost or time benefit evidenc
116
125
 
117
126
  - **First search.** The first tool call starts the index build. A search waits up to 15 seconds for the index. On a large repository, a search can report that the index is warming. Then search again. An empty result during warm-up does not prove that the code is absent.
118
127
  - **Index location.** The index is in `.attocode/` in your project. When the server makes that folder, it adds a `.gitignore`, so the index stays out of commits.
119
- - **What the index reads.** The server reads at most 50,000 files and skips files over 1 MB. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
128
+ - **What the index reads.** By default the server discovers at most 50,000 eligible files and skips files over 1 MB. From 0.1.22, the [discovery budget setting](https://github.com/eren23/attocode/blob/main/docs/intelligence-discovery.md) allows an explicit limit up to 100,000; the selected index can be smaller under its independent file limit. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
120
129
  - **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig. Optional grammars are loaded only when already installed or cached; installing the `tree-sitter-all` extra does not trigger grammar downloads during navigation. A slow grammar falls back after a 100 ms parse budget. Static imports and references are partial evidence, not compiler/type resolution.
121
130
  - **Degraded parsing (development builds).** Selecting a missing definition in
122
131
  a file with a recorded native parse failure permits one bounded retry for
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "attocode-code-intel"
9
- version = "0.1.20"
9
+ version = "0.1.22"
10
10
  description = "Local code search and navigation for coding agents and people"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.12"
@@ -142,8 +142,8 @@ packages = [
142
142
  ]
143
143
 
144
144
  [tool.hatch.build.targets.sdist]
145
- # Frozen experiment results remain available in the tagged Git repository.
146
- exclude = ["/evals/results/"]
145
+ # Frozen study designs and results remain available in the tagged Git repository.
146
+ exclude = ["/evals/"]
147
147
 
148
148
  [tool.pytest.ini_options]
149
149
  asyncio_mode = "auto"
@@ -49,4 +49,4 @@ def __getattr__(name: str) -> Any:
49
49
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
50
50
 
51
51
  # The other copy is packages/code-intel/pyproject.toml. A test checks that both match.
52
- __version__ = "0.1.20"
52
+ __version__ = "0.1.22"
@@ -1428,6 +1428,7 @@ class ASTService:
1428
1428
  def _index_definitions(self, rel_path: str, ast: FileAST, *, index=None) -> None:
1429
1429
  """Phase 1: Index all *definitions* (functions, classes, methods)."""
1430
1430
  index = self._index if index is None else index
1431
+ source = 'regex' if ast.language in {'go', 'rust'} and ast.parsing_tier == 'regex' else 'tree-sitter'
1431
1432
  # Top-level functions
1432
1433
  for func in ast.functions:
1433
1434
  loc = SymbolLocation(
@@ -1437,6 +1438,7 @@ class ASTService:
1437
1438
  file_path=rel_path,
1438
1439
  start_line=func.start_line,
1439
1440
  end_line=func.end_line,
1441
+ source=source,
1440
1442
  )
1441
1443
  index.add_definition(loc)
1442
1444
 
@@ -1449,6 +1451,7 @@ class ASTService:
1449
1451
  file_path=rel_path,
1450
1452
  start_line=cls.start_line,
1451
1453
  end_line=cls.end_line,
1454
+ source=source,
1452
1455
  )
1453
1456
  index.add_definition(cls_loc)
1454
1457
 
@@ -1460,6 +1463,7 @@ class ASTService:
1460
1463
  file_path=rel_path,
1461
1464
  start_line=method.start_line,
1462
1465
  end_line=method.end_line,
1466
+ source=source,
1463
1467
  )
1464
1468
  index.add_definition(method_loc)
1465
1469
 
@@ -1472,6 +1476,7 @@ class ASTService:
1472
1476
  file_path=rel_path,
1473
1477
  start_line=0,
1474
1478
  end_line=0,
1479
+ source=source,
1475
1480
  )
1476
1481
  index.add_definition(var_loc)
1477
1482
 
@@ -1563,6 +1568,10 @@ class ASTService:
1563
1568
  # Build a regex pattern for call sites: symbol_name(
1564
1569
  # Only scan for symbols that are actually defined somewhere.
1565
1570
  # Skip comment lines and string literals to reduce false positives.
1571
+ lexical_fallback = ast.language in {'go', 'rust'}
1572
+ if lexical_fallback:
1573
+ from .codebase_ast import _mask_go_rust_source
1574
+ content = _mask_go_rust_source(content, ast.language)
1566
1575
  in_multiline_string = False
1567
1576
  for i, line in enumerate(content.split("\n"), 1):
1568
1577
  stripped = line.lstrip()
@@ -1591,12 +1600,19 @@ class ASTService:
1591
1600
 
1592
1601
  # Strip inline comments and string literals for matching
1593
1602
  # Remove quoted strings to avoid matching inside them
1594
- clean_line = re.sub(r'(["\'])(?:(?!\1).)*\1', '""', line)
1603
+ clean_line = line if lexical_fallback else re.sub(r'(["\'])(?:(?!\1).)*\1', '""', line)
1604
+ declaration = None
1605
+ if ast.language == 'go':
1606
+ declaration = re.match(r'^\s*func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(', clean_line)
1607
+ elif ast.language == 'rust':
1608
+ declaration = re.match(r'^\s*(?:pub(?:\([^)]*\))?\s+)?(?:(?:async|unsafe|extern|const)\s+)*fn\s+(\w+)', clean_line)
1595
1609
  caller = _enclosing_qname(i)
1596
1610
 
1597
1611
  # Find function/method calls: name(
1598
1612
  for m in re.finditer(r"(?<!\.)\b(\w+)\s*\(", clean_line):
1599
1613
  name = m.group(1)
1614
+ if declaration is not None and m.start(1) == declaration.start(1):
1615
+ continue
1600
1616
  if name in known_symbols and name not in ("if", "for", "while", "return", "print"):
1601
1617
  ref = SymbolRef(
1602
1618
  symbol_name=name,
@@ -1605,6 +1621,7 @@ class ASTService:
1605
1621
  line=i,
1606
1622
  syntax_name=name,
1607
1623
  caller_qualified_name=caller,
1624
+ source='regex' if lexical_fallback else 'tree-sitter',
1608
1625
  )
1609
1626
  index.add_reference(ref)
1610
1627
 
@@ -1619,5 +1636,6 @@ class ASTService:
1619
1636
  line=i,
1620
1637
  syntax_name=m.group(0).rsplit("(", 1)[0].strip(),
1621
1638
  caller_qualified_name=caller,
1639
+ source='regex' if lexical_fallback else 'tree-sitter',
1622
1640
  )
1623
1641
  index.add_reference(ref)
@@ -863,12 +863,116 @@ def parse_javascript(content: str, path: str = "") -> FileAST:
863
863
  return ast
864
864
 
865
865
 
866
+ def _mask_go_rust_source(content: str, language: str, *, keep_quoted: bool = False) -> str:
867
+ """Keep coordinates while hiding comments/literals from bounded heuristics.
868
+
869
+ keep_quoted retains ordinary double-quoted Go import paths. Raw literals
870
+ stay hidden in both views so their interior lines cannot become imports.
871
+ This is lexical filtering, not a complete language grammar.
872
+ """
873
+ output = list(content)
874
+ size, i = len(content), 0
875
+ raw_string = re.compile(r'(?:b|c)?r(#{0,255})"')
876
+ rust_char = re.compile(r"'(?:\\(?:u\{[0-9a-fA-F_]+\}|x[0-9a-fA-F]{2}|[^\r\n])|[^\\'\r\n])'")
877
+
878
+ def hide(start, end):
879
+ for at in range(start, min(end, size)):
880
+ if content[at] not in '\r\n':
881
+ output[at] = ' '
882
+
883
+ while i < size:
884
+ start = i
885
+ if content.startswith('//', i):
886
+ end = content.find('\n', i + 2)
887
+ i = size if end < 0 else end
888
+ hide(start, i)
889
+ elif content.startswith('/*', i):
890
+ i, depth = i + 2, 1
891
+ while i < size and depth:
892
+ if language == 'rust' and content.startswith('/*', i):
893
+ depth += 1
894
+ i += 2
895
+ elif content.startswith('*/', i):
896
+ depth -= 1
897
+ i += 2
898
+ else:
899
+ i += 1
900
+ hide(start, i)
901
+ elif language == 'go' and content[i] == '`':
902
+ end = content.find('`', i + 1)
903
+ i = size if end < 0 else end + 1
904
+ hide(start, i)
905
+ elif language == 'rust' and (i == 0 or not (content[i - 1].isalnum() or content[i - 1] == '_')) and (raw := raw_string.match(content, i)):
906
+ closing = '"' + raw.group(1)
907
+ end = content.find(closing, raw.end())
908
+ i = size if end < 0 else end + len(closing)
909
+ hide(start, i)
910
+ elif language == 'rust' and content[i] == "'":
911
+ # An apostrophe also introduces a lifetime/label. Only a complete
912
+ # character token is hidden; &'a and 'label: stay code.
913
+ char = rust_char.match(content, i)
914
+ if char:
915
+ i = char.end()
916
+ hide(start, i)
917
+ else:
918
+ i += 1
919
+ elif content[i] == '"' or (language == 'go' and content[i] == "'"):
920
+ quote = content[i]
921
+ i += 1
922
+ while i < size:
923
+ if content[i] == '\\':
924
+ i += 2
925
+ elif content[i] == quote:
926
+ i += 1
927
+ break
928
+ else:
929
+ i += 1
930
+ if not (keep_quoted and quote == '"'):
931
+ hide(start, i)
932
+ else:
933
+ i += 1
934
+ return ''.join(output)
935
+
936
+
937
+ def _bounded_fallback_end(lines: list[str], start: int) -> int:
938
+ """Find an ordinary declaration body within the existing500-line window."""
939
+ depth = parens = brackets = 0
940
+ opened = False
941
+ for number in range(start, min(start + 500, len(lines))):
942
+ line = lines[number]
943
+ if number > start and not opened and not parens and not brackets and re.match(
944
+ r'\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+|unsafe\s+)?(?:func|fn|struct|enum|trait|type|impl|mod|use|import|const|var)\b', line,
945
+ ):
946
+ return start + 1
947
+ for char in line:
948
+ if opened:
949
+ depth += (char == '{') - (char == '}')
950
+ elif char == '(':
951
+ parens += 1
952
+ elif char == ')':
953
+ parens = max(0, parens - 1)
954
+ elif char == '[':
955
+ brackets += 1
956
+ elif char == ']':
957
+ brackets = max(0, brackets - 1)
958
+ elif not parens and not brackets:
959
+ if char == ';':
960
+ return start + 1
961
+ if char == '{':
962
+ opened, depth = True, 1
963
+ # A return type may close its own braces before the function body
964
+ # opens on the same line. Finish only after processing that line.
965
+ if opened and depth == 0:
966
+ return number + 1
967
+ return start + 1
968
+
969
+
866
970
  def parse_rust(content: str, path: str = "") -> FileAST:
867
971
  """Parse Rust source using regex patterns.
868
972
 
869
973
  Extracts functions, structs, enums, traits, impl blocks, imports (use/mod).
870
974
  """
871
- lines = content.split("\n")
975
+ lines = _mask_go_rust_source(content, 'rust').split("\n")
872
976
  ast = FileAST(path=path, language="rust", line_count=len(lines))
873
977
 
874
978
  for i, line in enumerate(lines):
@@ -894,20 +998,13 @@ def parse_rust(content: str, path: str = "") -> FileAST:
894
998
 
895
999
  # Functions: (pub)? (async)? fn name(...)
896
1000
  fn_match = re.match(
897
- r"^(?:pub(?:\([\w:]+\))?\s+)?(?:async\s+)?(?:unsafe\s+)?(?:extern\s+\"[^\"]*\"\s+)?fn\s+(\w+)",
1001
+ r"^(?:pub(?:\([\w:]+\))?\s+)?(?:async\s+)?(?:unsafe\s+)?(?:extern\s+)?fn\s+(\w+)",
898
1002
  stripped,
899
1003
  )
900
1004
  if fn_match:
901
1005
  func_name = fn_match.group(1)
902
1006
  # Find end via brace matching
903
- end_line = i + 1
904
- brace_count = stripped.count("{") - stripped.count("}")
905
- if brace_count > 0:
906
- for j in range(i + 1, min(i + 500, len(lines))):
907
- brace_count += lines[j].count("{") - lines[j].count("}")
908
- if brace_count <= 0:
909
- end_line = j + 1
910
- break
1007
+ end_line = _bounded_fallback_end(lines, i)
911
1008
  is_async = "async " in stripped.split("fn")[0]
912
1009
  ast.functions.append(FunctionDef(
913
1010
  name=func_name,
@@ -920,14 +1017,7 @@ def parse_rust(content: str, path: str = "") -> FileAST:
920
1017
  # Structs: (pub)? struct Name
921
1018
  struct_match = re.match(r"^(?:pub(?:\([\w:]+\))?\s+)?struct\s+(\w+)", stripped)
922
1019
  if struct_match:
923
- end_line = i + 1
924
- brace_count = stripped.count("{") - stripped.count("}")
925
- if brace_count > 0:
926
- for j in range(i + 1, min(i + 500, len(lines))):
927
- brace_count += lines[j].count("{") - lines[j].count("}")
928
- if brace_count <= 0:
929
- end_line = j + 1
930
- break
1020
+ end_line = _bounded_fallback_end(lines, i)
931
1021
  ast.classes.append(ClassDef(
932
1022
  name=struct_match.group(1),
933
1023
  start_line=i + 1,
@@ -938,14 +1028,7 @@ def parse_rust(content: str, path: str = "") -> FileAST:
938
1028
  # Enums: (pub)? enum Name
939
1029
  enum_match = re.match(r"^(?:pub(?:\([\w:]+\))?\s+)?enum\s+(\w+)", stripped)
940
1030
  if enum_match:
941
- end_line = i + 1
942
- brace_count = stripped.count("{") - stripped.count("}")
943
- if brace_count > 0:
944
- for j in range(i + 1, min(i + 500, len(lines))):
945
- brace_count += lines[j].count("{") - lines[j].count("}")
946
- if brace_count <= 0:
947
- end_line = j + 1
948
- break
1031
+ end_line = _bounded_fallback_end(lines, i)
949
1032
  ast.classes.append(ClassDef(
950
1033
  name=enum_match.group(1),
951
1034
  start_line=i + 1,
@@ -956,14 +1039,7 @@ def parse_rust(content: str, path: str = "") -> FileAST:
956
1039
  # Traits: (pub)? trait Name
957
1040
  trait_match = re.match(r"^(?:pub(?:\([\w:]+\))?\s+)?(?:unsafe\s+)?trait\s+(\w+)", stripped)
958
1041
  if trait_match:
959
- end_line = i + 1
960
- brace_count = stripped.count("{") - stripped.count("}")
961
- if brace_count > 0:
962
- for j in range(i + 1, min(i + 500, len(lines))):
963
- brace_count += lines[j].count("{") - lines[j].count("}")
964
- if brace_count <= 0:
965
- end_line = j + 1
966
- break
1042
+ end_line = _bounded_fallback_end(lines, i)
967
1043
  ast.classes.append(ClassDef(
968
1044
  name=trait_match.group(1),
969
1045
  start_line=i + 1,
@@ -984,7 +1060,8 @@ def parse_go(content: str, path: str = "") -> FileAST:
984
1060
 
985
1061
  Extracts functions, methods, structs, interfaces, imports.
986
1062
  """
987
- lines = content.split("\n")
1063
+ lines = _mask_go_rust_source(content, 'go').split("\n")
1064
+ import_lines = _mask_go_rust_source(content, 'go', keep_quoted=True).split("\n")
988
1065
  ast = FileAST(path=path, language="go", line_count=len(lines))
989
1066
 
990
1067
  i = 0
@@ -995,7 +1072,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
995
1072
  if stripped == "import (" or stripped.startswith("import ("):
996
1073
  i += 1
997
1074
  while i < len(lines):
998
- imp_line = lines[i].strip()
1075
+ imp_line = import_lines[i].strip()
999
1076
  if imp_line == ")":
1000
1077
  break
1001
1078
  # Parse "pkg" or alias "pkg"
@@ -1009,7 +1086,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
1009
1086
  continue
1010
1087
 
1011
1088
  # Single import: import "pkg"
1012
- single_imp = re.match(r'^import\s+(?:\w+\s+)?"([^"]+)"', stripped)
1089
+ single_imp = re.match(r'^import\s+(?:\w+\s+)?"([^"]+)"', import_lines[i].strip()) if stripped.startswith('import') else None
1013
1090
  if single_imp:
1014
1091
  ast.imports.append(ImportDef(
1015
1092
  module=single_imp.group(1), is_from=False, line=i + 1,
@@ -1021,14 +1098,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
1021
1098
  method_match = re.match(r"^func\s+\([^)]+\)\s+(\w+)\s*\(", stripped)
1022
1099
  if method_match:
1023
1100
  func_name = method_match.group(1)
1024
- end_line = i + 1
1025
- brace_count = stripped.count("{") - stripped.count("}")
1026
- if brace_count > 0:
1027
- for j in range(i + 1, min(i + 500, len(lines))):
1028
- brace_count += lines[j].count("{") - lines[j].count("}")
1029
- if brace_count <= 0:
1030
- end_line = j + 1
1031
- break
1101
+ end_line = _bounded_fallback_end(lines, i)
1032
1102
  ast.functions.append(FunctionDef(
1033
1103
  name=func_name,
1034
1104
  start_line=i + 1,
@@ -1042,14 +1112,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
1042
1112
  fn_match = re.match(r"^func\s+(\w+)\s*\(", stripped)
1043
1113
  if fn_match:
1044
1114
  func_name = fn_match.group(1)
1045
- end_line = i + 1
1046
- brace_count = stripped.count("{") - stripped.count("}")
1047
- if brace_count > 0:
1048
- for j in range(i + 1, min(i + 500, len(lines))):
1049
- brace_count += lines[j].count("{") - lines[j].count("}")
1050
- if brace_count <= 0:
1051
- end_line = j + 1
1052
- break
1115
+ end_line = _bounded_fallback_end(lines, i)
1053
1116
  ast.functions.append(FunctionDef(
1054
1117
  name=func_name,
1055
1118
  start_line=i + 1,
@@ -1061,14 +1124,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
1061
1124
  # Struct: type Name struct {
1062
1125
  struct_match = re.match(r"^type\s+(\w+)\s+struct\s*\{", stripped)
1063
1126
  if struct_match:
1064
- end_line = i + 1
1065
- brace_count = stripped.count("{") - stripped.count("}")
1066
- if brace_count > 0:
1067
- for j in range(i + 1, min(i + 500, len(lines))):
1068
- brace_count += lines[j].count("{") - lines[j].count("}")
1069
- if brace_count <= 0:
1070
- end_line = j + 1
1071
- break
1127
+ end_line = _bounded_fallback_end(lines, i)
1072
1128
  ast.classes.append(ClassDef(
1073
1129
  name=struct_match.group(1),
1074
1130
  start_line=i + 1,
@@ -1080,14 +1136,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
1080
1136
  # Interface: type Name interface {
1081
1137
  iface_match = re.match(r"^type\s+(\w+)\s+interface\s*\{", stripped)
1082
1138
  if iface_match:
1083
- end_line = i + 1
1084
- brace_count = stripped.count("{") - stripped.count("}")
1085
- if brace_count > 0:
1086
- for j in range(i + 1, min(i + 500, len(lines))):
1087
- brace_count += lines[j].count("{") - lines[j].count("}")
1088
- if brace_count <= 0:
1089
- end_line = j + 1
1090
- break
1139
+ end_line = _bounded_fallback_end(lines, i)
1091
1140
  ast.classes.append(ClassDef(
1092
1141
  name=iface_match.group(1),
1093
1142
  start_line=i + 1,
@@ -821,6 +821,27 @@ def build_dependency_graph(
821
821
  return graph
822
822
 
823
823
 
824
+ _DISCOVERY_ENV = "ATTOCODE_INTEL_DISCOVERY_MAX_FILES"
825
+ _DEFAULT_DISCOVERY_MAX_FILES = 50_000
826
+ _HARD_DISCOVERY_MAX_FILES = 100_000
827
+
828
+
829
+ def _validate_discovery_max_files(value: int) -> int:
830
+ if type(value) is not int or not 1 <= value <= _HARD_DISCOVERY_MAX_FILES:
831
+ raise ValueError(f"discovery_max_files must be an integer from 1 to {_HARD_DISCOVERY_MAX_FILES}")
832
+ return value
833
+
834
+
835
+ def _discovery_max_files_from_env() -> int:
836
+ raw = os.environ.get(_DISCOVERY_ENV)
837
+ if raw is None:
838
+ return _DEFAULT_DISCOVERY_MAX_FILES
839
+ try:
840
+ return _validate_discovery_max_files(int(raw))
841
+ except ValueError as exc:
842
+ raise ValueError(f"{_DISCOVERY_ENV} must be an integer from 1 to {_HARD_DISCOVERY_MAX_FILES}") from exc
843
+
844
+
824
845
  @dataclass
825
846
  class CodebaseContextManager:
826
847
  """Manages codebase context for intelligent code understanding.
@@ -853,6 +874,12 @@ class CodebaseContextManager:
853
874
  _ignored_checkout_dirs_capped: bool = field(default=False, repr=False)
854
875
  cancelled: Callable[[], bool] | None = field(default=None, repr=False, compare=False)
855
876
  _discovery_snapshot: Any = field(default=None, repr=False, compare=False)
877
+ # Separate from max_files, which caps selection after importance scoring.
878
+ # Capture the environment per instance; preserve existing positional fields.
879
+ discovery_max_files: int = field(default_factory=_discovery_max_files_from_env, kw_only=True)
880
+
881
+ def __post_init__(self) -> None:
882
+ _validate_discovery_max_files(self.discovery_max_files)
856
883
 
857
884
  def _check_cancelled(self) -> None:
858
885
  if self.cancelled is not None and self.cancelled():
@@ -906,7 +933,8 @@ class CodebaseContextManager:
906
933
  directory/file and the ignore-file identity must still match. A failed
907
934
  validation leaves this context empty so its normal fresh discovery runs.
908
935
  """
909
- if snapshot is None or not snapshot.valid_for(self):
936
+ scan_limit = _validate_discovery_max_files(self.discovery_max_files)
937
+ if snapshot is None or len(snapshot.files) > scan_limit or not snapshot.valid_for(self):
910
938
  return False
911
939
  files = [FileInfo(*row) for row in snapshot.files]
912
940
  cap = _compute_dynamic_cap(files, self.max_files)
@@ -927,6 +955,7 @@ class CodebaseContextManager:
927
955
  Returns:
928
956
  List of FileInfo objects for discovered files.
929
957
  """
958
+ scan_limit = _validate_discovery_max_files(self.discovery_max_files)
930
959
  root = Path(self.root_dir)
931
960
  resolved_root = root.resolve()
932
961
  from attocode_intel._internal.integrations.context.discovery_snapshot import (
@@ -962,7 +991,7 @@ class CodebaseContextManager:
962
991
  guard(root / ".gitignore", missing_ok=True)
963
992
  ignore = IgnoreManager(root, default_dirs=self.ignore_patterns)
964
993
  files: list[FileInfo] = []
965
- _SAFETY_CEILING = 50_000 # noqa: N806 # OOM guard for massive repos
994
+ scan_truncated = False
966
995
  self._ignored_checkout_dirs = []
967
996
  self._ignored_checkout_dirs_capped = False
968
997
 
@@ -1028,6 +1057,12 @@ class CodebaseContextManager:
1028
1057
  if size > 1_000_000: # 1MB
1029
1058
  continue
1030
1059
 
1060
+ # One further eligible file proves overflow. Excluded files do
1061
+ # not, and no descriptor/content is allocated for this lookahead.
1062
+ if len(files) >= scan_limit:
1063
+ scan_truncated = True
1064
+ break
1065
+
1031
1066
  is_test = any(p in rel_path.lower() for p in TEST_PATTERNS)
1032
1067
  is_config = any(p in rel_path.lower() for p in CONFIG_PATTERNS)
1033
1068
 
@@ -1050,10 +1085,7 @@ class CodebaseContextManager:
1050
1085
  line_count=line_count,
1051
1086
  ))
1052
1087
 
1053
- if len(files) >= _SAFETY_CEILING:
1054
- break
1055
-
1056
- if len(files) >= _SAFETY_CEILING:
1088
+ if scan_truncated:
1057
1089
  break
1058
1090
 
1059
1091
  # Score importance
@@ -1084,14 +1116,14 @@ class CodebaseContextManager:
1084
1116
  # Truncate to dynamic cap AFTER scoring (smart truncation)
1085
1117
  cap = _compute_dynamic_cap(files, self.max_files)
1086
1118
  self.discovered_file_count = len(files)
1087
- self.discovery_truncated = len(files) > cap
1119
+ self.discovery_truncated = scan_truncated or len(files) > cap
1088
1120
  if len(files) > cap:
1089
1121
  files = files[:cap]
1090
1122
 
1091
1123
  self._files = files
1092
1124
  self.refresh_excluded_checkout_roots()
1093
1125
  self._last_refresh_time = time.monotonic()
1094
- if snapshot_safe and not self.discovery_truncated and self.discovered_file_count < _SAFETY_CEILING:
1126
+ if snapshot_safe and not self.discovery_truncated and self.discovered_file_count < scan_limit:
1095
1127
  self._discovery_snapshot = DiscoverySnapshot(
1096
1128
  os.path.abspath(self.root_dir), frozenset(self.ignore_patterns),
1097
1129
  self._last_refresh_time,
@@ -1375,55 +1407,6 @@ class CodebaseContextManager:
1375
1407
 
1376
1408
  return result
1377
1409
 
1378
- # --- Recursive context retrieval ---
1379
-
1380
- def get_recursive_context(
1381
- self,
1382
- seed_files: list[str],
1383
- token_budget: int = 20_000,
1384
- max_depth: int = 3,
1385
- max_files: int = 15,
1386
- ) -> str:
1387
- """Gather context by recursively following imports from seed files.
1388
-
1389
- Uses the RecursiveContextRetriever to mechanically follow Python/JS
1390
- imports starting from seed files, gathering content up to a depth
1391
- and token budget. Zero LLM cost.
1392
-
1393
- Args:
1394
- seed_files: Files to start traversal from.
1395
- token_budget: Maximum tokens to gather.
1396
- max_depth: Maximum import-following depth.
1397
- max_files: Maximum files to visit.
1398
-
1399
- Returns:
1400
- Combined content from all gathered files.
1401
- """
1402
- from attocode_intel._internal.tricks.recursive_context import RecursiveContextRetriever
1403
-
1404
- class _FileProvider:
1405
- def __init__(self, root: str) -> None:
1406
- self._root = os.path.realpath(root)
1407
-
1408
- def get_content(self, path: str) -> str | None:
1409
- candidate = os.path.normpath(os.path.join(self._root, path))
1410
- if not candidate.startswith(self._root):
1411
- return None # Path traversal rejected
1412
- try:
1413
- with open(candidate, encoding="utf-8", errors="replace") as f:
1414
- return f.read()
1415
- except (OSError, UnicodeDecodeError):
1416
- return None
1417
-
1418
- retriever = RecursiveContextRetriever(
1419
- _FileProvider(self.root_dir),
1420
- max_depth=max_depth,
1421
- token_budget=token_budget,
1422
- max_files=max_files,
1423
- )
1424
- result = retriever.retrieve(seed_files)
1425
- return result.content
1426
-
1427
1410
  # --- Incremental update API ---
1428
1411
 
1429
1412
  def mark_file_dirty(self, file_path: str) -> None: