attocode-code-intel 0.1.5__tar.gz → 0.1.6__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 (519) hide show
  1. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/PKG-INFO +3 -3
  2. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/README.md +2 -2
  3. attocode_code_intel-0.1.6/evals/ast_restart_probe.py +101 -0
  4. attocode_code_intel-0.1.6/evals/body_cost_probe.py +101 -0
  5. attocode_code_intel-0.1.6/evals/discovery_reuse_probe.py +63 -0
  6. attocode_code_intel-0.1.6/evals/lexical_sql_probe.py +171 -0
  7. attocode_code_intel-0.1.6/evals/restart_discovery_probe.py +101 -0
  8. attocode_code_intel-0.1.6/evals/results/2026-10-14-breadth-cloud-first.json +585 -0
  9. attocode_code_intel-0.1.6/evals/results/2026-10-14-breadth-development.json +10355 -0
  10. attocode_code_intel-0.1.6/evals/results/2026-10-14-breadth-development.md +113 -0
  11. attocode_code_intel-0.1.6/evals/results/2026-10-15-ast-restart.json +183 -0
  12. attocode_code_intel-0.1.6/evals/results/2026-10-15-ast-restart.md +87 -0
  13. attocode_code_intel-0.1.6/evals/results/2026-10-15-body-index-profile.json +83 -0
  14. attocode_code_intel-0.1.6/evals/results/2026-10-15-body-index-profile.md +40 -0
  15. attocode_code_intel-0.1.6/evals/results/2026-10-15-breadth-cloud.json +3962 -0
  16. attocode_code_intel-0.1.6/evals/results/2026-10-15-breadth-cloud.md +67 -0
  17. attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-bootstrap.json +62 -0
  18. attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-bootstrap.md +23 -0
  19. attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-setup-lock.json +45 -0
  20. attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-setup-lock.md +28 -0
  21. attocode_code_intel-0.1.6/evals/results/2026-10-15-cockroach-index-probe.json +2107 -0
  22. attocode_code_intel-0.1.6/evals/results/2026-10-15-cockroach-index-probe.md +123 -0
  23. attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-followup.json +6958 -0
  24. attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-followup.md +110 -0
  25. attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-repair-cycle.json +2350 -0
  26. attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-repair-cycle.md +80 -0
  27. attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-body-repair.json +2257 -0
  28. attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-body-repair.md +115 -0
  29. attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-validation.json +851 -0
  30. attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-validation.md +85 -0
  31. attocode_code_intel-0.1.6/evals/results/2026-10-15-index-probe-readiness.json +2766 -0
  32. attocode_code_intel-0.1.6/evals/results/2026-10-15-index-probe-readiness.md +91 -0
  33. attocode_code_intel-0.1.6/evals/results/2026-10-15-lexical-sql-contention.json +220 -0
  34. attocode_code_intel-0.1.6/evals/results/2026-10-15-lexical-sql-contention.md +38 -0
  35. attocode_code_intel-0.1.6/evals/results/2026-10-15-restart-discovery-repair.json +287 -0
  36. attocode_code_intel-0.1.6/evals/results/2026-10-15-restart-discovery-repair.md +55 -0
  37. attocode_code_intel-0.1.6/evals/results/2026-10-15-structural-write-contention.json +151 -0
  38. attocode_code_intel-0.1.6/evals/results/2026-10-15-structural-write-contention.md +51 -0
  39. attocode_code_intel-0.1.6/evals/structural_write_probe.py +83 -0
  40. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/pyproject.toml +1 -1
  41. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/__init__.py +1 -1
  42. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/ast_service.py +59 -17
  43. attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +164 -0
  44. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +15 -61
  45. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/codebase_context.py +173 -117
  46. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cross_references.py +34 -5
  47. attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +57 -0
  48. attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/index_probe.py +197 -0
  49. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/index_repair.py +3 -0
  50. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/index_store.py +67 -56
  51. attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/language_registry.py +75 -0
  52. attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/module_resolution.py +306 -0
  53. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/semantic_search.py +491 -291
  54. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +13 -4
  55. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/ts_parser.py +345 -38
  56. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/lsp/client.py +7 -3
  57. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/utilities/ignore.py +34 -4
  58. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/freshness.py +8 -1
  59. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/precision.py +9 -4
  60. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/search_evidence.py +38 -0
  61. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/service.py +13 -1
  62. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/symbol_links.py +42 -6
  63. attocode_code_intel-0.1.6/tests/test_ast_snapshot.py +307 -0
  64. attocode_code_intel-0.1.6/tests/test_cold_index_cost.py +249 -0
  65. attocode_code_intel-0.1.6/tests/test_discovery_reuse.py +237 -0
  66. attocode_code_intel-0.1.6/tests/test_index_probe.py +229 -0
  67. attocode_code_intel-0.1.6/tests/test_index_processes.py +155 -0
  68. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_index_reuse.py +123 -0
  69. attocode_code_intel-0.1.6/tests/test_index_sequences.py +74 -0
  70. attocode_code_intel-0.1.6/tests/test_language_capabilities.py +249 -0
  71. attocode_code_intel-0.1.6/tests/test_lexical_sql_cost.py +164 -0
  72. attocode_code_intel-0.1.6/tests/test_mixed_workspace.py +106 -0
  73. attocode_code_intel-0.1.6/tests/test_module_ownership.py +314 -0
  74. attocode_code_intel-0.1.6/tests/test_operation_contracts.py +51 -0
  75. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_precision_protocol.py +15 -2
  76. attocode_code_intel-0.1.6/tests/test_quality_cloud.py +535 -0
  77. attocode_code_intel-0.1.6/tests/test_quality_evidence.py +279 -0
  78. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_quality_lifecycle.py +4 -4
  79. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_quality_runner.py +68 -0
  80. attocode_code_intel-0.1.6/tests/test_real_language_server.py +148 -0
  81. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_search_evidence.py +119 -0
  82. attocode_code_intel-0.1.6/tests/test_source_exclusions.py +29 -0
  83. attocode_code_intel-0.1.6/tests/test_structural_write_cost.py +88 -0
  84. attocode_code_intel-0.1.5/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -52
  85. attocode_code_intel-0.1.5/tests/test_language_capabilities.py +0 -42
  86. attocode_code_intel-0.1.5/tests/test_quality_cloud.py +0 -178
  87. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/.gitignore +0 -0
  88. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/LICENSE +0 -0
  89. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/README.md +0 -0
  90. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_candidate_audit.yaml +0 -0
  91. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_query_cases.yaml +0 -0
  92. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_query_external_cases.yaml +0 -0
  93. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_query_final_holdout.yaml +0 -0
  94. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/client_comparison.py +0 -0
  95. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/client_responses.py +0 -0
  96. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/codex_repair_study.py +0 -0
  97. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/daily.py +0 -0
  98. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/designs/2026-10-13-codex-repair-diagnostic.md +0 -0
  99. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/designs/2026-10-13-r7-task-completion-pilot.md +0 -0
  100. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/designs/2026-10-14-workflow-pilot.md +0 -0
  101. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/external_benchmarks.py +0 -0
  102. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/external_study.py +0 -0
  103. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/graded_blind_pack.yaml +0 -0
  104. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/localize_study.py +0 -0
  105. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/locbench_title_pack.yaml +0 -0
  106. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/onboarding_study.py +0 -0
  107. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/pilot.py +0 -0
  108. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/quality_scoring.py +0 -0
  109. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/quality_tasks.py +0 -0
  110. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/release_gate.py +0 -0
  111. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/repair_grading.py +0 -0
  112. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/repair_study.py +0 -0
  113. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/repair_worker.py +0 -0
  114. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/responses.py +0 -0
  115. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-09-05-macos.json +0 -0
  116. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-04-broad-query-ranking.md +0 -0
  117. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-04-decision-reranker-trial.md +0 -0
  118. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-04-systemone-http-local-trial.md +0 -0
  119. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-05-broad-candidate-audit.md +0 -0
  120. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-05-source-view-transfer.md +0 -0
  121. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-08-blind-graded-rerank.md +0 -0
  122. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-08-locbench-560.md +0 -0
  123. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-09-locbench-560-first-stage.md +0 -0
  124. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-10-agent-pilot.md +0 -0
  125. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-10-agent-r3.md +0 -0
  126. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-10-matrix-r1.md +0 -0
  127. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-11-agent-r4-stage0.md +0 -0
  128. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-12-r4-stage1-review-agents.md +0 -0
  129. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-12-r5-test-suggestions.md +0 -0
  130. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-codex-repair-diagnostic.md +0 -0
  131. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-r6-review-test-note.md +0 -0
  132. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-r7-preparation.md +0 -0
  133. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-r7-wiring.md +0 -0
  134. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/broad-report.json +0 -0
  135. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/lifecycle.json +0 -0
  136. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/manifest.json +0 -0
  137. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/quick-report.json +0 -0
  138. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/ranking.json +0 -0
  139. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/ranking.log +0 -0
  140. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/scale.json +0 -0
  141. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/storage.json +0 -0
  142. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/workflows.json +0 -0
  143. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality.md +0 -0
  144. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-r7-completion-pilot.md +0 -0
  145. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence-audit/fixture-replay.json +0 -0
  146. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence-audit/ledger.json +0 -0
  147. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence-audit/report.md +0 -0
  148. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence.md +0 -0
  149. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/README.md +0 -0
  150. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/artifact-hashes.json +0 -0
  151. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/chunk-analysis.json +0 -0
  152. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/chunk-audit-script.txt +0 -0
  153. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/chunk-pools.json +0 -0
  154. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/mcp-smoke-script.txt +0 -0
  155. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/mcp-smoke.json +0 -0
  156. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/metadata-source-probe.json +0 -0
  157. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/README.md +0 -0
  158. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/search_evidence_audit.py +0 -0
  159. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/source_view_transfer.yaml +0 -0
  160. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study.py +0 -0
  161. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study_clients.py +0 -0
  162. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study_events.py +0 -0
  163. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study_tasks.py +0 -0
  164. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/token_overhead.py +0 -0
  165. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/understanding_scoring.py +0 -0
  166. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/understanding_study.py +0 -0
  167. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/warm_cache.py +0 -0
  168. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/workflows.py +0 -0
  169. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/GUIDELINES.md +0 -0
  170. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/__init__.py +0 -0
  171. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/errors/__init__.py +0 -0
  172. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
  173. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
  174. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
  175. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
  176. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
  177. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
  178. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
  179. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
  180. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
  181. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
  182. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
  183. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
  184. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
  185. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
  186. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
  187. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
  188. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
  189. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
  190. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
  191. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
  192. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
  193. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
  194. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
  195. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
  196. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
  197. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
  198. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
  199. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
  200. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
  201. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
  202. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
  203. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
  204. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
  205. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
  206. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
  207. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
  208. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
  209. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/tricks/__init__.py +0 -0
  210. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/tricks/recursive_context.py +0 -0
  211. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/types/__init__.py +0 -0
  212. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/types/events.py +0 -0
  213. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/types/severity.py +0 -0
  214. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_shared.py +0 -0
  215. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/analysis_coverage.py +0 -0
  216. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/__init__.py +0 -0
  217. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/access.py +0 -0
  218. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/app.py +0 -0
  219. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/__init__.py +0 -0
  220. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/api_keys.py +0 -0
  221. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/context.py +0 -0
  222. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/jwt.py +0 -0
  223. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/oauth.py +0 -0
  224. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/passwords.py +0 -0
  225. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/deps.py +0 -0
  226. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/knowledge_bridge.py +0 -0
  227. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/mcp_transport.py +0 -0
  228. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/middleware.py +0 -0
  229. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/models.py +0 -0
  230. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/__init__.py +0 -0
  231. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/db_provider.py +0 -0
  232. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/local_provider.py +0 -0
  233. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/remote_provider.py +0 -0
  234. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/repository_source.py +0 -0
  235. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/__init__.py +0 -0
  236. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
  237. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/activity.py +0 -0
  238. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/adr.py +0 -0
  239. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/analysis.py +0 -0
  240. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/api_keys.py +0 -0
  241. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/auth.py +0 -0
  242. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/branches.py +0 -0
  243. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
  244. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/embeddings.py +0 -0
  245. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/files.py +0 -0
  246. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/files_v2.py +0 -0
  247. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/gc.py +0 -0
  248. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/git_v2.py +0 -0
  249. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/graph.py +0 -0
  250. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/graph_viz.py +0 -0
  251. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/health.py +0 -0
  252. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/history.py +0 -0
  253. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/jobs.py +0 -0
  254. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/learning.py +0 -0
  255. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/lsp.py +0 -0
  256. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/notify.py +0 -0
  257. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/operations.py +0 -0
  258. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/orgs.py +0 -0
  259. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/preferences.py +0 -0
  260. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/presence.py +0 -0
  261. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/projects.py +0 -0
  262. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/repos.py +0 -0
  263. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/search.py +0 -0
  264. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/snapshots.py +0 -0
  265. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/webhooks.py +0 -0
  266. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/websocket.py +0 -0
  267. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/static/graph.html +0 -0
  268. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/utils.py +0 -0
  269. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/__init__.py +0 -0
  270. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/hashing.py +0 -0
  271. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/provenance.py +0 -0
  272. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
  273. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/audit.py +0 -0
  274. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/bug_finder.py +0 -0
  275. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/bundle.py +0 -0
  276. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/catalog.py +0 -0
  277. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/change_review.py +0 -0
  278. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/cli.py +0 -0
  279. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/community.py +0 -0
  280. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/__init__.py +0 -0
  281. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/jev.py +0 -0
  282. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/llm.py +0 -0
  283. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/redact.py +0 -0
  284. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/settings.py +0 -0
  285. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/config.py +0 -0
  286. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/crypto.py +0 -0
  287. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/__init__.py +0 -0
  288. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/base.py +0 -0
  289. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/engine.py +0 -0
  290. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/models.py +0 -0
  291. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/entrypoint.py +0 -0
  292. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/focused_evidence.py +0 -0
  293. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/gateway.py +0 -0
  294. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/__init__.py +0 -0
  295. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/credentials.py +0 -0
  296. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/manager.py +0 -0
  297. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/models.py +0 -0
  298. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/storage.py +0 -0
  299. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/graph_query_parser.py +0 -0
  300. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/helpers.py +0 -0
  301. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/__init__.py +0 -0
  302. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/debouncer.py +0 -0
  303. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/delta_indexer.py +0 -0
  304. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/full_indexer.py +0 -0
  305. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/incremental.py +0 -0
  306. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/parser.py +0 -0
  307. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/summarizer.py +0 -0
  308. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/installer.py +0 -0
  309. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/knowledge.py +0 -0
  310. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/local_knowledge.py +0 -0
  311. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/alembic.ini +0 -0
  312. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/env.py +0 -0
  313. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/script.py.mako +0 -0
  314. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
  315. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
  316. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
  317. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
  318. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
  319. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
  320. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
  321. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
  322. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
  323. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
  324. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
  325. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
  326. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
  327. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
  328. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
  329. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
  330. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
  331. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
  332. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
  333. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
  334. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/onboarding.py +0 -0
  335. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/output.py +0 -0
  336. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/presence.py +0 -0
  337. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/probe.py +0 -0
  338. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/project_dir.py +0 -0
  339. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/pubsub.py +0 -0
  340. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/query_ranking.py +0 -0
  341. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/readiness.py +0 -0
  342. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/redis.py +0 -0
  343. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/reference_pages.py +0 -0
  344. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/remote.py +0 -0
  345. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/repo_ranker.py +0 -0
  346. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/request_context.py +0 -0
  347. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/__init__.py +0 -0
  348. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/ci.py +0 -0
  349. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/combinators.py +0 -0
  350. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/enricher.py +0 -0
  351. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/evolution.py +0 -0
  352. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/executor.py +0 -0
  353. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/filters/__init__.py +0 -0
  354. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/filters/pipeline.py +0 -0
  355. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/formatter.py +0 -0
  356. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/hygiene.py +0 -0
  357. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/importers/__init__.py +0 -0
  358. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/importers/semgrep.py +0 -0
  359. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/loader.py +0 -0
  360. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/marketplace.py +0 -0
  361. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/metavar.py +0 -0
  362. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/model.py +0 -0
  363. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/__init__.py +0 -0
  364. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
  365. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
  366. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
  367. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
  368. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
  369. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
  370. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
  371. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
  372. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
  373. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
  374. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
  375. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
  376. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
  377. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
  378. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
  379. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
  380. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
  381. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
  382. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
  383. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
  384. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
  385. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
  386. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
  387. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
  388. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
  389. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
  390. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
  391. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
  392. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
  393. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
  394. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
  395. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
  396. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
  397. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
  398. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
  399. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
  400. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
  401. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
  402. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
  403. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
  404. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
  405. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
  406. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
  407. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
  408. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
  409. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
  410. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
  411. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
  412. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
  413. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
  414. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
  415. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
  416. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
  417. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
  418. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
  419. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
  420. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
  421. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
  422. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
  423. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
  424. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
  425. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
  426. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
  427. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
  428. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
  429. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
  430. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
  431. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
  432. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
  433. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
  434. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
  435. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
  436. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
  437. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
  438. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/plugins/__init__.py +0 -0
  439. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
  440. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/profiling.py +0 -0
  441. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/registry.py +0 -0
  442. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/sarif.py +0 -0
  443. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/synthesis.py +0 -0
  444. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/testing.py +0 -0
  445. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/server.py +0 -0
  446. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/sharing.py +0 -0
  447. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/__init__.py +0 -0
  448. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/branch_overlay.py +0 -0
  449. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/content_store.py +0 -0
  450. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/dependency_store.py +0 -0
  451. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/diff_engine.py +0 -0
  452. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/embedding_store.py +0 -0
  453. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/provenance_store.py +0 -0
  454. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/security_scanner_db.py +0 -0
  455. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/symbol_store.py +0 -0
  456. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/structural_evidence.py +0 -0
  457. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/symbol_inspection.py +0 -0
  458. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/telemetry.py +0 -0
  459. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/test_ranking.py +0 -0
  460. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/__init__.py +0 -0
  461. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/fixtures.py +0 -0
  462. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/helpers.py +0 -0
  463. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/mocks.py +0 -0
  464. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/__init__.py +0 -0
  465. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/adr_tools.py +0 -0
  466. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/analysis_tools.py +0 -0
  467. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/composite_tools.py +0 -0
  468. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
  469. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/dead_code_tools.py +0 -0
  470. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/distill_tools.py +0 -0
  471. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/frecency_tools.py +0 -0
  472. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
  473. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/history_tools.py +0 -0
  474. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/learning_tools.py +0 -0
  475. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/lsp_tools.py +0 -0
  476. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/maintenance_tools.py +0 -0
  477. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/navigation_tools.py +0 -0
  478. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/overlay_tools.py +0 -0
  479. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/pin_store.py +0 -0
  480. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/pin_tools.py +0 -0
  481. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
  482. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/query_history_tools.py +0 -0
  483. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/readiness_tools.py +0 -0
  484. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/rule_tools.py +0 -0
  485. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/search_tools.py +0 -0
  486. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/snapshot_tools.py +0 -0
  487. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/__init__.py +0 -0
  488. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/job_utils.py +0 -0
  489. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/jobs.py +0 -0
  490. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/run.py +0 -0
  491. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/settings.py +0 -0
  492. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_codex_repair_study.py +0 -0
  493. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_cold_discovery.py +0 -0
  494. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_compact_inspection.py +0 -0
  495. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_daily_workflows.py +0 -0
  496. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_doctor.py +0 -0
  497. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_edit_restart.py +0 -0
  498. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_external_study.py +0 -0
  499. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_focused_inspection.py +0 -0
  500. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_lean_profile.py +0 -0
  501. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_local_reranker.py +0 -0
  502. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_localize_study.py +0 -0
  503. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_navigation_evidence.py +0 -0
  504. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_onboarding_study.py +0 -0
  505. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_pilot.py +0 -0
  506. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_product.py +0 -0
  507. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_quality_evaluation.py +0 -0
  508. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_query_ranking.py +0 -0
  509. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_ranking_intent.py +0 -0
  510. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_remote.py +0 -0
  511. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_repair_study.py +0 -0
  512. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_search_evidence_audit.py +0 -0
  513. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_structural_evidence.py +0 -0
  514. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_study.py +0 -0
  515. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_systemone_ranker.py +0 -0
  516. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_token_overhead.py +0 -0
  517. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_understanding_evaluation.py +0 -0
  518. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_walk_order.py +0 -0
  519. {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_warm_cache.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: attocode-code-intel
3
- Version: 0.1.5
3
+ Version: 0.1.6
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
@@ -189,8 +189,8 @@ also found no demonstrated benefit; its reviewed decision is to stop expansion.
189
189
 
190
190
  - **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.
191
191
  - **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.
192
- - **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 `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files.
193
- - **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. The `tree-sitter-all` extra adds about 170 more.
192
+ - **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.
193
+ - **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.
194
194
  - **Remove the setup.** Run `attocode-code-intel init --remove`. It restores an entry that existed before `init`.
195
195
  - **Server does not answer.** Run `attocode-code-intel doctor`. If a client shows "not configured", run `init` for it. After a change, restart the agent. In Claude Code, `/mcp` shows the server state.
196
196
  - **HTTP server.** `attocode-code-intel --transport http` needs the `http` extra. It serves only this computer unless you set `ATTOCODE_API_KEY`.
@@ -77,8 +77,8 @@ also found no demonstrated benefit; its reviewed decision is to stop expansion.
77
77
 
78
78
  - **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.
79
79
  - **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.
80
- - **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 `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files.
81
- - **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. The `tree-sitter-all` extra adds about 170 more.
80
+ - **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.
81
+ - **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.
82
82
  - **Remove the setup.** Run `attocode-code-intel init --remove`. It restores an entry that existed before `init`.
83
83
  - **Server does not answer.** Run `attocode-code-intel doctor`. If a client shows "not configured", run `init` for it. After a change, restart the agent. In Claude Code, `/mcp` shows the server state.
84
84
  - **HTTP server.** `attocode-code-intel --transport http` needs the `http` extra. It serves only this computer unless you set `ATTOCODE_API_KEY`.
@@ -0,0 +1,101 @@
1
+ """Generated Go cold+restart comparison with exact AST/index parity and cleanup."""
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ import hashlib
6
+ import json
7
+ import platform
8
+ import subprocess
9
+ import tempfile
10
+ import time
11
+ from dataclasses import asdict
12
+ from pathlib import Path
13
+ from unittest.mock import patch
14
+
15
+ from attocode_intel._internal.integrations.context import ast_service, ast_snapshot, codebase_ast
16
+ from attocode_intel._internal.integrations.context.index_store import AST_SNAPSHOT_KEY
17
+
18
+ BASELINE = 'b3501b9d7ae016572d77ceae1289026d23719694'
19
+ SOURCE = 'packages/code-intel/src/attocode_intel/_internal/integrations/context/ast_service.py'
20
+
21
+
22
+ def run():
23
+ source = subprocess.check_output(['git', 'show', f'{BASELINE}:{SOURCE}'], timeout=10)
24
+ cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == 'ASTService')
25
+ methods, scopes = {}, []
26
+ for name in ('initialize_skeleton', '_save_snapshot', '_restore_snapshot'):
27
+ method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == name)
28
+ scope = dict(vars(ast_service))
29
+ exec(compile(ast.Module(body=[method], type_ignores=[]), '<frozen restart>', 'exec'), scope)
30
+ methods[name] = scope[name]
31
+ scopes.append(scope)
32
+ original = {name: getattr(ast_service.ASTService, name) for name in methods}
33
+ observations = []
34
+ with tempfile.TemporaryDirectory(prefix='attocode-restart-probe-') as tmp:
35
+ root = Path(tmp)
36
+ workloads = ['short_body', 'long_body']
37
+ source_sizes = {}
38
+ for number, (workload, mode) in enumerate((w, m) for w in workloads
39
+ for m in ['baseline', 'candidate', 'candidate', 'baseline']):
40
+ for scope in scopes:
41
+ scope['parse_file'] = ast_service.parse_file
42
+ project = root / str(number)
43
+ project.mkdir()
44
+ for i in range(160):
45
+ (project / f'file{i:04d}.go').write_text('package example\n' + ''.join(
46
+ f'// Helper{i}_{j} returns an adjusted value.\nfunc Helper{i}_{j}(value int) int {{\n'
47
+ + ' if value < 0 { return 0 }\n' * (1 if workload == 'short_body' else 12)
48
+ + ' return value + 1\n}\n' for j in range(32)))
49
+ source_sizes[workload] = sum(p.stat().st_size for p in project.iterdir())
50
+ assert source_sizes[workload] < 8 * 2**20
51
+ with patch.multiple(ast_service.ASTService, **(methods if mode == 'baseline' else original)):
52
+ first = ast_service.ASTService(str(project))
53
+ start = time.monotonic()
54
+ try:
55
+ first.initialize_skeleton(indexing_depth='eager')
56
+ cold = time.monotonic() - start
57
+ payload_bytes = len((first._store.get_meta(AST_SNAPSHOT_KEY) or '').encode())
58
+ finally:
59
+ first.stop_hydration()
60
+ first._store.close()
61
+ second = ast_service.ASTService(str(project))
62
+ try:
63
+ with (patch.object(ast_service, 'parse_file', wraps=ast_service.parse_file) as parse,
64
+ patch.object(codebase_ast, 'parse_file', parse)):
65
+ for scope in scopes:
66
+ scope['parse_file'] = parse
67
+ wall, cpu = time.monotonic(), time.thread_time()
68
+ state = second.initialize_skeleton()
69
+ restart, thread_cpu = time.monotonic()-wall, time.thread_time()-cpu
70
+ calls = parse.call_count
71
+ assert state.phase == 'ready' and state.parsed_files == 160
72
+ assert calls == (320 if mode == 'baseline' else 0)
73
+ summaries = {key: {**asdict(value), 'path': key} for key, value in second._ast_cache.items()}
74
+ evidence = {'asts': summaries, 'definitions': {
75
+ key: [asdict(v) for v in value] for key, value in second._index.definitions.items()},
76
+ 'stats': second._store.stats(), 'dependencies': {
77
+ key: sorted(value) for key, value in second._index.file_dependencies.items()}}
78
+ digest = hashlib.sha256(json.dumps(evidence, sort_keys=True).encode()).hexdigest()
79
+ observations.append({'mode': mode, 'workload': workload, 'cold_seconds': cold, 'restart_seconds': restart,
80
+ 'cold_plus_restart_seconds': cold+restart, 'restart_thread_cpu_seconds': thread_cpu,
81
+ 'restart_parse_calls': calls, 'cache_payload_bytes': payload_bytes,
82
+ 'evidence_sha256': digest})
83
+ finally:
84
+ second.stop_hydration()
85
+ second._store.close()
86
+ for workload in workloads:
87
+ assert len({row['evidence_sha256'] for row in observations if row['workload'] == workload}) == 1
88
+ disk_bytes = sum(p.stat().st_size for p in root.rglob('*') if p.is_file())
89
+ assert disk_bytes < 100 * 2**20
90
+ return {'scope': 'Generated 160-file/5120-function Go cold+restart; no Cockroach or cloud speed claim',
91
+ 'baseline_commit': BASELINE, 'baseline_source_sha256': hashlib.sha256(source).hexdigest(),
92
+ 'candidate_source_sha256': hashlib.sha256(Path(ast_service.__file__).read_bytes()).hexdigest(),
93
+ 'cache_source_sha256': hashlib.sha256(Path(ast_snapshot.__file__).read_bytes()).hexdigest(),
94
+ 'probe_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
95
+ 'python': platform.python_version(), 'platform': platform.platform(),
96
+ 'source_bytes': source_sizes, 'final_owned_disk_bytes': disk_bytes,
97
+ 'observations': observations, 'cleanup_verified': not root.exists()}
98
+
99
+
100
+ if __name__ == '__main__':
101
+ print(json.dumps(run(), indent=2))
@@ -0,0 +1,101 @@
1
+ """Bounded generated body-work probe: no downloads, models or cloud resources.
2
+
3
+ This isolates document generation, using empty known spans (no AST parsing), not
4
+ an end-to-end repository benchmark. Compare identical terms/windows by digest.
5
+ """
6
+ from __future__ import annotations
7
+
8
+ import argparse
9
+ import ast
10
+ import hashlib
11
+ import inspect
12
+ import json
13
+ import platform
14
+ import subprocess
15
+ import tempfile
16
+ import time
17
+ from contextlib import nullcontext
18
+ from functools import partial
19
+ from pathlib import Path
20
+ from types import SimpleNamespace
21
+ from unittest.mock import patch
22
+
23
+ from attocode_intel._internal.integrations.context import index_probe as probe
24
+ from attocode_intel._internal.integrations.context import semantic_search as search
25
+
26
+ BASELINE = "3d7c41ca628e8dfd2f62cf7eff9c4ae3aadbbdc2"
27
+ SOURCE = "packages/code-intel/src/attocode_intel/_internal/integrations/context/semantic_search.py"
28
+
29
+
30
+ def baseline_body():
31
+ source = subprocess.check_output(["git", "show", f"{BASELINE}:{SOURCE}"], timeout=10)
32
+ cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == "SemanticSearchManager")
33
+ method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == "_body_document")
34
+ method.decorator_list = []
35
+ scope = dict(vars(search))
36
+ exec(compile(ast.Module(body=[method], type_ignores=[]), "<frozen body>", "exec"), scope)
37
+ return scope[method.name], hashlib.sha256(source).hexdigest()
38
+
39
+
40
+ def fixture(root, unique=False):
41
+ paths = []
42
+ for i in range(8):
43
+ path = root / f'generated{i}.go'
44
+ path.write_text('package example\n' + ''.join(
45
+ f'// block {n if unique else n // 32}\nvalue_{n if unique else n % 64} = otherHTTPValue + processRow(value_{n if unique else n % 64})\n'
46
+ for n in range(2048)
47
+ ))
48
+ paths.append(path)
49
+ return paths
50
+
51
+
52
+ def run():
53
+ observations = []
54
+ legacy, baseline_hash = baseline_body()
55
+ source_bytes = {}
56
+ with tempfile.TemporaryDirectory(prefix='attocode-body-cost-') as tmp:
57
+ for workload in ('repeated', 'unique'):
58
+ root = Path(tmp) / workload
59
+ root.mkdir()
60
+ paths = fixture(root, unique=workload == 'unique')
61
+ source_bytes[workload] = sum(p.stat().st_size for p in paths)
62
+ assert source_bytes[workload] < 2 * 2**20
63
+ modes = ['baseline_off', 'off', 'all_calls', 'default']
64
+ for rotation in range(4):
65
+ for mode in modes[rotation:] + modes[:rotation]:
66
+ collector = None if mode in ('baseline_off', 'off') else probe.IndexProbe()
67
+ wrapping = (patch.object(search, 'instrument', lambda phase, fn:
68
+ partial(probe.measured_call, phase, fn))
69
+ if mode == 'all_calls' else nullcontext())
70
+ method = legacy if mode == 'baseline_off' else search.SemanticSearchManager._body_document
71
+ outputs = []
72
+ with wrapping, probe.activate(collector):
73
+ wall, cpu = time.monotonic(), time.thread_time()
74
+ for p in paths:
75
+ outputs.append(method(
76
+ p.name, str(p), SimpleNamespace(take=lambda *_: ([], [])),
77
+ include_file_terms=True,
78
+ ))
79
+ elapsed, used = time.monotonic()-wall, time.thread_time()-cpu
80
+ digest = hashlib.sha256(json.dumps(outputs, ensure_ascii=False).encode()).hexdigest()
81
+ observations.append({'workload': workload, 'mode': mode, 'rotation': rotation,
82
+ 'wall_seconds': elapsed, 'thread_cpu_seconds': used,
83
+ 'output_sha256': digest,
84
+ 'windows': sum(len(o[0]) for o in outputs),
85
+ 'profile': collector.snapshot() if collector else None})
86
+ assert len({o['output_sha256'] for o in observations if o['workload'] == workload}) == 1
87
+ return {'scope': 'Generated document generation, empty known spans; no parsing, SQL or cold-start claim',
88
+ 'baseline_commit': BASELINE, 'baseline_source_sha256': baseline_hash,
89
+ 'candidate_source_sha256': hashlib.sha256(Path(inspect.getfile(search)).read_bytes()).hexdigest(),
90
+ 'profiler_sha256': hashlib.sha256(Path(inspect.getfile(probe)).read_bytes()).hexdigest(),
91
+ 'probe_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
92
+ 'python': platform.python_version(), 'platform': platform.platform(),
93
+ 'source_bytes': source_bytes, 'observations': observations,
94
+ 'cleanup_verified': not Path(tmp).exists()}
95
+
96
+
97
+ if __name__ == '__main__':
98
+ parser = argparse.ArgumentParser(description=__doc__)
99
+ parser.add_argument('--output', type=Path, required=True)
100
+ args = parser.parse_args()
101
+ args.output.write_text(json.dumps(run(), indent=2)+'\n')
@@ -0,0 +1,63 @@
1
+ """Bounded two-consumer discovery comparison, not a cold-start performance gate."""
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ import hashlib
6
+ import inspect
7
+ import json
8
+ import platform
9
+ import subprocess
10
+ import tempfile
11
+ import time
12
+ from dataclasses import asdict
13
+ from pathlib import Path
14
+
15
+ from attocode_intel._internal.integrations.context import codebase_context as context
16
+ from attocode_intel._internal.integrations.context import discovery_snapshot
17
+
18
+ BASELINE = '3d7c41ca628e8dfd2f62cf7eff9c4ae3aadbbdc2'
19
+ SOURCE = 'packages/code-intel/src/attocode_intel/_internal/integrations/context/codebase_context.py'
20
+
21
+
22
+ def run():
23
+ source = subprocess.check_output(['git', 'show', f'{BASELINE}:{SOURCE}'], timeout=10)
24
+ cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == 'CodebaseContextManager')
25
+ method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == 'discover_files')
26
+ scope = dict(vars(context))
27
+ exec(compile(ast.Module(body=[method], type_ignores=[]), '<frozen discovery>', 'exec'), scope)
28
+ legacy = scope['discover_files']
29
+ observations = []
30
+ with tempfile.TemporaryDirectory(prefix='attocode-discovery-cost-') as tmp:
31
+ root = Path(tmp)
32
+ for i in range(640):
33
+ (root / f'f{i}.py').write_text(f'def helper_{i}():\n return "meaningfulValue"\n' * 4)
34
+ source_bytes = sum(p.stat().st_size for p in root.iterdir())
35
+ assert source_bytes < 2**20
36
+ for order in [('baseline', 'reuse'), ('reuse', 'baseline'), ('baseline', 'reuse')]:
37
+ for mode in order:
38
+ donor = context.CodebaseContextManager(tmp, max_files=100000)
39
+ consumer = context.CodebaseContextManager(tmp)
40
+ wall, cpu = time.monotonic(), time.thread_time()
41
+ (legacy(donor) if mode == 'baseline' else donor.discover_files())
42
+ donor_seconds = time.monotonic() - wall
43
+ if mode == 'baseline':
44
+ legacy(consumer)
45
+ else:
46
+ assert consumer.reuse_discovery(donor._discovery_snapshot)
47
+ seconds, used = time.monotonic()-wall, time.thread_time()-cpu
48
+ files = [{k:v for k,v in asdict(f).items() if k != 'path'} for f in consumer._files]
49
+ observations.append({'mode':mode,'wall_seconds':seconds,'thread_cpu_seconds':used,
50
+ 'donor_seconds':donor_seconds,'consumer_seconds':seconds-donor_seconds,
51
+ 'files':len(files),'inventory_sha256':hashlib.sha256(json.dumps(files).encode()).hexdigest()})
52
+ assert len({o['inventory_sha256'] for o in observations}) == 1
53
+ return {'scope':'Generated 640-file two-consumer inventory work; no cloud or cold-gate claim',
54
+ 'baseline_commit':BASELINE,'baseline_source_sha256':hashlib.sha256(source).hexdigest(),
55
+ 'candidate_source_sha256':hashlib.sha256(Path(inspect.getfile(context)).read_bytes()).hexdigest(),
56
+ 'snapshot_source_sha256':hashlib.sha256(Path(inspect.getfile(discovery_snapshot)).read_bytes()).hexdigest(),
57
+ 'probe_sha256':hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
58
+ 'python':platform.python_version(),'platform':platform.platform(),
59
+ 'source_bytes':source_bytes,'observations':observations,'cleanup_verified':not root.exists()}
60
+
61
+
62
+ if __name__ == '__main__':
63
+ print(json.dumps(run(),indent=2))
@@ -0,0 +1,171 @@
1
+ """Bounded lexical SQL diagnostic; synthetic contention, no cloud or model calls.
2
+
3
+ Baseline must already exist locally. Disposable databases are removed; each
4
+ competitor stops after 20 seconds. One observation per case is not a timing gate.
5
+ """
6
+
7
+ import ast
8
+ import hashlib
9
+ import inspect
10
+ import json
11
+ import platform
12
+ import subprocess
13
+ import tempfile
14
+ import threading
15
+ import time
16
+ from functools import partial
17
+ from pathlib import Path
18
+ from types import SimpleNamespace
19
+
20
+ from attocode_intel._internal.integrations.context import semantic_search as search
21
+
22
+ BASELINE = "4f33254130fb2817c44cfa7a57e3e213822b9560"
23
+ SOURCE = "packages/code-intel/src/attocode_intel/_internal/integrations/context/semantic_search.py"
24
+ source = subprocess.check_output(["git", "show", f"{BASELINE}:{SOURCE}"], timeout=10)
25
+ cls = next(
26
+ n
27
+ for n in ast.parse(source).body
28
+ if isinstance(n, ast.ClassDef) and n.name == "SemanticSearchManager"
29
+ )
30
+ scope = dict(vars(search))
31
+ for name in ("_save_kw_cache", "_sync_body_index"):
32
+ method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == name)
33
+ exec(
34
+ compile(ast.Module(body=[method], type_ignores=[]), "<frozen baseline method>", "exec"),
35
+ scope,
36
+ )
37
+ legacy_cache, legacy_body = scope["_save_kw_cache"], scope["_sync_body_index"]
38
+
39
+
40
+ def cpu(stop):
41
+ end = time.monotonic() + 20
42
+ while not stop.is_set() and time.monotonic() < end:
43
+ sum(i * i for i in range(10000))
44
+
45
+
46
+ def measure(fn, contended):
47
+ stop = threading.Event()
48
+ worker = threading.Thread(target=cpu, args=(stop,))
49
+ if contended:
50
+ worker.start()
51
+ started = time.monotonic()
52
+ try:
53
+ fn()
54
+ elapsed = time.monotonic() - started
55
+ full = worker.is_alive() if contended else None
56
+ finally:
57
+ stop.set()
58
+ if contended:
59
+ worker.join()
60
+ return elapsed, full
61
+
62
+
63
+ results = []
64
+ with tempfile.TemporaryDirectory(prefix="quality-lexical-sql-") as scratch:
65
+ for task in ["keyword", "body_delete"]:
66
+ for contended in [False, True]:
67
+ for arm in ["legacy", "batched"]:
68
+ root = Path(scratch) / f"{task}-{contended}-{arm}"
69
+ root.mkdir()
70
+ mgr = search.SemanticSearchManager(str(root))
71
+ try:
72
+ if task == "keyword":
73
+ documents = [
74
+ search._KeywordDoc(
75
+ f"func:{i}",
76
+ f"f{i % 256}.py",
77
+ "function",
78
+ f"helper{i}",
79
+ "preview",
80
+ False,
81
+ False,
82
+ {"needle": 2},
83
+ 2,
84
+ )
85
+ for i in range(2048)
86
+ ]
87
+ mtimes = {f"f{i}.py": 1.0 for i in range(256)}
88
+ method = (
89
+ legacy_cache
90
+ if arm == "legacy"
91
+ else search.SemanticSearchManager._save_kw_cache
92
+ )
93
+ elapsed, full = measure(partial(method, mgr, documents, mtimes), contended)
94
+ conn = mgr._open_kw_cache_db()
95
+ rows = [
96
+ conn.execute(f"SELECT rowid,* FROM {t} ORDER BY rowid").fetchall()
97
+ for t in ["kw_files", "kw_docs"]
98
+ ]
99
+ else:
100
+ paths = [root / f"f{i:03}.py" for i in range(133)]
101
+ for p in paths:
102
+ p.write_text("def helper(): return 1\n")
103
+
104
+ def ctx(ps):
105
+ return SimpleNamespace(
106
+ _ensure_fresh=lambda: None,
107
+ _files=[
108
+ SimpleNamespace(path=str(p), relative_path=p.name) for p in ps
109
+ ],
110
+ )
111
+
112
+ mgr._sync_body_index(ctx(paths))
113
+ assert mgr._body_index_built
114
+ mgr._body_index_built = False
115
+ method = (
116
+ legacy_body
117
+ if arm == "legacy"
118
+ else search.SemanticSearchManager._sync_body_index
119
+ )
120
+ elapsed, full = measure(partial(method, mgr, ctx(paths[-1:])), contended)
121
+ assert mgr._body_index_built
122
+ conn = mgr._open_body_db()
123
+ rows = [
124
+ conn.execute(f"SELECT rowid,* FROM {t} ORDER BY rowid").fetchall()
125
+ for t in ["body_fts", "body_file_fts"]
126
+ ]
127
+ rows.append(
128
+ conn.execute(
129
+ "SELECT file_path,size FROM body_files ORDER BY file_path"
130
+ ).fetchall()
131
+ )
132
+ conn.close()
133
+ results.append(
134
+ dict(
135
+ task=task,
136
+ arm=arm,
137
+ cpu_thread=contended,
138
+ seconds=elapsed,
139
+ competitor_active_at_end=full,
140
+ row_counts=[len(r) for r in rows],
141
+ row_sha256=hashlib.sha256(json.dumps(rows).encode()).hexdigest(),
142
+ )
143
+ )
144
+ finally:
145
+ mgr.close()
146
+ for task in ["keyword", "body_delete"]:
147
+ assert len({r["row_sha256"] for r in results if r["task"] == task}) == 1
148
+ print(
149
+ json.dumps(
150
+ dict(
151
+ baseline_commit=BASELINE,
152
+ baseline_source_sha256=hashlib.sha256(source).hexdigest(),
153
+ candidate_source_sha256=hashlib.sha256(
154
+ Path(inspect.getfile(search)).read_bytes()
155
+ ).hexdigest(),
156
+ probe_sha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
157
+ python=platform.python_version(),
158
+ platform=platform.platform(),
159
+ fixture={
160
+ "keyword_docs": 2048,
161
+ "keyword_files": 256,
162
+ "body_files": 133,
163
+ "body_files_deleted": 132,
164
+ },
165
+ scope="Single observations, synthetic CPU contention; not cloud latency or release evidence",
166
+ results=results,
167
+ cleanup_verified=True,
168
+ ),
169
+ indent=2,
170
+ )
171
+ )
@@ -0,0 +1,101 @@
1
+ """Generated comparison of discovery parsing before/after cached structural restart."""
2
+ from __future__ import annotations
3
+
4
+ import ast
5
+ import hashlib
6
+ import json
7
+ import platform
8
+ import subprocess
9
+ import tempfile
10
+ import time
11
+ from dataclasses import asdict
12
+ from pathlib import Path
13
+ from unittest.mock import patch
14
+
15
+ from attocode_intel._internal.integrations.context import ast_service, ast_snapshot, codebase_ast
16
+ from attocode_intel._internal.integrations.context.index_store import AST_SNAPSHOT_KEY
17
+
18
+ BASELINE = 'e97f986532a3612542326ae21c0360e0b83fc2bc'
19
+ SOURCE = 'packages/code-intel/src/attocode_intel/_internal/integrations/context/ast_service.py'
20
+
21
+
22
+ def run():
23
+ source = subprocess.check_output(['git', 'show', f'{BASELINE}:{SOURCE}'], timeout=10)
24
+ cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == 'ASTService')
25
+ methods, scopes = {}, []
26
+ for name in ('initialize_skeleton', '_save_snapshot', '_restore_snapshot'):
27
+ method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == name)
28
+ scope = dict(vars(ast_service))
29
+ exec(compile(ast.Module(body=[method], type_ignores=[]), '<frozen restart>', 'exec'), scope)
30
+ methods[name] = scope[name]
31
+ scopes.append(scope)
32
+ original = {name: getattr(ast_service.ASTService, name) for name in methods}
33
+ observations = []
34
+ with tempfile.TemporaryDirectory(prefix='attocode-restart-probe-') as tmp:
35
+ root = Path(tmp)
36
+ workloads = ['short_body', 'long_body']
37
+ source_sizes = {}
38
+ for number, (workload, mode) in enumerate((w, m) for w in workloads
39
+ for m in ['baseline', 'candidate', 'candidate', 'baseline']):
40
+ for scope in scopes:
41
+ scope['parse_file'] = ast_service.parse_file
42
+ project = root / str(number)
43
+ project.mkdir()
44
+ for i in range(160):
45
+ (project / f'file{i:04d}.go').write_text('package example\n' + ''.join(
46
+ f'// Helper{i}_{j} returns an adjusted value.\nfunc Helper{i}_{j}(value int) int {{\n'
47
+ + ' if value < 0 { return 0 }\n' * (1 if workload == 'short_body' else 12)
48
+ + ' return value + 1\n}\n' for j in range(32)))
49
+ source_sizes[workload] = sum(p.stat().st_size for p in project.iterdir())
50
+ assert source_sizes[workload] < 8 * 2**20
51
+ with patch.multiple(ast_service.ASTService, **(methods if mode == 'baseline' else original)):
52
+ first = ast_service.ASTService(str(project))
53
+ start = time.monotonic()
54
+ try:
55
+ first.initialize_skeleton(indexing_depth='eager')
56
+ cold = time.monotonic() - start
57
+ payload_bytes = len((first._store.get_meta(AST_SNAPSHOT_KEY) or '').encode())
58
+ finally:
59
+ first.stop_hydration()
60
+ first._store.close()
61
+ second = ast_service.ASTService(str(project))
62
+ try:
63
+ with (patch.object(ast_service, 'parse_file', wraps=ast_service.parse_file) as parse,
64
+ patch.object(codebase_ast, 'parse_file', parse)):
65
+ for scope in scopes:
66
+ scope['parse_file'] = parse
67
+ wall, cpu = time.monotonic(), time.thread_time()
68
+ state = second.initialize_skeleton()
69
+ restart, thread_cpu = time.monotonic()-wall, time.thread_time()-cpu
70
+ calls = parse.call_count
71
+ assert state.phase == 'ready' and state.parsed_files == 160
72
+ assert calls == (160 if mode == 'baseline' else 0)
73
+ summaries = {key: {**asdict(value), 'path': key} for key, value in second._ast_cache.items()}
74
+ evidence = {'asts': summaries, 'definitions': {
75
+ key: [asdict(v) for v in value] for key, value in second._index.definitions.items()},
76
+ 'stats': second._store.stats(), 'dependencies': {
77
+ key: sorted(value) for key, value in second._index.file_dependencies.items()}}
78
+ digest = hashlib.sha256(json.dumps(evidence, sort_keys=True).encode()).hexdigest()
79
+ observations.append({'mode': mode, 'workload': workload, 'cold_seconds': cold, 'restart_seconds': restart,
80
+ 'cold_plus_restart_seconds': cold+restart, 'restart_thread_cpu_seconds': thread_cpu,
81
+ 'restart_parse_calls': calls, 'cache_payload_bytes': payload_bytes,
82
+ 'evidence_sha256': digest})
83
+ finally:
84
+ second.stop_hydration()
85
+ second._store.close()
86
+ for workload in workloads:
87
+ assert len({row['evidence_sha256'] for row in observations if row['workload'] == workload}) == 1
88
+ disk_bytes = sum(p.stat().st_size for p in root.rglob('*') if p.is_file())
89
+ assert disk_bytes < 100 * 2**20
90
+ return {'scope': 'Generated 160-file/5120-function Go cold+restart; both parse entry points counted; no Cockroach or cloud speed claim',
91
+ 'baseline_commit': BASELINE, 'baseline_source_sha256': hashlib.sha256(source).hexdigest(),
92
+ 'candidate_source_sha256': hashlib.sha256(Path(ast_service.__file__).read_bytes()).hexdigest(),
93
+ 'cache_source_sha256': hashlib.sha256(Path(ast_snapshot.__file__).read_bytes()).hexdigest(),
94
+ 'probe_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
95
+ 'python': platform.python_version(), 'platform': platform.platform(),
96
+ 'source_bytes': source_sizes, 'final_owned_disk_bytes': disk_bytes,
97
+ 'observations': observations, 'cleanup_verified': not root.exists()}
98
+
99
+
100
+ if __name__ == '__main__':
101
+ print(json.dumps(run(), indent=2))