attocode-code-intel 0.1.5__tar.gz → 0.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/PKG-INFO +3 -3
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/README.md +2 -2
- attocode_code_intel-0.1.6/evals/ast_restart_probe.py +101 -0
- attocode_code_intel-0.1.6/evals/body_cost_probe.py +101 -0
- attocode_code_intel-0.1.6/evals/discovery_reuse_probe.py +63 -0
- attocode_code_intel-0.1.6/evals/lexical_sql_probe.py +171 -0
- attocode_code_intel-0.1.6/evals/restart_discovery_probe.py +101 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-14-breadth-cloud-first.json +585 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-14-breadth-development.json +10355 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-14-breadth-development.md +113 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-ast-restart.json +183 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-ast-restart.md +87 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-body-index-profile.json +83 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-body-index-profile.md +40 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-breadth-cloud.json +3962 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-breadth-cloud.md +67 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-bootstrap.json +62 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-bootstrap.md +23 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-setup-lock.json +45 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cloud-setup-lock.md +28 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cockroach-index-probe.json +2107 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cockroach-index-probe.md +123 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-followup.json +6958 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-followup.md +110 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-repair-cycle.json +2350 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-cold-repair-cycle.md +80 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-body-repair.json +2257 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-body-repair.md +115 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-validation.json +851 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-discovery-validation.md +85 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-index-probe-readiness.json +2766 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-index-probe-readiness.md +91 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-lexical-sql-contention.json +220 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-lexical-sql-contention.md +38 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-restart-discovery-repair.json +287 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-restart-discovery-repair.md +55 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-structural-write-contention.json +151 -0
- attocode_code_intel-0.1.6/evals/results/2026-10-15-structural-write-contention.md +51 -0
- attocode_code_intel-0.1.6/evals/structural_write_probe.py +83 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/pyproject.toml +1 -1
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/__init__.py +1 -1
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/ast_service.py +59 -17
- attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +164 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +15 -61
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/codebase_context.py +173 -117
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cross_references.py +34 -5
- attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +57 -0
- attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/index_probe.py +197 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/index_repair.py +3 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/index_store.py +67 -56
- attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/language_registry.py +75 -0
- attocode_code_intel-0.1.6/src/attocode_intel/_internal/integrations/context/module_resolution.py +306 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/semantic_search.py +491 -291
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +13 -4
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/ts_parser.py +345 -38
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/lsp/client.py +7 -3
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/utilities/ignore.py +34 -4
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/freshness.py +8 -1
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/precision.py +9 -4
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/search_evidence.py +38 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/service.py +13 -1
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/symbol_links.py +42 -6
- attocode_code_intel-0.1.6/tests/test_ast_snapshot.py +307 -0
- attocode_code_intel-0.1.6/tests/test_cold_index_cost.py +249 -0
- attocode_code_intel-0.1.6/tests/test_discovery_reuse.py +237 -0
- attocode_code_intel-0.1.6/tests/test_index_probe.py +229 -0
- attocode_code_intel-0.1.6/tests/test_index_processes.py +155 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_index_reuse.py +123 -0
- attocode_code_intel-0.1.6/tests/test_index_sequences.py +74 -0
- attocode_code_intel-0.1.6/tests/test_language_capabilities.py +249 -0
- attocode_code_intel-0.1.6/tests/test_lexical_sql_cost.py +164 -0
- attocode_code_intel-0.1.6/tests/test_mixed_workspace.py +106 -0
- attocode_code_intel-0.1.6/tests/test_module_ownership.py +314 -0
- attocode_code_intel-0.1.6/tests/test_operation_contracts.py +51 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_precision_protocol.py +15 -2
- attocode_code_intel-0.1.6/tests/test_quality_cloud.py +535 -0
- attocode_code_intel-0.1.6/tests/test_quality_evidence.py +279 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_quality_lifecycle.py +4 -4
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_quality_runner.py +68 -0
- attocode_code_intel-0.1.6/tests/test_real_language_server.py +148 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_search_evidence.py +119 -0
- attocode_code_intel-0.1.6/tests/test_source_exclusions.py +29 -0
- attocode_code_intel-0.1.6/tests/test_structural_write_cost.py +88 -0
- attocode_code_intel-0.1.5/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -52
- attocode_code_intel-0.1.5/tests/test_language_capabilities.py +0 -42
- attocode_code_intel-0.1.5/tests/test_quality_cloud.py +0 -178
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/.gitignore +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/LICENSE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/README.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_candidate_audit.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_query_cases.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_query_external_cases.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/broad_query_final_holdout.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/client_comparison.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/client_responses.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/codex_repair_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/daily.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/designs/2026-10-13-codex-repair-diagnostic.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/designs/2026-10-13-r7-task-completion-pilot.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/designs/2026-10-14-workflow-pilot.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/external_benchmarks.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/external_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/graded_blind_pack.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/localize_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/locbench_title_pack.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/onboarding_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/pilot.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/quality_scoring.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/quality_tasks.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/release_gate.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/repair_grading.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/repair_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/repair_worker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/responses.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-09-05-macos.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-04-broad-query-ranking.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-04-decision-reranker-trial.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-04-systemone-http-local-trial.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-05-broad-candidate-audit.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-05-source-view-transfer.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-08-blind-graded-rerank.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-08-locbench-560.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-09-locbench-560-first-stage.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-10-agent-pilot.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-10-agent-r3.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-10-matrix-r1.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-11-agent-r4-stage0.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-12-r4-stage1-review-agents.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-12-r5-test-suggestions.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-codex-repair-diagnostic.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-r6-review-test-note.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-r7-preparation.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-13-r7-wiring.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/broad-report.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/lifecycle.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/manifest.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/quick-report.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/ranking.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/ranking.log +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/scale.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/storage.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality/workflows.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-bounded-quality.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-r7-completion-pilot.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence-audit/fixture-replay.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence-audit/ledger.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence-audit/report.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-evidence.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/README.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/artifact-hashes.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/chunk-analysis.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/chunk-audit-script.txt +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/chunk-pools.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/mcp-smoke-script.txt +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/mcp-smoke.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/2026-10-14-search-followup/metadata-source-probe.json +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/results/README.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/search_evidence_audit.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/source_view_transfer.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study_clients.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study_events.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/study_tasks.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/token_overhead.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/understanding_scoring.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/understanding_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/warm_cache.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/evals/workflows.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/GUIDELINES.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/errors/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/tricks/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/tricks/recursive_context.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/types/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/types/events.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_internal/types/severity.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/_shared.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/analysis_coverage.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/access.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/app.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/api_keys.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/context.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/jwt.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/oauth.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/auth/passwords.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/deps.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/knowledge_bridge.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/mcp_transport.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/middleware.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/models.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/db_provider.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/local_provider.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/providers/remote_provider.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/repository_source.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/activity.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/adr.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/analysis.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/api_keys.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/auth.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/branches.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/embeddings.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/files.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/files_v2.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/gc.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/git_v2.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/graph.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/graph_viz.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/health.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/history.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/jobs.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/learning.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/lsp.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/notify.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/operations.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/orgs.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/preferences.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/presence.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/projects.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/repos.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/search.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/snapshots.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/webhooks.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/routes/websocket.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/static/graph.html +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/api/utils.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/hashing.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/provenance.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/audit.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/bug_finder.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/bundle.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/catalog.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/change_review.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/cli.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/community.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/jev.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/llm.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/redact.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/confidence/settings.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/config.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/crypto.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/base.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/engine.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/db/models.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/entrypoint.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/focused_evidence.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/gateway.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/credentials.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/manager.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/models.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/git/storage.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/graph_query_parser.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/helpers.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/debouncer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/delta_indexer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/full_indexer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/incremental.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/parser.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/indexing/summarizer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/installer.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/knowledge.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/local_knowledge.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/alembic.ini +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/env.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/script.py.mako +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/onboarding.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/output.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/presence.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/probe.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/project_dir.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/pubsub.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/query_ranking.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/readiness.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/redis.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/reference_pages.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/remote.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/repo_ranker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/request_context.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/ci.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/combinators.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/enricher.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/evolution.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/executor.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/filters/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/filters/pipeline.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/formatter.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/hygiene.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/importers/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/importers/semgrep.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/loader.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/marketplace.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/metavar.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/model.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/plugins/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/profiling.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/registry.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/sarif.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/synthesis.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/rules/testing.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/server.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/sharing.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/branch_overlay.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/content_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/dependency_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/diff_engine.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/embedding_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/provenance_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/security_scanner_db.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/storage/symbol_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/structural_evidence.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/symbol_inspection.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/telemetry.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/test_ranking.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/fixtures.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/helpers.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/testing/mocks.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/adr_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/analysis_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/composite_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/dead_code_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/distill_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/frecency_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/history_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/learning_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/lsp_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/maintenance_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/navigation_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/overlay_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/pin_store.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/pin_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/query_history_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/readiness_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/rule_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/search_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/tools/snapshot_tools.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/__init__.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/job_utils.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/jobs.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/run.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/src/attocode_intel/workers/settings.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_codex_repair_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_cold_discovery.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_compact_inspection.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_daily_workflows.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_doctor.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_edit_restart.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_external_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_focused_inspection.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_lean_profile.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_local_reranker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_localize_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_navigation_evidence.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_onboarding_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_pilot.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_product.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_quality_evaluation.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_query_ranking.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_ranking_intent.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_remote.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_repair_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_search_evidence_audit.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_structural_evidence.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_study.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_systemone_ranker.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_token_overhead.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_understanding_evaluation.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_walk_order.py +0 -0
- {attocode_code_intel-0.1.5 → attocode_code_intel-0.1.6}/tests/test_warm_cache.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: attocode-code-intel
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: Local code search and navigation for coding agents and people
|
|
5
5
|
Project-URL: Homepage, https://github.com/eren23/attocode
|
|
6
6
|
Project-URL: Repository, https://github.com/eren23/attocode
|
|
@@ -189,8 +189,8 @@ also found no demonstrated benefit; its reviewed decision is to stop expansion.
|
|
|
189
189
|
|
|
190
190
|
- **First search.** The first tool call starts the index build. A search waits up to 15 seconds for the index. On a large repository, a search can report that the index is warming. Then search again. An empty result during warm-up does not prove that the code is absent.
|
|
191
191
|
- **Index location.** The index is in `.attocode/` in your project. When the server makes that folder, it adds a `.gitignore`, so the index stays out of commits.
|
|
192
|
-
- **What the index reads.** The server reads at most 50,000 files and skips files over 1 MB. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files.
|
|
193
|
-
- **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig.
|
|
192
|
+
- **What the index reads.** The server reads at most 50,000 files and skips files over 1 MB. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
|
|
193
|
+
- **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig. Optional grammars are loaded only when already installed or cached; installing the `tree-sitter-all` extra does not trigger grammar downloads during navigation. A slow grammar falls back after a 100 ms parse budget. Static imports and references are partial evidence, not compiler/type resolution.
|
|
194
194
|
- **Remove the setup.** Run `attocode-code-intel init --remove`. It restores an entry that existed before `init`.
|
|
195
195
|
- **Server does not answer.** Run `attocode-code-intel doctor`. If a client shows "not configured", run `init` for it. After a change, restart the agent. In Claude Code, `/mcp` shows the server state.
|
|
196
196
|
- **HTTP server.** `attocode-code-intel --transport http` needs the `http` extra. It serves only this computer unless you set `ATTOCODE_API_KEY`.
|
|
@@ -77,8 +77,8 @@ also found no demonstrated benefit; its reviewed decision is to stop expansion.
|
|
|
77
77
|
|
|
78
78
|
- **First search.** The first tool call starts the index build. A search waits up to 15 seconds for the index. On a large repository, a search can report that the index is warming. Then search again. An empty result during warm-up does not prove that the code is absent.
|
|
79
79
|
- **Index location.** The index is in `.attocode/` in your project. When the server makes that folder, it adds a `.gitignore`, so the index stays out of commits.
|
|
80
|
-
- **What the index reads.** The server reads at most 50,000 files and skips files over 1 MB. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files.
|
|
81
|
-
- **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig.
|
|
80
|
+
- **What the index reads.** The server reads at most 50,000 files and skips files over 1 MB. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
|
|
81
|
+
- **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig. Optional grammars are loaded only when already installed or cached; installing the `tree-sitter-all` extra does not trigger grammar downloads during navigation. A slow grammar falls back after a 100 ms parse budget. Static imports and references are partial evidence, not compiler/type resolution.
|
|
82
82
|
- **Remove the setup.** Run `attocode-code-intel init --remove`. It restores an entry that existed before `init`.
|
|
83
83
|
- **Server does not answer.** Run `attocode-code-intel doctor`. If a client shows "not configured", run `init` for it. After a change, restart the agent. In Claude Code, `/mcp` shows the server state.
|
|
84
84
|
- **HTTP server.** `attocode-code-intel --transport http` needs the `http` extra. It serves only this computer unless you set `ATTOCODE_API_KEY`.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Generated Go cold+restart comparison with exact AST/index parity and cleanup."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import ast
|
|
5
|
+
import hashlib
|
|
6
|
+
import json
|
|
7
|
+
import platform
|
|
8
|
+
import subprocess
|
|
9
|
+
import tempfile
|
|
10
|
+
import time
|
|
11
|
+
from dataclasses import asdict
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from unittest.mock import patch
|
|
14
|
+
|
|
15
|
+
from attocode_intel._internal.integrations.context import ast_service, ast_snapshot, codebase_ast
|
|
16
|
+
from attocode_intel._internal.integrations.context.index_store import AST_SNAPSHOT_KEY
|
|
17
|
+
|
|
18
|
+
BASELINE = 'b3501b9d7ae016572d77ceae1289026d23719694'
|
|
19
|
+
SOURCE = 'packages/code-intel/src/attocode_intel/_internal/integrations/context/ast_service.py'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def run():
|
|
23
|
+
source = subprocess.check_output(['git', 'show', f'{BASELINE}:{SOURCE}'], timeout=10)
|
|
24
|
+
cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == 'ASTService')
|
|
25
|
+
methods, scopes = {}, []
|
|
26
|
+
for name in ('initialize_skeleton', '_save_snapshot', '_restore_snapshot'):
|
|
27
|
+
method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == name)
|
|
28
|
+
scope = dict(vars(ast_service))
|
|
29
|
+
exec(compile(ast.Module(body=[method], type_ignores=[]), '<frozen restart>', 'exec'), scope)
|
|
30
|
+
methods[name] = scope[name]
|
|
31
|
+
scopes.append(scope)
|
|
32
|
+
original = {name: getattr(ast_service.ASTService, name) for name in methods}
|
|
33
|
+
observations = []
|
|
34
|
+
with tempfile.TemporaryDirectory(prefix='attocode-restart-probe-') as tmp:
|
|
35
|
+
root = Path(tmp)
|
|
36
|
+
workloads = ['short_body', 'long_body']
|
|
37
|
+
source_sizes = {}
|
|
38
|
+
for number, (workload, mode) in enumerate((w, m) for w in workloads
|
|
39
|
+
for m in ['baseline', 'candidate', 'candidate', 'baseline']):
|
|
40
|
+
for scope in scopes:
|
|
41
|
+
scope['parse_file'] = ast_service.parse_file
|
|
42
|
+
project = root / str(number)
|
|
43
|
+
project.mkdir()
|
|
44
|
+
for i in range(160):
|
|
45
|
+
(project / f'file{i:04d}.go').write_text('package example\n' + ''.join(
|
|
46
|
+
f'// Helper{i}_{j} returns an adjusted value.\nfunc Helper{i}_{j}(value int) int {{\n'
|
|
47
|
+
+ ' if value < 0 { return 0 }\n' * (1 if workload == 'short_body' else 12)
|
|
48
|
+
+ ' return value + 1\n}\n' for j in range(32)))
|
|
49
|
+
source_sizes[workload] = sum(p.stat().st_size for p in project.iterdir())
|
|
50
|
+
assert source_sizes[workload] < 8 * 2**20
|
|
51
|
+
with patch.multiple(ast_service.ASTService, **(methods if mode == 'baseline' else original)):
|
|
52
|
+
first = ast_service.ASTService(str(project))
|
|
53
|
+
start = time.monotonic()
|
|
54
|
+
try:
|
|
55
|
+
first.initialize_skeleton(indexing_depth='eager')
|
|
56
|
+
cold = time.monotonic() - start
|
|
57
|
+
payload_bytes = len((first._store.get_meta(AST_SNAPSHOT_KEY) or '').encode())
|
|
58
|
+
finally:
|
|
59
|
+
first.stop_hydration()
|
|
60
|
+
first._store.close()
|
|
61
|
+
second = ast_service.ASTService(str(project))
|
|
62
|
+
try:
|
|
63
|
+
with (patch.object(ast_service, 'parse_file', wraps=ast_service.parse_file) as parse,
|
|
64
|
+
patch.object(codebase_ast, 'parse_file', parse)):
|
|
65
|
+
for scope in scopes:
|
|
66
|
+
scope['parse_file'] = parse
|
|
67
|
+
wall, cpu = time.monotonic(), time.thread_time()
|
|
68
|
+
state = second.initialize_skeleton()
|
|
69
|
+
restart, thread_cpu = time.monotonic()-wall, time.thread_time()-cpu
|
|
70
|
+
calls = parse.call_count
|
|
71
|
+
assert state.phase == 'ready' and state.parsed_files == 160
|
|
72
|
+
assert calls == (320 if mode == 'baseline' else 0)
|
|
73
|
+
summaries = {key: {**asdict(value), 'path': key} for key, value in second._ast_cache.items()}
|
|
74
|
+
evidence = {'asts': summaries, 'definitions': {
|
|
75
|
+
key: [asdict(v) for v in value] for key, value in second._index.definitions.items()},
|
|
76
|
+
'stats': second._store.stats(), 'dependencies': {
|
|
77
|
+
key: sorted(value) for key, value in second._index.file_dependencies.items()}}
|
|
78
|
+
digest = hashlib.sha256(json.dumps(evidence, sort_keys=True).encode()).hexdigest()
|
|
79
|
+
observations.append({'mode': mode, 'workload': workload, 'cold_seconds': cold, 'restart_seconds': restart,
|
|
80
|
+
'cold_plus_restart_seconds': cold+restart, 'restart_thread_cpu_seconds': thread_cpu,
|
|
81
|
+
'restart_parse_calls': calls, 'cache_payload_bytes': payload_bytes,
|
|
82
|
+
'evidence_sha256': digest})
|
|
83
|
+
finally:
|
|
84
|
+
second.stop_hydration()
|
|
85
|
+
second._store.close()
|
|
86
|
+
for workload in workloads:
|
|
87
|
+
assert len({row['evidence_sha256'] for row in observations if row['workload'] == workload}) == 1
|
|
88
|
+
disk_bytes = sum(p.stat().st_size for p in root.rglob('*') if p.is_file())
|
|
89
|
+
assert disk_bytes < 100 * 2**20
|
|
90
|
+
return {'scope': 'Generated 160-file/5120-function Go cold+restart; no Cockroach or cloud speed claim',
|
|
91
|
+
'baseline_commit': BASELINE, 'baseline_source_sha256': hashlib.sha256(source).hexdigest(),
|
|
92
|
+
'candidate_source_sha256': hashlib.sha256(Path(ast_service.__file__).read_bytes()).hexdigest(),
|
|
93
|
+
'cache_source_sha256': hashlib.sha256(Path(ast_snapshot.__file__).read_bytes()).hexdigest(),
|
|
94
|
+
'probe_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
|
|
95
|
+
'python': platform.python_version(), 'platform': platform.platform(),
|
|
96
|
+
'source_bytes': source_sizes, 'final_owned_disk_bytes': disk_bytes,
|
|
97
|
+
'observations': observations, 'cleanup_verified': not root.exists()}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
if __name__ == '__main__':
|
|
101
|
+
print(json.dumps(run(), indent=2))
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Bounded generated body-work probe: no downloads, models or cloud resources.
|
|
2
|
+
|
|
3
|
+
This isolates document generation, using empty known spans (no AST parsing), not
|
|
4
|
+
an end-to-end repository benchmark. Compare identical terms/windows by digest.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
import ast
|
|
10
|
+
import hashlib
|
|
11
|
+
import inspect
|
|
12
|
+
import json
|
|
13
|
+
import platform
|
|
14
|
+
import subprocess
|
|
15
|
+
import tempfile
|
|
16
|
+
import time
|
|
17
|
+
from contextlib import nullcontext
|
|
18
|
+
from functools import partial
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from types import SimpleNamespace
|
|
21
|
+
from unittest.mock import patch
|
|
22
|
+
|
|
23
|
+
from attocode_intel._internal.integrations.context import index_probe as probe
|
|
24
|
+
from attocode_intel._internal.integrations.context import semantic_search as search
|
|
25
|
+
|
|
26
|
+
BASELINE = "3d7c41ca628e8dfd2f62cf7eff9c4ae3aadbbdc2"
|
|
27
|
+
SOURCE = "packages/code-intel/src/attocode_intel/_internal/integrations/context/semantic_search.py"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def baseline_body():
|
|
31
|
+
source = subprocess.check_output(["git", "show", f"{BASELINE}:{SOURCE}"], timeout=10)
|
|
32
|
+
cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == "SemanticSearchManager")
|
|
33
|
+
method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == "_body_document")
|
|
34
|
+
method.decorator_list = []
|
|
35
|
+
scope = dict(vars(search))
|
|
36
|
+
exec(compile(ast.Module(body=[method], type_ignores=[]), "<frozen body>", "exec"), scope)
|
|
37
|
+
return scope[method.name], hashlib.sha256(source).hexdigest()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def fixture(root, unique=False):
|
|
41
|
+
paths = []
|
|
42
|
+
for i in range(8):
|
|
43
|
+
path = root / f'generated{i}.go'
|
|
44
|
+
path.write_text('package example\n' + ''.join(
|
|
45
|
+
f'// block {n if unique else n // 32}\nvalue_{n if unique else n % 64} = otherHTTPValue + processRow(value_{n if unique else n % 64})\n'
|
|
46
|
+
for n in range(2048)
|
|
47
|
+
))
|
|
48
|
+
paths.append(path)
|
|
49
|
+
return paths
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def run():
|
|
53
|
+
observations = []
|
|
54
|
+
legacy, baseline_hash = baseline_body()
|
|
55
|
+
source_bytes = {}
|
|
56
|
+
with tempfile.TemporaryDirectory(prefix='attocode-body-cost-') as tmp:
|
|
57
|
+
for workload in ('repeated', 'unique'):
|
|
58
|
+
root = Path(tmp) / workload
|
|
59
|
+
root.mkdir()
|
|
60
|
+
paths = fixture(root, unique=workload == 'unique')
|
|
61
|
+
source_bytes[workload] = sum(p.stat().st_size for p in paths)
|
|
62
|
+
assert source_bytes[workload] < 2 * 2**20
|
|
63
|
+
modes = ['baseline_off', 'off', 'all_calls', 'default']
|
|
64
|
+
for rotation in range(4):
|
|
65
|
+
for mode in modes[rotation:] + modes[:rotation]:
|
|
66
|
+
collector = None if mode in ('baseline_off', 'off') else probe.IndexProbe()
|
|
67
|
+
wrapping = (patch.object(search, 'instrument', lambda phase, fn:
|
|
68
|
+
partial(probe.measured_call, phase, fn))
|
|
69
|
+
if mode == 'all_calls' else nullcontext())
|
|
70
|
+
method = legacy if mode == 'baseline_off' else search.SemanticSearchManager._body_document
|
|
71
|
+
outputs = []
|
|
72
|
+
with wrapping, probe.activate(collector):
|
|
73
|
+
wall, cpu = time.monotonic(), time.thread_time()
|
|
74
|
+
for p in paths:
|
|
75
|
+
outputs.append(method(
|
|
76
|
+
p.name, str(p), SimpleNamespace(take=lambda *_: ([], [])),
|
|
77
|
+
include_file_terms=True,
|
|
78
|
+
))
|
|
79
|
+
elapsed, used = time.monotonic()-wall, time.thread_time()-cpu
|
|
80
|
+
digest = hashlib.sha256(json.dumps(outputs, ensure_ascii=False).encode()).hexdigest()
|
|
81
|
+
observations.append({'workload': workload, 'mode': mode, 'rotation': rotation,
|
|
82
|
+
'wall_seconds': elapsed, 'thread_cpu_seconds': used,
|
|
83
|
+
'output_sha256': digest,
|
|
84
|
+
'windows': sum(len(o[0]) for o in outputs),
|
|
85
|
+
'profile': collector.snapshot() if collector else None})
|
|
86
|
+
assert len({o['output_sha256'] for o in observations if o['workload'] == workload}) == 1
|
|
87
|
+
return {'scope': 'Generated document generation, empty known spans; no parsing, SQL or cold-start claim',
|
|
88
|
+
'baseline_commit': BASELINE, 'baseline_source_sha256': baseline_hash,
|
|
89
|
+
'candidate_source_sha256': hashlib.sha256(Path(inspect.getfile(search)).read_bytes()).hexdigest(),
|
|
90
|
+
'profiler_sha256': hashlib.sha256(Path(inspect.getfile(probe)).read_bytes()).hexdigest(),
|
|
91
|
+
'probe_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
|
|
92
|
+
'python': platform.python_version(), 'platform': platform.platform(),
|
|
93
|
+
'source_bytes': source_bytes, 'observations': observations,
|
|
94
|
+
'cleanup_verified': not Path(tmp).exists()}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
if __name__ == '__main__':
|
|
98
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
99
|
+
parser.add_argument('--output', type=Path, required=True)
|
|
100
|
+
args = parser.parse_args()
|
|
101
|
+
args.output.write_text(json.dumps(run(), indent=2)+'\n')
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Bounded two-consumer discovery comparison, not a cold-start performance gate."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import ast
|
|
5
|
+
import hashlib
|
|
6
|
+
import inspect
|
|
7
|
+
import json
|
|
8
|
+
import platform
|
|
9
|
+
import subprocess
|
|
10
|
+
import tempfile
|
|
11
|
+
import time
|
|
12
|
+
from dataclasses import asdict
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
from attocode_intel._internal.integrations.context import codebase_context as context
|
|
16
|
+
from attocode_intel._internal.integrations.context import discovery_snapshot
|
|
17
|
+
|
|
18
|
+
BASELINE = '3d7c41ca628e8dfd2f62cf7eff9c4ae3aadbbdc2'
|
|
19
|
+
SOURCE = 'packages/code-intel/src/attocode_intel/_internal/integrations/context/codebase_context.py'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def run():
|
|
23
|
+
source = subprocess.check_output(['git', 'show', f'{BASELINE}:{SOURCE}'], timeout=10)
|
|
24
|
+
cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == 'CodebaseContextManager')
|
|
25
|
+
method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == 'discover_files')
|
|
26
|
+
scope = dict(vars(context))
|
|
27
|
+
exec(compile(ast.Module(body=[method], type_ignores=[]), '<frozen discovery>', 'exec'), scope)
|
|
28
|
+
legacy = scope['discover_files']
|
|
29
|
+
observations = []
|
|
30
|
+
with tempfile.TemporaryDirectory(prefix='attocode-discovery-cost-') as tmp:
|
|
31
|
+
root = Path(tmp)
|
|
32
|
+
for i in range(640):
|
|
33
|
+
(root / f'f{i}.py').write_text(f'def helper_{i}():\n return "meaningfulValue"\n' * 4)
|
|
34
|
+
source_bytes = sum(p.stat().st_size for p in root.iterdir())
|
|
35
|
+
assert source_bytes < 2**20
|
|
36
|
+
for order in [('baseline', 'reuse'), ('reuse', 'baseline'), ('baseline', 'reuse')]:
|
|
37
|
+
for mode in order:
|
|
38
|
+
donor = context.CodebaseContextManager(tmp, max_files=100000)
|
|
39
|
+
consumer = context.CodebaseContextManager(tmp)
|
|
40
|
+
wall, cpu = time.monotonic(), time.thread_time()
|
|
41
|
+
(legacy(donor) if mode == 'baseline' else donor.discover_files())
|
|
42
|
+
donor_seconds = time.monotonic() - wall
|
|
43
|
+
if mode == 'baseline':
|
|
44
|
+
legacy(consumer)
|
|
45
|
+
else:
|
|
46
|
+
assert consumer.reuse_discovery(donor._discovery_snapshot)
|
|
47
|
+
seconds, used = time.monotonic()-wall, time.thread_time()-cpu
|
|
48
|
+
files = [{k:v for k,v in asdict(f).items() if k != 'path'} for f in consumer._files]
|
|
49
|
+
observations.append({'mode':mode,'wall_seconds':seconds,'thread_cpu_seconds':used,
|
|
50
|
+
'donor_seconds':donor_seconds,'consumer_seconds':seconds-donor_seconds,
|
|
51
|
+
'files':len(files),'inventory_sha256':hashlib.sha256(json.dumps(files).encode()).hexdigest()})
|
|
52
|
+
assert len({o['inventory_sha256'] for o in observations}) == 1
|
|
53
|
+
return {'scope':'Generated 640-file two-consumer inventory work; no cloud or cold-gate claim',
|
|
54
|
+
'baseline_commit':BASELINE,'baseline_source_sha256':hashlib.sha256(source).hexdigest(),
|
|
55
|
+
'candidate_source_sha256':hashlib.sha256(Path(inspect.getfile(context)).read_bytes()).hexdigest(),
|
|
56
|
+
'snapshot_source_sha256':hashlib.sha256(Path(inspect.getfile(discovery_snapshot)).read_bytes()).hexdigest(),
|
|
57
|
+
'probe_sha256':hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
|
|
58
|
+
'python':platform.python_version(),'platform':platform.platform(),
|
|
59
|
+
'source_bytes':source_bytes,'observations':observations,'cleanup_verified':not root.exists()}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
if __name__ == '__main__':
|
|
63
|
+
print(json.dumps(run(),indent=2))
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"""Bounded lexical SQL diagnostic; synthetic contention, no cloud or model calls.
|
|
2
|
+
|
|
3
|
+
Baseline must already exist locally. Disposable databases are removed; each
|
|
4
|
+
competitor stops after 20 seconds. One observation per case is not a timing gate.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import ast
|
|
8
|
+
import hashlib
|
|
9
|
+
import inspect
|
|
10
|
+
import json
|
|
11
|
+
import platform
|
|
12
|
+
import subprocess
|
|
13
|
+
import tempfile
|
|
14
|
+
import threading
|
|
15
|
+
import time
|
|
16
|
+
from functools import partial
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from types import SimpleNamespace
|
|
19
|
+
|
|
20
|
+
from attocode_intel._internal.integrations.context import semantic_search as search
|
|
21
|
+
|
|
22
|
+
BASELINE = "4f33254130fb2817c44cfa7a57e3e213822b9560"
|
|
23
|
+
SOURCE = "packages/code-intel/src/attocode_intel/_internal/integrations/context/semantic_search.py"
|
|
24
|
+
source = subprocess.check_output(["git", "show", f"{BASELINE}:{SOURCE}"], timeout=10)
|
|
25
|
+
cls = next(
|
|
26
|
+
n
|
|
27
|
+
for n in ast.parse(source).body
|
|
28
|
+
if isinstance(n, ast.ClassDef) and n.name == "SemanticSearchManager"
|
|
29
|
+
)
|
|
30
|
+
scope = dict(vars(search))
|
|
31
|
+
for name in ("_save_kw_cache", "_sync_body_index"):
|
|
32
|
+
method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == name)
|
|
33
|
+
exec(
|
|
34
|
+
compile(ast.Module(body=[method], type_ignores=[]), "<frozen baseline method>", "exec"),
|
|
35
|
+
scope,
|
|
36
|
+
)
|
|
37
|
+
legacy_cache, legacy_body = scope["_save_kw_cache"], scope["_sync_body_index"]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def cpu(stop):
|
|
41
|
+
end = time.monotonic() + 20
|
|
42
|
+
while not stop.is_set() and time.monotonic() < end:
|
|
43
|
+
sum(i * i for i in range(10000))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def measure(fn, contended):
|
|
47
|
+
stop = threading.Event()
|
|
48
|
+
worker = threading.Thread(target=cpu, args=(stop,))
|
|
49
|
+
if contended:
|
|
50
|
+
worker.start()
|
|
51
|
+
started = time.monotonic()
|
|
52
|
+
try:
|
|
53
|
+
fn()
|
|
54
|
+
elapsed = time.monotonic() - started
|
|
55
|
+
full = worker.is_alive() if contended else None
|
|
56
|
+
finally:
|
|
57
|
+
stop.set()
|
|
58
|
+
if contended:
|
|
59
|
+
worker.join()
|
|
60
|
+
return elapsed, full
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
results = []
|
|
64
|
+
with tempfile.TemporaryDirectory(prefix="quality-lexical-sql-") as scratch:
|
|
65
|
+
for task in ["keyword", "body_delete"]:
|
|
66
|
+
for contended in [False, True]:
|
|
67
|
+
for arm in ["legacy", "batched"]:
|
|
68
|
+
root = Path(scratch) / f"{task}-{contended}-{arm}"
|
|
69
|
+
root.mkdir()
|
|
70
|
+
mgr = search.SemanticSearchManager(str(root))
|
|
71
|
+
try:
|
|
72
|
+
if task == "keyword":
|
|
73
|
+
documents = [
|
|
74
|
+
search._KeywordDoc(
|
|
75
|
+
f"func:{i}",
|
|
76
|
+
f"f{i % 256}.py",
|
|
77
|
+
"function",
|
|
78
|
+
f"helper{i}",
|
|
79
|
+
"preview",
|
|
80
|
+
False,
|
|
81
|
+
False,
|
|
82
|
+
{"needle": 2},
|
|
83
|
+
2,
|
|
84
|
+
)
|
|
85
|
+
for i in range(2048)
|
|
86
|
+
]
|
|
87
|
+
mtimes = {f"f{i}.py": 1.0 for i in range(256)}
|
|
88
|
+
method = (
|
|
89
|
+
legacy_cache
|
|
90
|
+
if arm == "legacy"
|
|
91
|
+
else search.SemanticSearchManager._save_kw_cache
|
|
92
|
+
)
|
|
93
|
+
elapsed, full = measure(partial(method, mgr, documents, mtimes), contended)
|
|
94
|
+
conn = mgr._open_kw_cache_db()
|
|
95
|
+
rows = [
|
|
96
|
+
conn.execute(f"SELECT rowid,* FROM {t} ORDER BY rowid").fetchall()
|
|
97
|
+
for t in ["kw_files", "kw_docs"]
|
|
98
|
+
]
|
|
99
|
+
else:
|
|
100
|
+
paths = [root / f"f{i:03}.py" for i in range(133)]
|
|
101
|
+
for p in paths:
|
|
102
|
+
p.write_text("def helper(): return 1\n")
|
|
103
|
+
|
|
104
|
+
def ctx(ps):
|
|
105
|
+
return SimpleNamespace(
|
|
106
|
+
_ensure_fresh=lambda: None,
|
|
107
|
+
_files=[
|
|
108
|
+
SimpleNamespace(path=str(p), relative_path=p.name) for p in ps
|
|
109
|
+
],
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
mgr._sync_body_index(ctx(paths))
|
|
113
|
+
assert mgr._body_index_built
|
|
114
|
+
mgr._body_index_built = False
|
|
115
|
+
method = (
|
|
116
|
+
legacy_body
|
|
117
|
+
if arm == "legacy"
|
|
118
|
+
else search.SemanticSearchManager._sync_body_index
|
|
119
|
+
)
|
|
120
|
+
elapsed, full = measure(partial(method, mgr, ctx(paths[-1:])), contended)
|
|
121
|
+
assert mgr._body_index_built
|
|
122
|
+
conn = mgr._open_body_db()
|
|
123
|
+
rows = [
|
|
124
|
+
conn.execute(f"SELECT rowid,* FROM {t} ORDER BY rowid").fetchall()
|
|
125
|
+
for t in ["body_fts", "body_file_fts"]
|
|
126
|
+
]
|
|
127
|
+
rows.append(
|
|
128
|
+
conn.execute(
|
|
129
|
+
"SELECT file_path,size FROM body_files ORDER BY file_path"
|
|
130
|
+
).fetchall()
|
|
131
|
+
)
|
|
132
|
+
conn.close()
|
|
133
|
+
results.append(
|
|
134
|
+
dict(
|
|
135
|
+
task=task,
|
|
136
|
+
arm=arm,
|
|
137
|
+
cpu_thread=contended,
|
|
138
|
+
seconds=elapsed,
|
|
139
|
+
competitor_active_at_end=full,
|
|
140
|
+
row_counts=[len(r) for r in rows],
|
|
141
|
+
row_sha256=hashlib.sha256(json.dumps(rows).encode()).hexdigest(),
|
|
142
|
+
)
|
|
143
|
+
)
|
|
144
|
+
finally:
|
|
145
|
+
mgr.close()
|
|
146
|
+
for task in ["keyword", "body_delete"]:
|
|
147
|
+
assert len({r["row_sha256"] for r in results if r["task"] == task}) == 1
|
|
148
|
+
print(
|
|
149
|
+
json.dumps(
|
|
150
|
+
dict(
|
|
151
|
+
baseline_commit=BASELINE,
|
|
152
|
+
baseline_source_sha256=hashlib.sha256(source).hexdigest(),
|
|
153
|
+
candidate_source_sha256=hashlib.sha256(
|
|
154
|
+
Path(inspect.getfile(search)).read_bytes()
|
|
155
|
+
).hexdigest(),
|
|
156
|
+
probe_sha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
|
|
157
|
+
python=platform.python_version(),
|
|
158
|
+
platform=platform.platform(),
|
|
159
|
+
fixture={
|
|
160
|
+
"keyword_docs": 2048,
|
|
161
|
+
"keyword_files": 256,
|
|
162
|
+
"body_files": 133,
|
|
163
|
+
"body_files_deleted": 132,
|
|
164
|
+
},
|
|
165
|
+
scope="Single observations, synthetic CPU contention; not cloud latency or release evidence",
|
|
166
|
+
results=results,
|
|
167
|
+
cleanup_verified=True,
|
|
168
|
+
),
|
|
169
|
+
indent=2,
|
|
170
|
+
)
|
|
171
|
+
)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Generated comparison of discovery parsing before/after cached structural restart."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import ast
|
|
5
|
+
import hashlib
|
|
6
|
+
import json
|
|
7
|
+
import platform
|
|
8
|
+
import subprocess
|
|
9
|
+
import tempfile
|
|
10
|
+
import time
|
|
11
|
+
from dataclasses import asdict
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from unittest.mock import patch
|
|
14
|
+
|
|
15
|
+
from attocode_intel._internal.integrations.context import ast_service, ast_snapshot, codebase_ast
|
|
16
|
+
from attocode_intel._internal.integrations.context.index_store import AST_SNAPSHOT_KEY
|
|
17
|
+
|
|
18
|
+
BASELINE = 'e97f986532a3612542326ae21c0360e0b83fc2bc'
|
|
19
|
+
SOURCE = 'packages/code-intel/src/attocode_intel/_internal/integrations/context/ast_service.py'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def run():
|
|
23
|
+
source = subprocess.check_output(['git', 'show', f'{BASELINE}:{SOURCE}'], timeout=10)
|
|
24
|
+
cls = next(n for n in ast.parse(source).body if isinstance(n, ast.ClassDef) and n.name == 'ASTService')
|
|
25
|
+
methods, scopes = {}, []
|
|
26
|
+
for name in ('initialize_skeleton', '_save_snapshot', '_restore_snapshot'):
|
|
27
|
+
method = next(n for n in cls.body if isinstance(n, ast.FunctionDef) and n.name == name)
|
|
28
|
+
scope = dict(vars(ast_service))
|
|
29
|
+
exec(compile(ast.Module(body=[method], type_ignores=[]), '<frozen restart>', 'exec'), scope)
|
|
30
|
+
methods[name] = scope[name]
|
|
31
|
+
scopes.append(scope)
|
|
32
|
+
original = {name: getattr(ast_service.ASTService, name) for name in methods}
|
|
33
|
+
observations = []
|
|
34
|
+
with tempfile.TemporaryDirectory(prefix='attocode-restart-probe-') as tmp:
|
|
35
|
+
root = Path(tmp)
|
|
36
|
+
workloads = ['short_body', 'long_body']
|
|
37
|
+
source_sizes = {}
|
|
38
|
+
for number, (workload, mode) in enumerate((w, m) for w in workloads
|
|
39
|
+
for m in ['baseline', 'candidate', 'candidate', 'baseline']):
|
|
40
|
+
for scope in scopes:
|
|
41
|
+
scope['parse_file'] = ast_service.parse_file
|
|
42
|
+
project = root / str(number)
|
|
43
|
+
project.mkdir()
|
|
44
|
+
for i in range(160):
|
|
45
|
+
(project / f'file{i:04d}.go').write_text('package example\n' + ''.join(
|
|
46
|
+
f'// Helper{i}_{j} returns an adjusted value.\nfunc Helper{i}_{j}(value int) int {{\n'
|
|
47
|
+
+ ' if value < 0 { return 0 }\n' * (1 if workload == 'short_body' else 12)
|
|
48
|
+
+ ' return value + 1\n}\n' for j in range(32)))
|
|
49
|
+
source_sizes[workload] = sum(p.stat().st_size for p in project.iterdir())
|
|
50
|
+
assert source_sizes[workload] < 8 * 2**20
|
|
51
|
+
with patch.multiple(ast_service.ASTService, **(methods if mode == 'baseline' else original)):
|
|
52
|
+
first = ast_service.ASTService(str(project))
|
|
53
|
+
start = time.monotonic()
|
|
54
|
+
try:
|
|
55
|
+
first.initialize_skeleton(indexing_depth='eager')
|
|
56
|
+
cold = time.monotonic() - start
|
|
57
|
+
payload_bytes = len((first._store.get_meta(AST_SNAPSHOT_KEY) or '').encode())
|
|
58
|
+
finally:
|
|
59
|
+
first.stop_hydration()
|
|
60
|
+
first._store.close()
|
|
61
|
+
second = ast_service.ASTService(str(project))
|
|
62
|
+
try:
|
|
63
|
+
with (patch.object(ast_service, 'parse_file', wraps=ast_service.parse_file) as parse,
|
|
64
|
+
patch.object(codebase_ast, 'parse_file', parse)):
|
|
65
|
+
for scope in scopes:
|
|
66
|
+
scope['parse_file'] = parse
|
|
67
|
+
wall, cpu = time.monotonic(), time.thread_time()
|
|
68
|
+
state = second.initialize_skeleton()
|
|
69
|
+
restart, thread_cpu = time.monotonic()-wall, time.thread_time()-cpu
|
|
70
|
+
calls = parse.call_count
|
|
71
|
+
assert state.phase == 'ready' and state.parsed_files == 160
|
|
72
|
+
assert calls == (160 if mode == 'baseline' else 0)
|
|
73
|
+
summaries = {key: {**asdict(value), 'path': key} for key, value in second._ast_cache.items()}
|
|
74
|
+
evidence = {'asts': summaries, 'definitions': {
|
|
75
|
+
key: [asdict(v) for v in value] for key, value in second._index.definitions.items()},
|
|
76
|
+
'stats': second._store.stats(), 'dependencies': {
|
|
77
|
+
key: sorted(value) for key, value in second._index.file_dependencies.items()}}
|
|
78
|
+
digest = hashlib.sha256(json.dumps(evidence, sort_keys=True).encode()).hexdigest()
|
|
79
|
+
observations.append({'mode': mode, 'workload': workload, 'cold_seconds': cold, 'restart_seconds': restart,
|
|
80
|
+
'cold_plus_restart_seconds': cold+restart, 'restart_thread_cpu_seconds': thread_cpu,
|
|
81
|
+
'restart_parse_calls': calls, 'cache_payload_bytes': payload_bytes,
|
|
82
|
+
'evidence_sha256': digest})
|
|
83
|
+
finally:
|
|
84
|
+
second.stop_hydration()
|
|
85
|
+
second._store.close()
|
|
86
|
+
for workload in workloads:
|
|
87
|
+
assert len({row['evidence_sha256'] for row in observations if row['workload'] == workload}) == 1
|
|
88
|
+
disk_bytes = sum(p.stat().st_size for p in root.rglob('*') if p.is_file())
|
|
89
|
+
assert disk_bytes < 100 * 2**20
|
|
90
|
+
return {'scope': 'Generated 160-file/5120-function Go cold+restart; both parse entry points counted; no Cockroach or cloud speed claim',
|
|
91
|
+
'baseline_commit': BASELINE, 'baseline_source_sha256': hashlib.sha256(source).hexdigest(),
|
|
92
|
+
'candidate_source_sha256': hashlib.sha256(Path(ast_service.__file__).read_bytes()).hexdigest(),
|
|
93
|
+
'cache_source_sha256': hashlib.sha256(Path(ast_snapshot.__file__).read_bytes()).hexdigest(),
|
|
94
|
+
'probe_sha256': hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),
|
|
95
|
+
'python': platform.python_version(), 'platform': platform.platform(),
|
|
96
|
+
'source_bytes': source_sizes, 'final_owned_disk_bytes': disk_bytes,
|
|
97
|
+
'observations': observations, 'cleanup_verified': not root.exists()}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
if __name__ == '__main__':
|
|
101
|
+
print(json.dumps(run(), indent=2))
|