attocode-code-intel 0.1.0__tar.gz → 0.1.1__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 (414) hide show
  1. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/PKG-INFO +2 -2
  2. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/README.md +1 -1
  3. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/onboarding_study.py +1 -1
  4. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/pyproject.toml +1 -1
  5. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/__init__.py +1 -1
  6. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/ast_service.py +11 -7
  7. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/codebase_context.py +10 -6
  8. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/index_repair.py +2 -1
  9. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/index_store.py +5 -2
  10. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/freshness.py +2 -1
  11. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/onboarding.py +4 -2
  12. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_daily_workflows.py +2 -1
  13. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_edit_restart.py +5 -5
  14. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_focused_inspection.py +24 -0
  15. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_index_reuse.py +3 -2
  16. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/.gitignore +0 -0
  17. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/LICENSE +0 -0
  18. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/README.md +0 -0
  19. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/broad_candidate_audit.yaml +0 -0
  20. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/broad_query_cases.yaml +0 -0
  21. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/broad_query_external_cases.yaml +0 -0
  22. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/broad_query_final_holdout.yaml +0 -0
  23. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/client_comparison.py +0 -0
  24. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/client_responses.py +0 -0
  25. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/daily.py +0 -0
  26. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/external_benchmarks.py +0 -0
  27. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/external_study.py +0 -0
  28. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/graded_blind_pack.yaml +0 -0
  29. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/localize_study.py +0 -0
  30. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/locbench_title_pack.yaml +0 -0
  31. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/pilot.py +0 -0
  32. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/quality_scoring.py +0 -0
  33. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/quality_tasks.py +0 -0
  34. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/release_gate.py +0 -0
  35. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/responses.py +0 -0
  36. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-09-05-macos.json +0 -0
  37. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-04-broad-query-ranking.md +0 -0
  38. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-04-decision-reranker-trial.md +0 -0
  39. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-04-systemone-http-local-trial.md +0 -0
  40. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-05-broad-candidate-audit.md +0 -0
  41. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-05-source-view-transfer.md +0 -0
  42. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-08-blind-graded-rerank.md +0 -0
  43. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-08-locbench-560.md +0 -0
  44. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-09-locbench-560-first-stage.md +0 -0
  45. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-10-agent-pilot.md +0 -0
  46. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-10-agent-r3.md +0 -0
  47. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/2026-10-10-matrix-r1.md +0 -0
  48. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/results/README.md +0 -0
  49. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/source_view_transfer.yaml +0 -0
  50. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/study.py +0 -0
  51. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/study_clients.py +0 -0
  52. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/study_events.py +0 -0
  53. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/study_tasks.py +0 -0
  54. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/token_overhead.py +0 -0
  55. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/understanding_scoring.py +0 -0
  56. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/understanding_study.py +0 -0
  57. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/warm_cache.py +0 -0
  58. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/evals/workflows.py +0 -0
  59. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/GUIDELINES.md +0 -0
  60. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/__init__.py +0 -0
  61. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/errors/__init__.py +0 -0
  62. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
  63. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
  64. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
  65. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
  66. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
  67. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
  68. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
  69. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
  70. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +0 -0
  71. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
  72. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/cross_references.py +0 -0
  73. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
  74. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
  75. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
  76. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
  77. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
  78. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
  79. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
  80. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -0
  81. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
  82. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
  83. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
  84. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/semantic_search.py +0 -0
  85. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +0 -0
  86. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
  87. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
  88. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
  89. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
  90. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/ts_parser.py +0 -0
  91. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
  92. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
  93. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
  94. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/lsp/client.py +0 -0
  95. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
  96. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
  97. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
  98. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
  99. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
  100. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
  101. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
  102. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
  103. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
  104. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
  105. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/utilities/ignore.py +0 -0
  106. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
  107. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/tricks/__init__.py +0 -0
  108. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/tricks/recursive_context.py +0 -0
  109. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/types/__init__.py +0 -0
  110. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/types/events.py +0 -0
  111. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_internal/types/severity.py +0 -0
  112. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/_shared.py +0 -0
  113. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/analysis_coverage.py +0 -0
  114. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/__init__.py +0 -0
  115. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/access.py +0 -0
  116. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/app.py +0 -0
  117. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/auth/__init__.py +0 -0
  118. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/auth/api_keys.py +0 -0
  119. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/auth/context.py +0 -0
  120. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/auth/jwt.py +0 -0
  121. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/auth/oauth.py +0 -0
  122. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/auth/passwords.py +0 -0
  123. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/deps.py +0 -0
  124. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/knowledge_bridge.py +0 -0
  125. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/mcp_transport.py +0 -0
  126. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/middleware.py +0 -0
  127. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/models.py +0 -0
  128. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/providers/__init__.py +0 -0
  129. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/providers/db_provider.py +0 -0
  130. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/providers/local_provider.py +0 -0
  131. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/providers/remote_provider.py +0 -0
  132. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/repository_source.py +0 -0
  133. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/__init__.py +0 -0
  134. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
  135. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/activity.py +0 -0
  136. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/adr.py +0 -0
  137. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/analysis.py +0 -0
  138. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/api_keys.py +0 -0
  139. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/auth.py +0 -0
  140. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/branches.py +0 -0
  141. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
  142. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/embeddings.py +0 -0
  143. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/files.py +0 -0
  144. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/files_v2.py +0 -0
  145. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/gc.py +0 -0
  146. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/git_v2.py +0 -0
  147. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/graph.py +0 -0
  148. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/graph_viz.py +0 -0
  149. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/health.py +0 -0
  150. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/history.py +0 -0
  151. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/jobs.py +0 -0
  152. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/learning.py +0 -0
  153. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/lsp.py +0 -0
  154. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/notify.py +0 -0
  155. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/operations.py +0 -0
  156. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/orgs.py +0 -0
  157. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/preferences.py +0 -0
  158. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/presence.py +0 -0
  159. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/projects.py +0 -0
  160. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/repos.py +0 -0
  161. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/search.py +0 -0
  162. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/snapshots.py +0 -0
  163. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/webhooks.py +0 -0
  164. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/routes/websocket.py +0 -0
  165. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/static/graph.html +0 -0
  166. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/api/utils.py +0 -0
  167. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/artifacts/__init__.py +0 -0
  168. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/artifacts/hashing.py +0 -0
  169. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/artifacts/provenance.py +0 -0
  170. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
  171. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/audit.py +0 -0
  172. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/bug_finder.py +0 -0
  173. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/bundle.py +0 -0
  174. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/catalog.py +0 -0
  175. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/change_review.py +0 -0
  176. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/cli.py +0 -0
  177. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/community.py +0 -0
  178. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/confidence/__init__.py +0 -0
  179. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/confidence/jev.py +0 -0
  180. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/confidence/llm.py +0 -0
  181. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/confidence/redact.py +0 -0
  182. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/confidence/settings.py +0 -0
  183. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/config.py +0 -0
  184. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/crypto.py +0 -0
  185. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/db/__init__.py +0 -0
  186. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/db/base.py +0 -0
  187. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/db/engine.py +0 -0
  188. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/db/models.py +0 -0
  189. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/entrypoint.py +0 -0
  190. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/focused_evidence.py +0 -0
  191. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/gateway.py +0 -0
  192. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/git/__init__.py +0 -0
  193. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/git/credentials.py +0 -0
  194. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/git/manager.py +0 -0
  195. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/git/models.py +0 -0
  196. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/git/storage.py +0 -0
  197. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/graph_query_parser.py +0 -0
  198. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/helpers.py +0 -0
  199. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/__init__.py +0 -0
  200. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/debouncer.py +0 -0
  201. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/delta_indexer.py +0 -0
  202. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/full_indexer.py +0 -0
  203. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/incremental.py +0 -0
  204. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/parser.py +0 -0
  205. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/indexing/summarizer.py +0 -0
  206. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/installer.py +0 -0
  207. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/knowledge.py +0 -0
  208. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/local_knowledge.py +0 -0
  209. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/alembic.ini +0 -0
  210. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/env.py +0 -0
  211. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/script.py.mako +0 -0
  212. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
  213. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
  214. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
  215. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
  216. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
  217. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
  218. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
  219. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
  220. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
  221. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
  222. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
  223. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
  224. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
  225. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
  226. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
  227. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
  228. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
  229. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
  230. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
  231. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
  232. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/output.py +0 -0
  233. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/precision.py +0 -0
  234. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/presence.py +0 -0
  235. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/probe.py +0 -0
  236. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/project_dir.py +0 -0
  237. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/pubsub.py +0 -0
  238. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/query_ranking.py +0 -0
  239. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/readiness.py +0 -0
  240. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/redis.py +0 -0
  241. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/reference_pages.py +0 -0
  242. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/remote.py +0 -0
  243. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/repo_ranker.py +0 -0
  244. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/request_context.py +0 -0
  245. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/__init__.py +0 -0
  246. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/ci.py +0 -0
  247. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/combinators.py +0 -0
  248. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/enricher.py +0 -0
  249. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/evolution.py +0 -0
  250. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/executor.py +0 -0
  251. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/filters/__init__.py +0 -0
  252. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/filters/pipeline.py +0 -0
  253. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/formatter.py +0 -0
  254. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/hygiene.py +0 -0
  255. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/importers/__init__.py +0 -0
  256. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/importers/semgrep.py +0 -0
  257. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/loader.py +0 -0
  258. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/marketplace.py +0 -0
  259. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/metavar.py +0 -0
  260. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/model.py +0 -0
  261. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/__init__.py +0 -0
  262. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
  263. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
  264. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
  265. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
  266. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
  267. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
  268. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
  269. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
  270. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
  271. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
  272. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
  273. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
  274. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
  275. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
  276. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
  277. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
  278. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
  279. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
  280. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
  281. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
  282. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
  283. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
  284. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
  285. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
  286. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
  287. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
  288. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
  289. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
  290. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
  291. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
  292. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
  293. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
  294. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
  295. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
  296. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
  297. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
  298. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
  299. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
  300. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
  301. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
  302. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
  303. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
  304. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
  305. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
  306. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
  307. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
  308. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
  309. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
  310. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
  311. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
  312. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
  313. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
  314. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
  315. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
  316. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
  317. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
  318. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
  319. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
  320. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
  321. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
  322. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
  323. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
  324. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
  325. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
  326. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
  327. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
  328. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
  329. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
  330. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
  331. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
  332. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
  333. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
  334. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
  335. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
  336. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/plugins/__init__.py +0 -0
  337. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
  338. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/profiling.py +0 -0
  339. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/registry.py +0 -0
  340. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/sarif.py +0 -0
  341. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/synthesis.py +0 -0
  342. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/rules/testing.py +0 -0
  343. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/server.py +0 -0
  344. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/service.py +0 -0
  345. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/sharing.py +0 -0
  346. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/__init__.py +0 -0
  347. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/branch_overlay.py +0 -0
  348. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/content_store.py +0 -0
  349. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/dependency_store.py +0 -0
  350. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/diff_engine.py +0 -0
  351. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/embedding_store.py +0 -0
  352. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/provenance_store.py +0 -0
  353. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/security_scanner_db.py +0 -0
  354. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/storage/symbol_store.py +0 -0
  355. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/structural_evidence.py +0 -0
  356. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/symbol_inspection.py +0 -0
  357. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/symbol_links.py +0 -0
  358. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/telemetry.py +0 -0
  359. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/test_ranking.py +0 -0
  360. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/testing/__init__.py +0 -0
  361. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/testing/fixtures.py +0 -0
  362. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/testing/helpers.py +0 -0
  363. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/testing/mocks.py +0 -0
  364. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/__init__.py +0 -0
  365. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/adr_tools.py +0 -0
  366. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/analysis_tools.py +0 -0
  367. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/composite_tools.py +0 -0
  368. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
  369. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/dead_code_tools.py +0 -0
  370. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/distill_tools.py +0 -0
  371. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/frecency_tools.py +0 -0
  372. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
  373. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/history_tools.py +0 -0
  374. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/learning_tools.py +0 -0
  375. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/lsp_tools.py +0 -0
  376. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/maintenance_tools.py +0 -0
  377. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/navigation_tools.py +0 -0
  378. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/overlay_tools.py +0 -0
  379. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/pin_store.py +0 -0
  380. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/pin_tools.py +0 -0
  381. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
  382. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/query_history_tools.py +0 -0
  383. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/readiness_tools.py +0 -0
  384. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/rule_tools.py +0 -0
  385. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/search_tools.py +0 -0
  386. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/tools/snapshot_tools.py +0 -0
  387. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/workers/__init__.py +0 -0
  388. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/workers/job_utils.py +0 -0
  389. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/workers/jobs.py +0 -0
  390. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/workers/run.py +0 -0
  391. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/src/attocode_intel/workers/settings.py +0 -0
  392. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_cold_discovery.py +0 -0
  393. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_compact_inspection.py +0 -0
  394. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_doctor.py +0 -0
  395. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_external_study.py +0 -0
  396. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_language_capabilities.py +0 -0
  397. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_local_reranker.py +0 -0
  398. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_localize_study.py +0 -0
  399. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_navigation_evidence.py +0 -0
  400. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_onboarding_study.py +0 -0
  401. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_pilot.py +0 -0
  402. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_precision_protocol.py +0 -0
  403. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_product.py +0 -0
  404. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_quality_evaluation.py +0 -0
  405. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_query_ranking.py +0 -0
  406. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_ranking_intent.py +0 -0
  407. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_remote.py +0 -0
  408. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_structural_evidence.py +0 -0
  409. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_study.py +0 -0
  410. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_systemone_ranker.py +0 -0
  411. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_token_overhead.py +0 -0
  412. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_understanding_evaluation.py +0 -0
  413. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/tests/test_walk_order.py +0 -0
  414. {attocode_code_intel-0.1.0 → attocode_code_intel-0.1.1}/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.0
3
+ Version: 0.1.1
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
@@ -132,7 +132,7 @@ To check the setup, run `attocode-code-intel doctor`. It starts the configured s
132
132
 
133
133
  For other clients (VS Code, Zed, Windsurf, Claude Desktop and more), run `attocode-code-intel install <target>`. `attocode-code-intel commands` lists the targets.
134
134
 
135
- Before the first PyPI release, install from a clone of this repository: `uv tool install /path/to/attocode/packages/code-intel`.
135
+ To use the latest source, install from a clone of this repository: `uv tool install /path/to/attocode/packages/code-intel`.
136
136
 
137
137
  ## What your agent gets
138
138
 
@@ -20,7 +20,7 @@ To check the setup, run `attocode-code-intel doctor`. It starts the configured s
20
20
 
21
21
  For other clients (VS Code, Zed, Windsurf, Claude Desktop and more), run `attocode-code-intel install <target>`. `attocode-code-intel commands` lists the targets.
22
22
 
23
- Before the first PyPI release, install from a clone of this repository: `uv tool install /path/to/attocode/packages/code-intel`.
23
+ To use the latest source, install from a clone of this repository: `uv tool install /path/to/attocode/packages/code-intel`.
24
24
 
25
25
  ## What your agent gets
26
26
 
@@ -80,7 +80,7 @@ def configure_setup(manifest, study, root, lane, stage_dir, client):
80
80
  "env": {"PYTHONPATH": str(study / "engine"), "ATTOCODE_INTEL_PRECISION": "off",
81
81
  "ATTOCODE_INTEL_TRACE": str(stage_dir / "engine.jsonl")}}
82
82
  audit["servers"] = {NAME: entry}
83
- guidance = Path(paths["guidance"])
83
+ guidance = root / GUIDANCE[client]
84
84
  # The installer writes no guidance file for Claude: Claude Code shows the server instructions.
85
85
  audit["installed_guidance_sha256"] = (hashlib.sha256(guidance.read_bytes()).hexdigest()
86
86
  if guidance.exists() else None)
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "attocode-code-intel"
9
- version = "0.1.0"
9
+ version = "0.1.1"
10
10
  description = "Local code search and navigation for coding agents and people"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.12"
@@ -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.0"
52
+ __version__ = "0.1.1"
@@ -42,7 +42,11 @@ from attocode_intel._internal.integrations.context.hydration import (
42
42
  classify_tier,
43
43
  skeleton_budget,
44
44
  )
45
- from attocode_intel._internal.integrations.context.index_store import IndexStore, StoredFile
45
+ from attocode_intel._internal.integrations.context.index_store import (
46
+ SNAPSHOT_KEY,
47
+ IndexStore,
48
+ StoredFile,
49
+ )
46
50
 
47
51
  logger = logging.getLogger(__name__)
48
52
 
@@ -210,7 +214,7 @@ class ASTService:
210
214
  loads cached symbols/refs from SQLite and only re-parses files whose
211
215
  mtime has changed (incremental mode). Otherwise does a full scan.
212
216
  """
213
- self._store.set_meta("structural_snapshot_v1", "")
217
+ self._store.set_meta(SNAPSHOT_KEY, "")
214
218
  self._snapshot_start = None
215
219
  from attocode_intel.telemetry import measure
216
220
  with measure("discovery"):
@@ -404,7 +408,7 @@ class ASTService:
404
408
  self._initialized = True
405
409
  return state
406
410
  # A partial or interrupted rebuild must never be restored as complete.
407
- self._store.set_meta("structural_snapshot_v1", "")
411
+ self._store.set_meta(SNAPSHOT_KEY, "")
408
412
  self._store.clear_all()
409
413
 
410
414
  to_parse = parseable[:budget]
@@ -473,7 +477,7 @@ class ASTService:
473
477
  expensive reference extraction and persistence are reused. Older caches
474
478
  without the completion record are rebuilt once.
475
479
  """
476
- raw = self._store.get_meta("structural_snapshot_v1")
480
+ raw = self._store.get_meta(SNAPSHOT_KEY)
477
481
  if not raw:
478
482
  return False
479
483
  try:
@@ -533,7 +537,7 @@ class ASTService:
533
537
  (source, target) for source, targets in self._index.file_dependencies.items()
534
538
  for target in targets
535
539
  ])
536
- self._store.set_meta("structural_snapshot_v1", json.dumps({
540
+ self._store.set_meta(SNAPSHOT_KEY, json.dumps({
537
541
  "identity": self._snapshot_start,
538
542
  "discovered": sorted(fi.relative_path for fi in self._context_mgr._files),
539
543
  "parsed": sorted(self._ast_cache),
@@ -727,7 +731,7 @@ class ASTService:
727
731
  on large repositories. Files are parsed in batches of
728
732
  *batch_size* concurrently.
729
733
  """
730
- self._store.set_meta("structural_snapshot_v1", "")
734
+ self._store.set_meta(SNAPSHOT_KEY, "")
731
735
  self._snapshot_start = None
732
736
  from attocode_intel.telemetry import measure
733
737
  with measure("discovery"):
@@ -793,7 +797,7 @@ class ASTService:
793
797
 
794
798
  rel = self._to_rel(path)
795
799
  abs_path = os.path.join(self._root_dir, rel)
796
- self._store.set_meta("structural_snapshot_v1", "")
800
+ self._store.set_meta(SNAPSHOT_KEY, "")
797
801
  self._snapshot_start = None
798
802
 
799
803
  # Handle deletion
@@ -295,9 +295,8 @@ def _detect_source_prefixes(root_dir: str) -> list[str]:
295
295
  .get("packages", [])
296
296
  )
297
297
  for pkg in hatch_packages:
298
- parts = Path(pkg).parts
299
- if len(parts) >= 2:
300
- prefixes.add(parts[0] + "/")
298
+ if len(Path(pkg).parts) >= 2:
299
+ prefixes.add(Path(pkg).parent.as_posix() + "/")
301
300
 
302
301
  # Setuptools: [tool.setuptools] package-dir = {"" = "src"}
303
302
  setup_pkg_dir = (
@@ -367,12 +366,17 @@ def _build_file_index(
367
366
  normalized = f.relative_path.replace(os.sep, "/")
368
367
  file_index[normalized] = f.relative_path
369
368
 
370
- # Detect source prefixes and add stripped alternate keys
371
- source_prefixes = _detect_source_prefixes(root_dir)
369
+ # Detect source prefixes and add stripped alternate keys. A package below
370
+ # any src/ folder adds that folder too, as in packages/<name>/src/ of a monorepo.
371
+ source_prefixes = set(_detect_source_prefixes(root_dir))
372
+ for normalized in file_index:
373
+ path = "/" + normalized
374
+ if normalized.endswith("/__init__.py") and "/src/" in path:
375
+ source_prefixes.add(path[1:path.index("/src/") + 5])
372
376
  if source_prefixes:
373
377
  extra: dict[str, str] = {}
374
378
  for normalized, rel_path in file_index.items():
375
- for prefix in source_prefixes:
379
+ for prefix in sorted(source_prefixes):
376
380
  if normalized.startswith(prefix):
377
381
  stripped = normalized[len(prefix):]
378
382
  # Don't override direct matches
@@ -7,6 +7,7 @@ from pathlib import Path
7
7
 
8
8
  from .codebase_context import build_dependency_graph
9
9
  from .cross_references import CrossRefIndex
10
+ from .index_store import SNAPSHOT_KEY
10
11
 
11
12
 
12
13
  def changed_paths(before: dict, after: dict) -> set[str]:
@@ -54,7 +55,7 @@ def repair_index(service, asts: dict, identity: dict, changed: set[str]) -> dict
54
55
 
55
56
  # Invalidate before the first write: a crash cannot bless a partial update.
56
57
  store = service._store
57
- store.set_meta("structural_snapshot_v1", "")
58
+ store.set_meta(SNAPSHOT_KEY, "")
58
59
  removed = {row.path for row in store.get_all_files()} - asts.keys()
59
60
  for path in sorted(removed):
60
61
  store.remove_file(path)
@@ -21,6 +21,9 @@ from filelock import FileLock
21
21
  logger = logging.getLogger(__name__)
22
22
 
23
23
  SCHEMA_VERSION = "6"
24
+ # Bump the suffix when a change alters the saved graph edges, for example import resolution.
25
+ # Stores keep their tables, and the next start rebuilds the index once.
26
+ SNAPSHOT_KEY = "structural_snapshot_v2"
24
27
  SQLITE_BUSY_TIMEOUT_MS = 30_000
25
28
  INDEX_INIT_LOCK_TIMEOUT_SECONDS = 30
26
29
 
@@ -544,12 +547,12 @@ class IndexStore:
544
547
  """Drop all data (keeps schema)."""
545
548
  conn = self._get_conn()
546
549
  with self._lock:
547
- conn.executescript("""
550
+ conn.executescript(f"""
548
551
  DELETE FROM refs;
549
552
  DELETE FROM symbols;
550
553
  DELETE FROM dependencies;
551
554
  DELETE FROM files;
552
- DELETE FROM metadata WHERE key = 'structural_snapshot_v1';
555
+ DELETE FROM metadata WHERE key = '{SNAPSHOT_KEY}';
553
556
  """)
554
557
  conn.commit()
555
558
 
@@ -7,6 +7,7 @@ import os
7
7
  import threading
8
8
  from pathlib import Path
9
9
 
10
+ from attocode_intel._internal.integrations.context.index_store import SNAPSHOT_KEY
10
11
  from attocode_intel._internal.integrations.utilities.ignore import IgnoreManager
11
12
 
12
13
 
@@ -104,7 +105,7 @@ class FreshnessTracker:
104
105
  ast._context_mgr.discover_files()
105
106
  for path in changed:
106
107
  if path not in manifest:
107
- ast._store.set_meta("structural_snapshot_v1", "")
108
+ ast._store.set_meta(SNAPSHOT_KEY, "")
108
109
  ast._snapshot_start = None
109
110
  ast._index.remove_file(path)
110
111
  ast._ast_cache.pop(path, None)
@@ -165,13 +165,15 @@ def configure_client(
165
165
  # in every request. Claude gets no managed block, and an old block is removed.
166
166
  drop = client == "claude" or (remove and not any(name in servers for name in (NAME, REMOTE_NAME)))
167
167
  instruction = _instruction_text(guidance, client, remove=drop)
168
+ # Report the guidance file only when it holds the managed block.
169
+ guidance_file = str(guidance) if START in instruction else None
168
170
  # Prepare everything before writing either file; previews contain no credential values.
169
171
  if dry_run:
170
172
  return {
171
173
  "config": str(config),
172
174
  "entry": entry_name,
173
175
  "configuration": servers.get(entry_name),
174
- "guidance": str(guidance),
176
+ "guidance": guidance_file,
175
177
  "instructions": instruction,
176
178
  }
177
179
  atomic_write(config, output)
@@ -182,7 +184,7 @@ def configure_client(
182
184
  atomic_write(state_path, json.dumps(state, indent=2) + "\n")
183
185
  if old_state and old_state.exists():
184
186
  old_state.unlink()
185
- return {"client": client, "config": str(config), "guidance": str(guidance), "removed": remove}
187
+ return {"client": client, "config": str(config), "guidance": guidance_file, "removed": remove}
186
188
 
187
189
 
188
190
  async def diagnose(client, project=".", *, global_scope=False, remote=False):
@@ -213,8 +213,9 @@ def test_local_and_remote_config_coexist_and_restore_existing(tmp_path, client,
213
213
 
214
214
  def test_claude_install_writes_no_claude_md_copy_and_removes_an_old_one(tmp_path):
215
215
  # Claude Code shows the server instructions, so a copy in CLAUDE.md is a duplicate.
216
- configure_client("claude", str(tmp_path))
216
+ assert configure_client("claude", str(tmp_path))["guidance"] is None
217
217
  assert not (tmp_path / "CLAUDE.md").exists()
218
+ assert configure_client("codex", str(tmp_path))["guidance"] == str(tmp_path / "AGENTS.md")
218
219
  guidance = tmp_path / "CLAUDE.md"
219
220
  guidance.write_text("# Mine\n\n<!-- attocode-code-intel:start -->\nold\n<!-- attocode-code-intel:end -->\n")
220
221
  configure_client("claude", str(tmp_path))
@@ -6,7 +6,7 @@ from unittest.mock import patch
6
6
 
7
7
  import pytest
8
8
  from attocode_intel._internal.integrations.context.ast_service import ASTService
9
- from attocode_intel._internal.integrations.context.index_store import IndexStore
9
+ from attocode_intel._internal.integrations.context.index_store import SNAPSHOT_KEY, IndexStore
10
10
  from attocode_intel.freshness import FreshnessTracker
11
11
 
12
12
 
@@ -65,7 +65,7 @@ def test_edit_restart_matches_clean_index(tmp_path, online, kind):
65
65
  if online:
66
66
  assert first.repair_changed_files()
67
67
  assert first._last_snapshot_repair["reused_reference_files"] > 0
68
- assert first._store.get_meta("structural_snapshot_v1")
68
+ assert first._store.get_meta(SNAPSHOT_KEY)
69
69
  first._store.close()
70
70
 
71
71
  reopened = ASTService(str(tmp_path))
@@ -100,7 +100,7 @@ def test_interrupted_repair_cannot_restore_partial_store(tmp_path):
100
100
  with (patch.object(IndexStore, "save_files_batch", side_effect=OSError("interrupted write")),
101
101
  pytest.raises(OSError, match="interrupted write")):
102
102
  first.repair_changed_files()
103
- assert not first._store.get_meta("structural_snapshot_v1")
103
+ assert not first._store.get_meta(SNAPSHOT_KEY)
104
104
  finally:
105
105
  first._store.close()
106
106
  reopened = ASTService(str(tmp_path))
@@ -109,7 +109,7 @@ def test_interrupted_repair_cannot_restore_partial_store(tmp_path):
109
109
  state = reopened.initialize_skeleton()
110
110
  assert state.phase == "ready"
111
111
  assert extract.call_count == state.total_files
112
- assert reopened._store.get_meta("structural_snapshot_v1")
112
+ assert reopened._store.get_meta(SNAPSHOT_KEY)
113
113
  finally:
114
114
  reopened._store.close()
115
115
 
@@ -132,7 +132,7 @@ def test_failed_live_repair_retries_filesystem_changes(tmp_path):
132
132
  assert tracker.manifest != before
133
133
  assert ast.find_symbol("renamed")
134
134
  assert not ast.find_symbol("helper")
135
- assert ast._store.get_meta("structural_snapshot_v1")
135
+ assert ast._store.get_meta(SNAPSHOT_KEY)
136
136
  finally:
137
137
  ast._store.close()
138
138
 
@@ -283,3 +283,27 @@ async def test_hint_does_not_hide_the_tail_of_a_short_function(tmp_path, monkeyp
283
283
  assert data["follow_up"]["next_source"] is None
284
284
  finally:
285
285
  await gateway.close()
286
+
287
+
288
+ async def test_workspace_member_src_layout_links_its_tests(tmp_path, monkeypatch):
289
+ # A monorepo: the root config names only its own package, and a member package uses src/.
290
+ monkeypatch.setenv("ATTOCODE_INTEL_PRECISION", "off")
291
+ (tmp_path / "pyproject.toml").write_text('[tool.hatch.build.targets.wheel]\npackages = ["src/app"]\n')
292
+ (tmp_path / "src/app").mkdir(parents=True)
293
+ (tmp_path / "src/app/__init__.py").write_text("")
294
+ member = tmp_path / "packages/lib"
295
+ (member / "src/mylib").mkdir(parents=True)
296
+ (member / "src/mylib/__init__.py").write_text("")
297
+ (member / "src/mylib/core.py").write_text("def target(): return 1\n")
298
+ (member / "tests").mkdir()
299
+ (member / "tests/test_core.py").write_text("from mylib.core import target\ndef test_core(): assert target() == 1\n")
300
+ (tmp_path / "tests").mkdir()
301
+ (tmp_path / "tests/test_target_words.py").write_text("def test_target_words(): assert True\n")
302
+ gateway = OperationGateway(str(tmp_path), "daily", watch=False)
303
+ try:
304
+ bundle = decode(await gateway.execute_mcp("inspect_symbol", {
305
+ "symbol_name": "target", "file_path": "packages/lib/src/mylib/core.py"}))
306
+ assert bundle["tests"][0]["file_path"] == "packages/lib/tests/test_core.py"
307
+ assert bundle["tests"][0]["evidence"]["selected_symbol_reference"]
308
+ finally:
309
+ await gateway.close()
@@ -11,6 +11,7 @@ import pytest
11
11
  from attocode_intel._internal.integrations.context import ast_service
12
12
  from attocode_intel._internal.integrations.context.ast_service import ASTService
13
13
  from attocode_intel._internal.integrations.context.index_store import (
14
+ SNAPSHOT_KEY,
14
15
  SQLITE_BUSY_TIMEOUT_MS,
15
16
  IndexSchemaVersionError,
16
17
  IndexStore,
@@ -77,7 +78,7 @@ def test_restart_restores_complete_index_beyond_skeleton_budget(tmp_path, monkey
77
78
  first._run_hydration()
78
79
  expected = first._store.stats()
79
80
  assert expected["dependencies"] > 0
80
- assert first._store.get_meta("structural_snapshot_v1")
81
+ assert first._store.get_meta(SNAPSHOT_KEY)
81
82
  close(first)
82
83
  second = ASTService(str(tmp_path))
83
84
  try:
@@ -140,7 +141,7 @@ def test_incomplete_cache_is_not_restored(tmp_path, monkeypatch):
140
141
  second = ASTService(str(tmp_path))
141
142
  try:
142
143
  assert second.initialize_skeleton().phase == "skeleton"
143
- assert not second._store.get_meta("structural_snapshot_v1")
144
+ assert not second._store.get_meta(SNAPSHOT_KEY)
144
145
  finally:
145
146
  close(second)
146
147