attocode-code-intel 0.1.22__tar.gz → 0.1.24__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 (637) hide show
  1. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/PKG-INFO +22 -1
  2. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/README.md +21 -0
  3. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/pyproject.toml +1 -1
  4. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/__init__.py +1 -1
  5. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +11 -1
  6. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/service.py +21 -4
  7. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_mcp_search_evaluation.py +209 -1
  8. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_product.py +20 -0
  9. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_systemone_ranker.py +55 -4
  10. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/.gitignore +0 -0
  11. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/LICENSE +0 -0
  12. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/GUIDELINES.md +0 -0
  13. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/__init__.py +0 -0
  14. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/errors/__init__.py +0 -0
  15. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
  16. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
  17. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
  18. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
  19. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/ast_service.py +0 -0
  20. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +0 -0
  21. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
  22. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
  23. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
  24. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
  25. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +0 -0
  26. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/codebase_context.py +0 -0
  27. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
  28. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/cross_references.py +0 -0
  29. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +0 -0
  30. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
  31. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
  32. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
  33. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
  34. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
  35. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
  36. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/index_probe.py +0 -0
  37. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/index_repair.py +0 -0
  38. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/index_store.py +0 -0
  39. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/language_registry.py +0 -0
  40. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
  41. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -0
  42. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/parse_diagnostics.py +0 -0
  43. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
  44. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
  45. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
  46. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/semantic_search.py +0 -0
  47. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +0 -0
  48. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
  49. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
  50. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
  51. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/ts_parser.py +0 -0
  52. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
  53. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
  54. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
  55. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/lsp/client.py +0 -0
  56. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
  57. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
  58. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
  59. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
  60. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
  61. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
  62. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
  63. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
  64. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
  65. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
  66. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/utilities/ignore.py +0 -0
  67. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
  68. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/types/__init__.py +0 -0
  69. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/types/events.py +0 -0
  70. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_internal/types/severity.py +0 -0
  71. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/_shared.py +0 -0
  72. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/analysis_coverage.py +0 -0
  73. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/__init__.py +0 -0
  74. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/access.py +0 -0
  75. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/app.py +0 -0
  76. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/auth/__init__.py +0 -0
  77. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/auth/api_keys.py +0 -0
  78. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/auth/context.py +0 -0
  79. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/auth/jwt.py +0 -0
  80. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/auth/oauth.py +0 -0
  81. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/auth/passwords.py +0 -0
  82. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/deps.py +0 -0
  83. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/knowledge_bridge.py +0 -0
  84. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/mcp_transport.py +0 -0
  85. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/middleware.py +0 -0
  86. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/models.py +0 -0
  87. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/providers/__init__.py +0 -0
  88. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/providers/db_provider.py +0 -0
  89. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/providers/local_provider.py +0 -0
  90. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/providers/remote_provider.py +0 -0
  91. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/repository_source.py +0 -0
  92. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/__init__.py +0 -0
  93. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
  94. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/activity.py +0 -0
  95. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/adr.py +0 -0
  96. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/analysis.py +0 -0
  97. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/api_keys.py +0 -0
  98. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/auth.py +0 -0
  99. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/branches.py +0 -0
  100. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
  101. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/embeddings.py +0 -0
  102. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/files.py +0 -0
  103. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/files_v2.py +0 -0
  104. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/gc.py +0 -0
  105. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/git_v2.py +0 -0
  106. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/graph.py +0 -0
  107. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/graph_viz.py +0 -0
  108. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/health.py +0 -0
  109. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/history.py +0 -0
  110. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/jobs.py +0 -0
  111. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/learning.py +0 -0
  112. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/lsp.py +0 -0
  113. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/notify.py +0 -0
  114. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/operations.py +0 -0
  115. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/orgs.py +0 -0
  116. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/preferences.py +0 -0
  117. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/presence.py +0 -0
  118. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/projects.py +0 -0
  119. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/repos.py +0 -0
  120. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/search.py +0 -0
  121. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/snapshots.py +0 -0
  122. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/webhooks.py +0 -0
  123. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/routes/websocket.py +0 -0
  124. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/static/graph.html +0 -0
  125. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/api/utils.py +0 -0
  126. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/artifacts/__init__.py +0 -0
  127. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/artifacts/hashing.py +0 -0
  128. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/artifacts/provenance.py +0 -0
  129. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
  130. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/audit.py +0 -0
  131. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/bug_finder.py +0 -0
  132. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/bundle.py +0 -0
  133. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/catalog.py +0 -0
  134. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/change_evidence.py +0 -0
  135. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/change_investigation.py +0 -0
  136. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/change_review.py +0 -0
  137. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/cli.py +0 -0
  138. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/community.py +0 -0
  139. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/confidence/__init__.py +0 -0
  140. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/confidence/jev.py +0 -0
  141. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/confidence/llm.py +0 -0
  142. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/confidence/redact.py +0 -0
  143. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/confidence/settings.py +0 -0
  144. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/config.py +0 -0
  145. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/crypto.py +0 -0
  146. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/db/__init__.py +0 -0
  147. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/db/base.py +0 -0
  148. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/db/engine.py +0 -0
  149. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/db/models.py +0 -0
  150. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/entrypoint.py +0 -0
  151. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/focused_evidence.py +0 -0
  152. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/freshness.py +0 -0
  153. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/gateway.py +0 -0
  154. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/git/__init__.py +0 -0
  155. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/git/credentials.py +0 -0
  156. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/git/manager.py +0 -0
  157. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/git/models.py +0 -0
  158. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/git/storage.py +0 -0
  159. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/graph_query_parser.py +0 -0
  160. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/helpers.py +0 -0
  161. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/__init__.py +0 -0
  162. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/debouncer.py +0 -0
  163. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/delta_indexer.py +0 -0
  164. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/full_indexer.py +0 -0
  165. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/incremental.py +0 -0
  166. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/parser.py +0 -0
  167. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/indexing/summarizer.py +0 -0
  168. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/installer.py +0 -0
  169. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/investigation_cli.py +0 -0
  170. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/knowledge.py +0 -0
  171. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/local_knowledge.py +0 -0
  172. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/alembic.ini +0 -0
  173. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/env.py +0 -0
  174. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/script.py.mako +0 -0
  175. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
  176. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
  177. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
  178. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
  179. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
  180. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
  181. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
  182. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
  183. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
  184. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
  185. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
  186. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
  187. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
  188. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
  189. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
  190. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
  191. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
  192. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
  193. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
  194. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
  195. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/onboarding.py +0 -0
  196. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/output.py +0 -0
  197. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/precision.py +0 -0
  198. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/presence.py +0 -0
  199. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/probe.py +0 -0
  200. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/project_dir.py +0 -0
  201. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/pubsub.py +0 -0
  202. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/query_ranking.py +0 -0
  203. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/readiness.py +0 -0
  204. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/redis.py +0 -0
  205. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/reference_pages.py +0 -0
  206. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/remote.py +0 -0
  207. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/repo_ranker.py +0 -0
  208. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/request_context.py +0 -0
  209. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/__init__.py +0 -0
  210. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/ci.py +0 -0
  211. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/combinators.py +0 -0
  212. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/enricher.py +0 -0
  213. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/evolution.py +0 -0
  214. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/executor.py +0 -0
  215. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/filters/__init__.py +0 -0
  216. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/filters/pipeline.py +0 -0
  217. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/formatter.py +0 -0
  218. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/hygiene.py +0 -0
  219. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/importers/__init__.py +0 -0
  220. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/importers/semgrep.py +0 -0
  221. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/loader.py +0 -0
  222. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/marketplace.py +0 -0
  223. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/metavar.py +0 -0
  224. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/model.py +0 -0
  225. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/__init__.py +0 -0
  226. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
  227. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
  228. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
  229. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
  230. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
  231. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
  232. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
  233. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
  234. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
  235. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
  236. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
  237. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
  238. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
  239. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
  240. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
  241. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
  242. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
  243. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
  244. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
  245. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
  246. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
  247. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
  248. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
  249. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
  250. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
  251. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
  252. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
  253. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
  254. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
  255. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
  256. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
  257. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
  258. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
  259. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
  260. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
  261. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
  262. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
  263. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
  264. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
  265. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
  266. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
  267. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
  268. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
  269. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
  270. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
  271. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
  272. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
  273. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
  274. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
  275. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
  276. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
  277. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
  278. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
  279. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
  280. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
  281. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
  282. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
  283. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
  284. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
  285. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
  286. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
  287. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
  288. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
  289. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
  290. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
  291. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
  292. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
  293. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
  294. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
  295. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
  296. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
  297. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
  298. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
  299. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
  300. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/plugins/__init__.py +0 -0
  301. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
  302. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/profiling.py +0 -0
  303. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/registry.py +0 -0
  304. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/sarif.py +0 -0
  305. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/synthesis.py +0 -0
  306. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/rules/testing.py +0 -0
  307. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/search_evidence.py +0 -0
  308. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/server.py +0 -0
  309. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/sharing.py +0 -0
  310. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/__init__.py +0 -0
  311. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/branch_overlay.py +0 -0
  312. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/content_store.py +0 -0
  313. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/dependency_store.py +0 -0
  314. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/diff_engine.py +0 -0
  315. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/embedding_store.py +0 -0
  316. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/provenance_store.py +0 -0
  317. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/security_scanner_db.py +0 -0
  318. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/storage/symbol_store.py +0 -0
  319. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/structural_evidence.py +0 -0
  320. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/symbol_inspection.py +0 -0
  321. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/symbol_links.py +0 -0
  322. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/telemetry.py +0 -0
  323. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/test_ranking.py +0 -0
  324. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/testing/__init__.py +0 -0
  325. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/testing/fixtures.py +0 -0
  326. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/testing/helpers.py +0 -0
  327. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/testing/mocks.py +0 -0
  328. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/__init__.py +0 -0
  329. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/adr_tools.py +0 -0
  330. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/analysis_tools.py +0 -0
  331. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/composite_tools.py +0 -0
  332. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
  333. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/dead_code_tools.py +0 -0
  334. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/distill_tools.py +0 -0
  335. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/frecency_tools.py +0 -0
  336. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
  337. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/history_tools.py +0 -0
  338. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/learning_tools.py +0 -0
  339. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/lsp_tools.py +0 -0
  340. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/maintenance_tools.py +0 -0
  341. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/navigation_tools.py +0 -0
  342. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/overlay_tools.py +0 -0
  343. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/pin_store.py +0 -0
  344. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/pin_tools.py +0 -0
  345. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
  346. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/query_history_tools.py +0 -0
  347. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/readiness_tools.py +0 -0
  348. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/rule_tools.py +0 -0
  349. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/search_tools.py +0 -0
  350. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/tools/snapshot_tools.py +0 -0
  351. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/workers/__init__.py +0 -0
  352. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/workers/job_utils.py +0 -0
  353. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/workers/jobs.py +0 -0
  354. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/workers/run.py +0 -0
  355. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/src/attocode_intel/workers/settings.py +0 -0
  356. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/rule_violations/.attocode/rules/team-preferences.yaml +0 -0
  357. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/rule_violations/go/bad_patterns.go +0 -0
  358. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/rule_violations/java/BadPatterns.java +0 -0
  359. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/rule_violations/python/bad_patterns.py +0 -0
  360. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/rule_violations/rust/bad_patterns.rs +0 -0
  361. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/rule_violations/typescript/bad_patterns.ts +0 -0
  362. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/sample_project/.attocode/.gitignore +0 -0
  363. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/sample_project/__init__.py +0 -0
  364. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/sample_project/main.py +0 -0
  365. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/sample_project/models.py +0 -0
  366. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/fixtures/sample_project/utils.py +0 -0
  367. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/__init__.py +0 -0
  368. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/code_intel/__init__.py +0 -0
  369. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/code_intel/conftest.py +0 -0
  370. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/code_intel/test_http_smoke.py +0 -0
  371. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/code_intel/test_mcp_tools_audit.py +0 -0
  372. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/code_intel/test_remote_mcp_http_integration.py +0 -0
  373. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/code_intel/test_service_integration.py +0 -0
  374. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/integration/test_rule_bench_floor_e2e.py +0 -0
  375. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_ast_snapshot.py +0 -0
  376. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_behavioral_negation.py +0 -0
  377. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_capacity_experiment.py +0 -0
  378. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_change_focus.py +0 -0
  379. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_change_investigation.py +0 -0
  380. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_chunk_identity.py +0 -0
  381. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_codex_repair_study.py +0 -0
  382. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_cold_discovery.py +0 -0
  383. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_cold_index_cost.py +0 -0
  384. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_compact_inspection.py +0 -0
  385. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_corpus_capture.py +0 -0
  386. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_daily_workflows.py +0 -0
  387. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_db_navigation_http.py +0 -0
  388. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_discovery_ceiling.py +0 -0
  389. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_discovery_reuse.py +0 -0
  390. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_doctor.py +0 -0
  391. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_doctor_runtime.py +0 -0
  392. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_edit_restart.py +0 -0
  393. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_experiment_dispatch.py +0 -0
  394. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_experiment_evidence.py +0 -0
  395. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_experiment_readiness.py +0 -0
  396. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_external_study.py +0 -0
  397. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_fallback_lexical.py +0 -0
  398. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_file_symbol_scope.py +0 -0
  399. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_fixture_source_alias.py +0 -0
  400. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_focused_inspection.py +0 -0
  401. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_image_budget.py +0 -0
  402. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_importance_publication.py +0 -0
  403. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_index_probe.py +0 -0
  404. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_index_processes.py +0 -0
  405. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_index_reuse.py +0 -0
  406. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_index_sequences.py +0 -0
  407. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_kotlin_test_paths.py +0 -0
  408. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_language_capabilities.py +0 -0
  409. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_lean_profile.py +0 -0
  410. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_lexical_sql_cost.py +0 -0
  411. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_local_reranker.py +0 -0
  412. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_local_workflow_evidence.py +0 -0
  413. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_localize_study.py +0 -0
  414. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_lsp_diagnostics.py +0 -0
  415. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_lsp_document_lifecycle.py +0 -0
  416. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_lsp_stderr_lifecycle.py +0 -0
  417. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_mixed_workspace.py +0 -0
  418. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_module_ownership.py +0 -0
  419. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_native_capture.py +0 -0
  420. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_native_experiment.py +0 -0
  421. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_navigation_evidence.py +0 -0
  422. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_navigation_prefix_trial.py +0 -0
  423. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_ocaml_parser_routing.py +0 -0
  424. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_onboarding_study.py +0 -0
  425. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_operation_contracts.py +0 -0
  426. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_optional_grammar_admission.py +0 -0
  427. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_optional_language_depth.py +0 -0
  428. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_parse_recovery.py +0 -0
  429. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_parser_thread_isolation.py +0 -0
  430. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_pilot.py +0 -0
  431. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_precision_protocol.py +0 -0
  432. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_precision_recovery.py +0 -0
  433. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_preview_admission.py +0 -0
  434. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_preview_experiment.py +0 -0
  435. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_preview_sources.py +0 -0
  436. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_preview_windows.py +0 -0
  437. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_quality_cloud.py +0 -0
  438. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_quality_evaluation.py +0 -0
  439. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_quality_evidence.py +0 -0
  440. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_quality_lifecycle.py +0 -0
  441. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_quality_runner.py +0 -0
  442. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_query_ranking.py +0 -0
  443. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_query_requirements.py +0 -0
  444. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_ranking_intent.py +0 -0
  445. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_real_language_server.py +0 -0
  446. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_recovery_readiness.py +0 -0
  447. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_release_verification.py +0 -0
  448. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_remote.py +0 -0
  449. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_repair_study.py +0 -0
  450. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_restart_experiment.py +0 -0
  451. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_retrieval_ablation.py +0 -0
  452. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_retrieval_audit.py +0 -0
  453. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_retrieval_body_trial.py +0 -0
  454. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_retrieval_cycle.py +0 -0
  455. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_search_budget_repair.py +0 -0
  456. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_search_coverage.py +0 -0
  457. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_search_coverage_scale.py +0 -0
  458. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_search_evidence.py +0 -0
  459. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_search_evidence_audit.py +0 -0
  460. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_search_usefulness.py +0 -0
  461. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_snippet_budget.py +0 -0
  462. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_source_exclusions.py +0 -0
  463. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_structural_evidence.py +0 -0
  464. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_structural_write_cost.py +0 -0
  465. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_study.py +0 -0
  466. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_symbol_order.py +0 -0
  467. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_test_intent_trial.py +0 -0
  468. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_token_overhead.py +0 -0
  469. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_trigram_workspace.py +0 -0
  470. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_understanding_evaluation.py +0 -0
  471. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_walk_order.py +0 -0
  472. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_warm_cache.py +0 -0
  473. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/test_workflow_sequences.py +0 -0
  474. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/__init__.py +0 -0
  475. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/__init__.py +0 -0
  476. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/conftest.py +0 -0
  477. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_advisory_lock.py +0 -0
  478. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_api.py +0 -0
  479. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_api_phase3a.py +0 -0
  480. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_api_v2.py +0 -0
  481. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_auth.py +0 -0
  482. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_branch_versioning.py +0 -0
  483. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_bug_finder.py +0 -0
  484. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_call_graph_tool.py +0 -0
  485. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_ci_runner.py +0 -0
  486. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_cli_lifecycle.py +0 -0
  487. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_cli_maintenance_local.py +0 -0
  488. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_cli_ops.py +0 -0
  489. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_cli_query_commands.py +0 -0
  490. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_cli_remote.py +0 -0
  491. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_codex_rereview_polish.py +0 -0
  492. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_combinators.py +0 -0
  493. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_confidence.py +0 -0
  494. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_confidence_adoption.py +0 -0
  495. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_config.py +0 -0
  496. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_config_remote.py +0 -0
  497. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_cross_mode.py +0 -0
  498. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_db_security_scan.py +0 -0
  499. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_deps.py +0 -0
  500. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_diff_engine.py +0 -0
  501. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_edge_cases.py +0 -0
  502. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_frecency.py +0 -0
  503. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_fuzzy.py +0 -0
  504. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_index_store_migration.py +0 -0
  505. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_kw_index_status.py +0 -0
  506. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_lsp_call_graph.py +0 -0
  507. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_lsp_enrichment.py +0 -0
  508. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_lsp_extended_models.py +0 -0
  509. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_marketplace.py +0 -0
  510. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_metavar.py +0 -0
  511. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_middleware.py +0 -0
  512. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_notify_enhanced.py +0 -0
  513. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_org_isolation.py +0 -0
  514. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_pack_autoload.py +0 -0
  515. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_profiling.py +0 -0
  516. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_project_discovery.py +0 -0
  517. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_provenance_store.py +0 -0
  518. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_pubsub_streams.py +0 -0
  519. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_query_constraints.py +0 -0
  520. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_query_history.py +0 -0
  521. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_readiness.py +0 -0
  522. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_reindex_embeddings.py +0 -0
  523. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_remote_local_fallback.py +0 -0
  524. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_remote_provider.py +0 -0
  525. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_remote_reliability.py +0 -0
  526. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_repo_ranker.py +0 -0
  527. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rule_evolution.py +0 -0
  528. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rule_hygiene.py +0 -0
  529. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rule_synthesis.py +0 -0
  530. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rule_tools.py +0 -0
  531. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rule_violations.py +0 -0
  532. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rules_engine.py +0 -0
  533. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_rules_integration.py +0 -0
  534. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_sarif.py +0 -0
  535. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_search_tools.py +0 -0
  536. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_server_startup.py +0 -0
  537. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_service.py +0 -0
  538. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_service_mode.py +0 -0
  539. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_status_health.py +0 -0
  540. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_structural_executor.py +0 -0
  541. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_supply_chain_rules.py +0 -0
  542. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_testing_framework.py +0 -0
  543. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/test_webhook_encryption.py +0 -0
  544. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/__init__.py +0 -0
  545. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/conftest.py +0 -0
  546. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_adr_tools.py +0 -0
  547. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_analysis_tools.py +0 -0
  548. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_dead_code_tools.py +0 -0
  549. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_distill_tools.py +0 -0
  550. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_history_tools.py +0 -0
  551. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_learning_tools.py +0 -0
  552. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_lsp_tools.py +0 -0
  553. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_maintenance_tools_phase2.py +0 -0
  554. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_navigation_tools.py +0 -0
  555. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_phase2c_anchors_and_overlays.py +0 -0
  556. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_readiness_tools.py +0 -0
  557. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_search_status_mismatch.py +0 -0
  558. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_search_tools.py +0 -0
  559. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/code_intel/tools/test_server_tools.py +0 -0
  560. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/__init__.py +0 -0
  561. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_action_hash.py +0 -0
  562. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_ast_service_adapter.py +0 -0
  563. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_blob_oid.py +0 -0
  564. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_cache_manifest.py +0 -0
  565. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_cas.py +0 -0
  566. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_embedding_rotation.py +0 -0
  567. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_pagerank_restoration.py +0 -0
  568. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_provenance.py +0 -0
  569. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_retrieval_pin.py +0 -0
  570. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/context/test_vector_store_dim_safety.py +0 -0
  571. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/__init__.py +0 -0
  572. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/conftest.py +0 -0
  573. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_acc_at_k.py +0 -0
  574. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_broad_candidate_audit.py +0 -0
  575. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_calibration_demo.py +0 -0
  576. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_harness.py +0 -0
  577. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_agents.py +0 -0
  578. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_ci.py +0 -0
  579. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_datasets.py +0 -0
  580. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_dense.py +0 -0
  581. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_function_bm25.py +0 -0
  582. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_function_dense.py +0 -0
  583. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_rerank.py +0 -0
  584. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_retrieve.py +0 -0
  585. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_run.py +0 -0
  586. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_matrix_stats.py +0 -0
  587. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_mcp_bench.py +0 -0
  588. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_accuracy.py +0 -0
  589. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_bench_config.py +0 -0
  590. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_bench_corpus.py +0 -0
  591. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_bench_evaluator.py +0 -0
  592. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_bench_predicate.py +0 -0
  593. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_bench_scoring.py +0 -0
  594. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_bench_template_engine.py +0 -0
  595. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_rule_harness_import.py +0 -0
  596. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_search_quality_reporting.py +0 -0
  597. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_search_readiness.py +0 -0
  598. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/eval/test_seed_attocode_fixtures.py +0 -0
  599. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/__init__.py +0 -0
  600. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/__init__.py +0 -0
  601. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_architecture_drift.py +0 -0
  602. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_ast_service_hydration.py +0 -0
  603. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_body_chunking.py +0 -0
  604. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_call_graph.py +0 -0
  605. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_code_analyzer.py +0 -0
  606. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_codebase_ast.py +0 -0
  607. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_codebase_context.py +0 -0
  608. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_context_stores_closed.py +0 -0
  609. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_cross_ref_search.py +0 -0
  610. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_embedder_default.py +0 -0
  611. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_embeddings.py +0 -0
  612. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_embeddings_query.py +0 -0
  613. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_go_symbols.py +0 -0
  614. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_hydration.py +0 -0
  615. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_index_store.py +0 -0
  616. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_model_mismatch.py +0 -0
  617. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_path_downweight.py +0 -0
  618. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_query_routing.py +0 -0
  619. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_semantic_search.py +0 -0
  620. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_supported_languages.py +0 -0
  621. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_temporal_coupling.py +0 -0
  622. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_trigram_index.py +0 -0
  623. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_trigram_regex.py +0 -0
  624. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/context/test_ts_parser.py +0 -0
  625. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/test_dataflow.py +0 -0
  626. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/test_feature_flags.py +0 -0
  627. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/test_new_security_rules.py +0 -0
  628. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/test_security_autofix.py +0 -0
  629. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/test_security_matcher.py +0 -0
  630. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/test_streaming_lsp.py +0 -0
  631. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/utilities/__init__.py +0 -0
  632. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/utilities/test_ignore.py +0 -0
  633. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/integrations/utilities/test_token_estimate.py +0 -0
  634. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/test_code_intel.py +0 -0
  635. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/test_code_intel_hydration.py +0 -0
  636. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/test_errors.py +0 -0
  637. {attocode_code_intel-0.1.22 → attocode_code_intel-0.1.24}/tests/unit/test_memory_store.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: attocode-code-intel
3
- Version: 0.1.22
3
+ Version: 0.1.24
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
@@ -111,6 +111,8 @@ Provides-Extra: tree-sitter-all
111
111
  Requires-Dist: tree-sitter-language-pack>=0.6; extra == 'tree-sitter-all'
112
112
  Description-Content-Type: text/markdown
113
113
 
114
+ <!-- mcp-name: io.github.eren23/attocode-code-intel -->
115
+
114
116
  # attocode-code-intel
115
117
 
116
118
  Local code search and navigation for coding agents and for people. It runs as an MCP server for Codex, Claude Code, Cursor and other MCP clients, and as a command in your terminal. It needs no model, no API key and no network.
@@ -135,10 +137,29 @@ that new probe. An already running client session must be checked separately.
135
137
 
136
138
  For other clients (VS Code, Zed, Windsurf, Claude Desktop and more), run `attocode-code-intel install <target>`. `attocode-code-intel commands` lists the targets.
137
139
 
140
+ To run the server without an installation, use `uvx`. This is a configuration for any MCP client that starts a local command:
141
+
142
+ ```json
143
+ {
144
+ "mcpServers": {
145
+ "attocode-code-intel": {
146
+ "command": "uvx",
147
+ "args": ["attocode-code-intel", "--project", "/absolute/path/to/your/project"]
148
+ }
149
+ }
150
+ }
151
+ ```
152
+
153
+ You can omit `--project` if the client sends one workspace root. Otherwise the server looks for a repository marker such as `.git` in the working folder and its parents, but never selects your home folder. If it finds no repository, it stops with an error.
154
+
138
155
  To use the latest source, install from a clone of this repository: `uv tool install /path/to/attocode/packages/code-intel`.
139
156
 
140
157
  ## What your agent gets
141
158
 
159
+ Version 0.1.24 adds `ATTOCODE_INTEL_RANKING_PROVIDER=openrouter`, a preset for the opt-in hosted rerank. In a frozen trial with 24 short questions, the rerank found 24 of 26 labeled files in the first five results, against 20 without it; see [Hosted rerank](https://github.com/eren23/attocode/blob/main/docs/intelligence-search.md#hosted-rerank-experimental). Rerank stays off by default, because it sends source excerpts to OpenRouter.
160
+
161
+ Version 0.1.23 is listed in the official MCP Registry and documents a `uvx` quick start. The opt-in hosted rerank now accepts the dated model ID that OpenRouter returns; see [Hosted rerank](https://github.com/eren23/attocode/blob/main/docs/intelligence-search.md#hosted-rerank-experimental). Rerank stays off by default.
162
+
142
163
  Version 0.1.22 adds an opt-in discovery budget of up to 100,000 files
143
164
  (`ATTOCODE_INTEL_DISCOVERY_MAX_FILES`; the default stays 50,000). It also packages
144
165
  the LLM client, so `ATTOCODE_FLAG_CONFIDENCE=llm` and LLM rule synthesis work from
@@ -1,3 +1,5 @@
1
+ <!-- mcp-name: io.github.eren23/attocode-code-intel -->
2
+
1
3
  # attocode-code-intel
2
4
 
3
5
  Local code search and navigation for coding agents and for people. It runs as an MCP server for Codex, Claude Code, Cursor and other MCP clients, and as a command in your terminal. It needs no model, no API key and no network.
@@ -22,10 +24,29 @@ that new probe. An already running client session must be checked separately.
22
24
 
23
25
  For other clients (VS Code, Zed, Windsurf, Claude Desktop and more), run `attocode-code-intel install <target>`. `attocode-code-intel commands` lists the targets.
24
26
 
27
+ To run the server without an installation, use `uvx`. This is a configuration for any MCP client that starts a local command:
28
+
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "attocode-code-intel": {
33
+ "command": "uvx",
34
+ "args": ["attocode-code-intel", "--project", "/absolute/path/to/your/project"]
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ You can omit `--project` if the client sends one workspace root. Otherwise the server looks for a repository marker such as `.git` in the working folder and its parents, but never selects your home folder. If it finds no repository, it stops with an error.
41
+
25
42
  To use the latest source, install from a clone of this repository: `uv tool install /path/to/attocode/packages/code-intel`.
26
43
 
27
44
  ## What your agent gets
28
45
 
46
+ Version 0.1.24 adds `ATTOCODE_INTEL_RANKING_PROVIDER=openrouter`, a preset for the opt-in hosted rerank. In a frozen trial with 24 short questions, the rerank found 24 of 26 labeled files in the first five results, against 20 without it; see [Hosted rerank](https://github.com/eren23/attocode/blob/main/docs/intelligence-search.md#hosted-rerank-experimental). Rerank stays off by default, because it sends source excerpts to OpenRouter.
47
+
48
+ Version 0.1.23 is listed in the official MCP Registry and documents a `uvx` quick start. The opt-in hosted rerank now accepts the dated model ID that OpenRouter returns; see [Hosted rerank](https://github.com/eren23/attocode/blob/main/docs/intelligence-search.md#hosted-rerank-experimental). Rerank stays off by default.
49
+
29
50
  Version 0.1.22 adds an opt-in discovery budget of up to 100,000 files
30
51
  (`ATTOCODE_INTEL_DISCOVERY_MAX_FILES`; the default stays 50,000). It also packages
31
52
  the LLM client, so `ATTOCODE_FLAG_CONFIDENCE=llm` and LLM rule synthesis work from
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "attocode-code-intel"
9
- version = "0.1.22"
9
+ version = "0.1.24"
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.22"
52
+ __version__ = "0.1.24"
@@ -214,7 +214,17 @@ class SystemOneChoiceReranker:
214
214
  def predict() -> None:
215
215
  try:
216
216
  response = self._post(body, headers)
217
- if self.model and response.get("model") not in {None, self.model}:
217
+ # Hosted routers answer with a dated snapshot of the pinned model,
218
+ # for example typesafe/jev-1.13-20260917 for typesafe/jev-1.13.
219
+ returned = response.get("model")
220
+ if (
221
+ self.model
222
+ and returned is not None
223
+ and not (
224
+ isinstance(returned, str)
225
+ and re.fullmatch(re.escape(self.model) + r"(?:-\d{8})?", returned)
226
+ )
227
+ ):
218
228
  raise ValueError("unexpected ranking model")
219
229
  output.append(("ok", self._scores(response, len(bounded))))
220
230
  except ValueError:
@@ -60,6 +60,14 @@ if TYPE_CHECKING:
60
60
 
61
61
  logger = logging.getLogger(__name__)
62
62
 
63
+ # Settings of the frozen hosted-rerank trial (evals/results/2026-11-01-hosted-rerank.md).
64
+ _OPENROUTER_PRESET = {
65
+ "endpoint": "https://openrouter.ai/api/alpha/decisions",
66
+ "model": "typesafe/jev-1.13",
67
+ "auth_env": "OPENROUTER_API_KEY",
68
+ "timeout_ms": 1500,
69
+ }
70
+
63
71
  # Registry of service instances by project_dir
64
72
  _instances: dict[str, CodeIntelService] = {}
65
73
  _instances_lock = threading.Lock()
@@ -91,6 +99,11 @@ class CodeIntelService:
91
99
  self._ranking_provider = (self._config.ranking_provider
92
100
  if config is not None else
93
101
  os.environ.get("ATTOCODE_INTEL_RANKING_PROVIDER", "")) or "auto"
102
+ # The "openrouter" preset is SystemOne with the trial-tested defaults. Explicit
103
+ # settings still win, and the remote opt-in stays scoped to one workspace.
104
+ preset = _OPENROUTER_PRESET if self._ranking_provider == "openrouter" else {}
105
+ if preset:
106
+ self._ranking_provider = "systemone"
94
107
  self._systemone_status = "not_configured"
95
108
  self._memory_store: MemoryStore | None = None
96
109
  self._temporal_analyzer: TemporalCouplingAnalyzer | None = None
@@ -119,11 +132,15 @@ class CodeIntelService:
119
132
  remote_workspace = (self._config.ranking_remote_workspace or
120
133
  environment.get("ATTOCODE_INTEL_RANKING_REMOTE_WORKSPACE", ""))
121
134
  timeout_ms = (self._config.ranking_timeout_ms if config is not None else
122
- int(environment.get("ATTOCODE_INTEL_RANKING_TIMEOUT_MS", "0")))
135
+ int(environment.get("ATTOCODE_INTEL_RANKING_TIMEOUT_MS", "0"))
136
+ ) or preset.get("timeout_ms", 0)
123
137
  self._systemone_ranker = SystemOneChoiceReranker(
124
- self._config.ranking_endpoint or environment.get("ATTOCODE_INTEL_RANKING_ENDPOINT", ""),
125
- model=self._config.ranking_model or environment.get("ATTOCODE_INTEL_RANKING_MODEL", ""),
126
- auth_env=self._config.ranking_auth_env or environment.get("ATTOCODE_INTEL_RANKING_AUTH_ENV", ""),
138
+ self._config.ranking_endpoint or environment.get("ATTOCODE_INTEL_RANKING_ENDPOINT", "")
139
+ or preset.get("endpoint", ""),
140
+ model=self._config.ranking_model or environment.get("ATTOCODE_INTEL_RANKING_MODEL", "")
141
+ or preset.get("model", ""),
142
+ auth_env=self._config.ranking_auth_env or environment.get("ATTOCODE_INTEL_RANKING_AUTH_ENV", "")
143
+ or preset.get("auth_env", ""),
127
144
  allow_remote=(remote_opt_in and os.path.isabs(remote_workspace) and
128
145
  os.path.realpath(remote_workspace) == self._project_dir),
129
146
  service_mode=self._config.is_service_mode,
@@ -1,10 +1,14 @@
1
1
  """The quality operator must measure the consumer's actual budgeted output."""
2
+ import argparse
3
+ import hashlib
4
+ import json
2
5
  from copy import deepcopy
3
6
 
4
7
  import pytest
5
8
  from attocode_intel.gateway import OperationGateway
6
9
 
7
- from eval.quality.mcp_search import compare, evidence_hits, observe
10
+ from eval.quality.mcp_search import compare, evidence_hits, observe, run, worst_of
11
+ from eval.quality.rerank_trial import decide
8
12
 
9
13
 
10
14
  def test_visible_evidence_requires_literal_quote_in_the_same_file_and_snippet_lines():
@@ -379,3 +383,207 @@ def test_test_support_development_rejection_replays_from_delivery():
379
383
  assert decision["decision"] == "rejected on development: no judged test recovered at five"
380
384
  assert decision["fresh_validation_started"] is False
381
385
  assert not replayed["individual_losses"]
386
+
387
+
388
+ def test_worst_of_keeps_only_labels_every_sample_delivered():
389
+ samples = [{"hits": {"files": [0, 1], "visible": [1]}}, {"hits": {"files": [1, 2], "visible": [1]}},
390
+ {"hits": {"files": [1], "visible": []}}]
391
+ assert worst_of(samples) == {"files": [1], "visible": []}
392
+
393
+
394
+ RERANK = {"provider": "systemone", "model": "typesafe/jev-1.13", "remote": True,
395
+ "method": "systemone_choice", "rerank_elapsed_ms": 600}
396
+ SCOPED = {**RERANK, "method": "source_aware_deterministic", "fallback_reason": "single_candidate"}
397
+ del SCOPED["rerank_elapsed_ms"]
398
+
399
+
400
+ def hosted_runs():
401
+ """A passing trial: +3 first-five files across two packs, no losses, all hosted."""
402
+ questions = (("p", "one", [0, 1]), ("q", "two", [0]))
403
+ design = json.dumps({"repositories": [{"pack": pack, "commit": "c", "queries": [{"id": qid}]}
404
+ for pack, qid, _ in questions]}).encode()
405
+ arms = {}
406
+ for arm in ("baseline", "candidate"):
407
+ arms[arm] = []
408
+ for pack, qid, gained in questions:
409
+ row = {"id": qid, "pack": pack, "query": qid, "evidence": [{"file": "a"}] * 3,
410
+ "inspection_hits": [], "pages": {}}
411
+ for page in ("5", "24", "scoped"):
412
+ files = (gained if arm == "candidate" else []) if page == "5" else [0, 1, 2]
413
+ hits = {"files": files, "ranges": files, "visible": []}
414
+ row["pages"][page] = {"request": {"top_k": page}, "seconds": .5, "hits": hits}
415
+ if arm == "candidate":
416
+ row["pages"][page]["samples"] = [
417
+ {"seconds": .5, "hits": deepcopy(hits),
418
+ "ranking_diagnostic": [dict(SCOPED if page == "scoped" else RERANK)]}
419
+ for _ in range(3)]
420
+ arms[arm].append({"pack": pack, "arm": arm, "commit": "c", "queries": [row],
421
+ "questions_sha256": hashlib.sha256(design).hexdigest(),
422
+ "operator_sha256": "o", "engine_sha256": "e",
423
+ "samples_may_differ": arm == "candidate",
424
+ "rerank_calls": {"posted": 6 if arm == "candidate" else 0, "refused": 0}})
425
+ return design, arms["baseline"], arms["candidate"], {"usage": 1.0}, {"usage": 1.01}
426
+
427
+
428
+ def candidate_pages(candidate, pages=("5", "24")):
429
+ return [r["queries"][0]["pages"][p] for r in candidate for p in pages]
430
+
431
+
432
+ def set_files(page, files):
433
+ page["hits"]["files"] = files
434
+ for s in page.get("samples", []):
435
+ s["hits"]["files"] = files
436
+
437
+
438
+ def test_hosted_trial_passes_and_reports_spend():
439
+ decision = decide(*hosted_runs())
440
+ assert decision["passed"], decision["checks"]
441
+ assert decision["hosted"]["files_5_net_by_pack"] == {"p": 2, "q": 1}
442
+ assert decision["hosted"]["attempts"] == 12 and decision["hosted"]["rankings"] == 18
443
+ assert decision["hosted"]["estimated_usd"] == .009
444
+
445
+
446
+ def _small_gain(b, c, before, after):
447
+ set_files(c[0]["queries"][0]["pages"]["5"], [0])
448
+
449
+
450
+ def _single_pack_gain(b, c, before, after):
451
+ set_files(c[0]["queries"][0]["pages"]["5"], [0, 1, 2])
452
+ set_files(c[1]["queries"][0]["pages"]["5"], [])
453
+
454
+
455
+ def _loss_24(b, c, before, after):
456
+ set_files(c[0]["queries"][0]["pages"]["24"], [0, 1])
457
+
458
+
459
+ def _loss_5(b, c, before, after):
460
+ set_files(b[0]["queries"][0]["pages"]["5"], [2])
461
+ set_files(b[1]["queries"][0]["pages"]["5"], [1])
462
+
463
+
464
+ def _fallback(b, c, before, after):
465
+ for s in c[0]["queries"][0]["pages"]["5"]["samples"]:
466
+ s["ranking_diagnostic"] = [{**RERANK, "method": "source_aware_deterministic",
467
+ "fallback_reason": "transport_error"}]
468
+
469
+
470
+ def _config(b, c, before, after):
471
+ c[0]["queries"][0]["pages"]["scoped"]["samples"][0]["ranking_diagnostic"] = [
472
+ {"provider": "systemone", "method": "source_aware_deterministic", "fallback_reason": "missing_credential"}]
473
+
474
+
475
+ def _model(b, c, before, after):
476
+ candidate_pages(c)[0]["samples"][0]["ranking_diagnostic"][0]["model"] = "other/model"
477
+
478
+
479
+ def _local(b, c, before, after):
480
+ candidate_pages(c)[0]["samples"][0]["ranking_diagnostic"][0]["remote"] = False
481
+
482
+
483
+ def _slow_rerank(b, c, before, after):
484
+ for page in candidate_pages(c):
485
+ for s in page["samples"]:
486
+ s["ranking_diagnostic"][0]["rerank_elapsed_ms"] = 2000
487
+
488
+
489
+ def _slow_search(b, c, before, after):
490
+ for page in candidate_pages(c):
491
+ for s in page["samples"]:
492
+ s["seconds"] = 3
493
+
494
+
495
+ def _baseline_remote(b, c, before, after):
496
+ b[0]["rerank_calls"]["posted"] = 1
497
+
498
+
499
+ def _refused(b, c, before, after):
500
+ c[0]["rerank_calls"]["refused"] = 1
501
+
502
+
503
+ def _overspent(b, c, before, after):
504
+ after["usage"] = 6.5
505
+
506
+
507
+ def _usage_reset(b, c, before, after):
508
+ after["usage"] = .5
509
+
510
+
511
+ def _estimate(b, c, before, after):
512
+ c[0]["rerank_calls"]["posted"] = 7000
513
+
514
+
515
+ @pytest.mark.parametrize("mutate, check", [
516
+ (_small_gain, "files_5_gain"), (_single_pack_gain, "files_5_gain"), (_loss_24, "no_file_loss_24"),
517
+ (_loss_5, "at_most_one_file_loss_5"), (_fallback, "fallback_rate"), (_config, "no_config_fallback"),
518
+ (_model, "hosted_ranker_used"), (_local, "hosted_ranker_used"), (_slow_rerank, "rerank_p95"),
519
+ (_slow_search, "search_p95"), (_baseline_remote, "baseline_no_remote_calls"),
520
+ (_refused, "no_refused_calls"), (_overspent, "spend"), (_usage_reset, "spend"), (_estimate, "spend")])
521
+ def test_hosted_trial_gate_rejects(mutate, check):
522
+ design, b, c, before, after = hosted_runs()
523
+ mutate(b, c, before, after)
524
+ decision = decide(design, b, c, before, after)
525
+ assert not decision["checks"][check] and not decision["passed"]
526
+
527
+
528
+ def _digest(b, c):
529
+ c[0]["questions_sha256"] = "x"
530
+
531
+
532
+ def _engine(b, c):
533
+ c[0]["engine_sha256"] = "other"
534
+
535
+
536
+ def _missing_pack(b, c):
537
+ del c[1]
538
+
539
+
540
+ def _stable_samples(b, c):
541
+ c[0]["samples_may_differ"] = False
542
+
543
+
544
+ def _two_samples(b, c):
545
+ candidate_pages(c)[0]["samples"].pop()
546
+
547
+
548
+ def _lucky_draw(b, c):
549
+ candidate_pages(c)[0]["samples"][0]["hits"]["files"] = []
550
+
551
+
552
+ @pytest.mark.parametrize("mutate", [_digest, _engine, _missing_pack, _stable_samples, _two_samples, _lucky_draw])
553
+ def test_hosted_trial_rejects_mismatched_observations(mutate):
554
+ design, b, c, before, after = hosted_runs()
555
+ mutate(b, c)
556
+ with pytest.raises(ValueError):
557
+ decide(design, b, c, before, after)
558
+
559
+
560
+ @pytest.mark.asyncio
561
+ async def test_call_cap_refuses_before_any_rerank_request_leaves(tmp_path, monkeypatch):
562
+ from attocode_intel._internal.integrations.context.systemone_ranker import (
563
+ SystemOneChoiceReranker,
564
+ )
565
+
566
+ source = tmp_path / "repo"
567
+ source.mkdir()
568
+ (source / "settings.py").write_text(
569
+ 'def load_settings(path):\n """Load settings from a configuration file."""\n return open(path).read()\n')
570
+ (source / "config.py").write_text(
571
+ 'def read_configuration_file(path):\n """Read settings from the configuration file."""\n return path\n')
572
+ design = tmp_path / "design.json"
573
+ design.write_text(json.dumps({"budget": 2000, "repositories": [{"pack": "tiny", "commit": "c", "queries": [
574
+ {"id": "tiny:1", "query": "load settings", "evidence": [
575
+ {"file": "settings.py", "line": 1, "quote": "def load_settings(path):",
576
+ "source_sha256": hashlib.sha256((source / "settings.py").read_bytes()).hexdigest()}]}]}]}))
577
+ for name, value in (("PROVIDER", "systemone"), ("ENDPOINT", "http://127.0.0.1:9/decisions"),
578
+ ("MODEL", "typesafe/jev-1.13")):
579
+ monkeypatch.setenv(f"ATTOCODE_INTEL_RANKING_{name}", value)
580
+ monkeypatch.delenv("ATTOCODE_INTEL_RANKING_AUTH_ENV", raising=False)
581
+ monkeypatch.delenv("ATTOCODE_LOCAL_ONLY", raising=False)
582
+ sent = []
583
+ monkeypatch.setattr(SystemOneChoiceReranker, "_post", lambda self, body, headers: sent.append(body))
584
+ args = argparse.Namespace(questions=design, source=source, output=tmp_path / "out.json", pack="tiny",
585
+ arm="candidate", capture_generation=False, samples_may_differ=True,
586
+ max_rerank_calls=0, require_rerank=True, warmup_timeout=30)
587
+ with pytest.raises(RuntimeError, match="Rerank call limit"):
588
+ await run(args)
589
+ assert sent == [] and not args.output.exists()
@@ -433,6 +433,26 @@ def test_package_and_code_report_the_same_version():
433
433
  assert tomllib.loads(pyproject.read_text())["project"]["version"] == __version__
434
434
 
435
435
 
436
+ def test_registry_entry_matches_package():
437
+ """A version bump that forgets server.json would publish a broken registry entry."""
438
+ import tomllib
439
+
440
+ from attocode_intel import __version__
441
+
442
+ package = Path(__file__).resolve().parents[1]
443
+ entry = json.loads((package.parents[1] / "server.json").read_text())
444
+ project = tomllib.loads((package / "pyproject.toml").read_text())["project"]
445
+ [listed] = entry["packages"]
446
+ assert entry["version"] == listed["version"] == project["version"] == __version__
447
+ assert listed["identifier"] == project["name"]
448
+ assert listed["registryType"] == "pypi" and listed["transport"] == {"type": "stdio"}
449
+ assert len(entry["description"]) <= 100
450
+ # The registry reads ownership from this marker in the PyPI description.
451
+ assert project["readme"] == "README.md"
452
+ first_line = (package / "README.md").read_text().splitlines()[0]
453
+ assert first_line == f"<!-- mcp-name: {entry['name']} -->"
454
+
455
+
436
456
  def test_shipped_source_imports_no_dev_or_archived_package():
437
457
  """The wheel ships only attocode_intel; a dev or archived import fails for pip users."""
438
458
  banned = {"eval", "attocode", "attoswarm", "attocode_core"}
@@ -78,17 +78,40 @@ def test_invalid_distributions_preserve_original_order(response):
78
78
  assert not result.reranked and result.fallback_reason == "invalid_response"
79
79
 
80
80
 
81
- def test_unexpected_model_identity_is_rejected():
82
- response = {**_answer([0.2, 0.8]), "model": "different-model"}
81
+ def _rank_with_returned_model(pinned: str, returned):
82
+ response = {**_answer([0.2, 0.8]), **({} if returned is None else {"model": returned})}
83
83
  ranker = SystemOneChoiceReranker(
84
84
  "http://127.0.0.1:8000/v1/systemone",
85
- model="pinned-model",
85
+ model=pinned,
86
86
  transport=httpx.MockTransport(lambda _request: httpx.Response(200, json=response)),
87
87
  )
88
- result = ranker.rerank_result("query", _candidates())
88
+ return ranker.rerank_result("query", _candidates())
89
+
90
+
91
+ @pytest.mark.parametrize(
92
+ "returned",
93
+ ["different-model", "pinned-model2", "pinned-model-x", "pinned-model-2026091", 7],
94
+ )
95
+ def test_unexpected_model_identity_is_rejected(returned):
96
+ result = _rank_with_returned_model("pinned-model", returned)
89
97
  assert not result.reranked and result.fallback_reason == "invalid_response"
90
98
 
91
99
 
100
+ @pytest.mark.parametrize(
101
+ ("pinned", "returned"),
102
+ [
103
+ ("pinned-model", "pinned-model"),
104
+ ("pinned-model", None),
105
+ # OpenRouter answers typesafe/jev-1.13 with its dated snapshot.
106
+ ("typesafe/jev-1.13", "typesafe/jev-1.13-20260917"),
107
+ ("", "any-model"),
108
+ ],
109
+ )
110
+ def test_pinned_model_and_its_dated_snapshot_are_accepted(pinned, returned):
111
+ result = _rank_with_returned_model(pinned, returned)
112
+ assert result.reranked and result.fallback_reason is None
113
+
114
+
92
115
  def test_remote_requires_consent_and_https_and_redacts_known_secrets(monkeypatch):
93
116
  monkeypatch.delenv("ATTOCODE_LOCAL_ONLY", raising=False)
94
117
  endpoint = "https://rank.example/v1/systemone"
@@ -190,6 +213,34 @@ def test_remote_opt_in_is_scoped_to_one_workspace(tmp_path, monkeypatch):
190
213
  assert CodeIntelService(str(other))._systemone_ranker is None
191
214
 
192
215
 
216
+
217
+ def test_openrouter_preset_uses_the_trial_settings_and_keeps_the_workspace_scope(tmp_path, monkeypatch):
218
+ monkeypatch.delenv("ATTOCODE_LOCAL_ONLY", raising=False)
219
+ allowed = tmp_path / "allowed"
220
+ other = tmp_path / "other"
221
+ allowed.mkdir()
222
+ other.mkdir()
223
+ for name in ("ENDPOINT", "MODEL", "AUTH_ENV", "TIMEOUT_MS"):
224
+ monkeypatch.delenv(f"ATTOCODE_INTEL_RANKING_{name}", raising=False)
225
+ monkeypatch.setenv("ATTOCODE_INTEL_RANKING_PROVIDER", "openrouter")
226
+ monkeypatch.setenv("ATTOCODE_INTEL_RANKING_ALLOW_REMOTE", "1")
227
+ monkeypatch.setenv("ATTOCODE_INTEL_RANKING_REMOTE_WORKSPACE", str(allowed))
228
+ service = CodeIntelService(str(allowed))
229
+ ranker = service._systemone_ranker
230
+ assert service._ranking_provider == "systemone" and service._systemone_status == "configured"
231
+ assert (ranker.endpoint, ranker.model, ranker.auth_env, ranker.timeout_seconds, ranker.remote) == (
232
+ "https://openrouter.ai/api/alpha/decisions", "typesafe/jev-1.13", "OPENROUTER_API_KEY", 1.5, True)
233
+ # The preset does not widen the remote opt-in.
234
+ assert CodeIntelService(str(other))._systemone_ranker is None
235
+ monkeypatch.delenv("ATTOCODE_INTEL_RANKING_ALLOW_REMOTE")
236
+ assert CodeIntelService(str(allowed))._systemone_status == "invalid_config"
237
+
238
+ explicit = CodeIntelService(str(allowed), CodeIntelConfig(
239
+ ranking_provider="openrouter", ranking_model="typesafe/other", ranking_timeout_ms=900,
240
+ ranking_allow_remote=True, ranking_remote_workspace=str(allowed)))
241
+ assert (explicit._systemone_ranker.model, explicit._systemone_ranker.timeout_seconds) == ("typesafe/other", .9)
242
+ assert explicit._systemone_ranker.endpoint == "https://openrouter.ai/api/alpha/decisions"
243
+
193
244
  def test_redirect_does_not_send_source_to_a_second_endpoint():
194
245
  requested = []
195
246