attocode-code-intel 0.1.20__tar.gz → 0.1.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- attocode_code_intel-0.1.22/.gitignore +59 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/PKG-INFO +11 -2
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/README.md +10 -1
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/pyproject.toml +3 -3
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/__init__.py +1 -1
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ast_service.py +19 -1
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +118 -69
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/codebase_context.py +40 -57
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cross_references.py +2 -2
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/semantic_search.py +47 -12
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +2 -2
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ts_parser.py +26 -10
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/llm.py +47 -15
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/synthesis.py +5 -21
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/service.py +4 -0
- attocode_code_intel-0.1.22/tests/fixtures/sample_project/.attocode/.gitignore +2 -0
- attocode_code_intel-0.1.22/tests/fixtures/sample_project/main.py +34 -0
- attocode_code_intel-0.1.22/tests/fixtures/sample_project/models.py +25 -0
- attocode_code_intel-0.1.22/tests/fixtures/sample_project/utils.py +26 -0
- attocode_code_intel-0.1.22/tests/test_capacity_experiment.py +72 -0
- attocode_code_intel-0.1.22/tests/test_discovery_ceiling.py +120 -0
- attocode_code_intel-0.1.22/tests/test_fallback_lexical.py +117 -0
- attocode_code_intel-0.1.22/tests/test_ocaml_parser_routing.py +88 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_optional_language_depth.py +37 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_product.py +19 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_evidence.py +1 -1
- attocode_code_intel-0.1.22/tests/test_search_coverage.py +237 -0
- attocode_code_intel-0.1.22/tests/test_search_coverage_scale.py +92 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_synthesis.py +9 -15
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_mcp_bench.py +1 -1
- attocode_code_intel-0.1.22/tests/unit/integrations/utilities/__init__.py +0 -0
- attocode_code_intel-0.1.20/.gitignore +0 -88
- attocode_code_intel-0.1.20/evals/README.md +0 -377
- attocode_code_intel-0.1.20/evals/ast_restart_probe.py +0 -101
- attocode_code_intel-0.1.20/evals/body_cost_probe.py +0 -101
- attocode_code_intel-0.1.20/evals/broad_candidate_audit.yaml +0 -59
- attocode_code_intel-0.1.20/evals/broad_query_cases.yaml +0 -89
- attocode_code_intel-0.1.20/evals/broad_query_external_cases.yaml +0 -79
- attocode_code_intel-0.1.20/evals/broad_query_final_holdout.yaml +0 -78
- attocode_code_intel-0.1.20/evals/client_comparison.py +0 -151
- attocode_code_intel-0.1.20/evals/client_responses.py +0 -152
- attocode_code_intel-0.1.20/evals/codex_repair_study.py +0 -415
- attocode_code_intel-0.1.20/evals/daily.py +0 -77
- attocode_code_intel-0.1.20/evals/designs/2026-10-13-codex-repair-diagnostic.md +0 -49
- attocode_code_intel-0.1.20/evals/designs/2026-10-13-r7-task-completion-pilot.md +0 -253
- attocode_code_intel-0.1.20/evals/designs/2026-10-14-workflow-pilot.md +0 -63
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-body-file-trial.md +0 -34
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-body-file-validation.json +0 -427
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-expansion-ablation.md +0 -33
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-expansion-development.json +0 -192
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-expansion-validation.json +0 -180
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-fresh-navigation-queries.json +0 -90
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-headroom-retrieval-questions.json +0 -859
- attocode_code_intel-0.1.20/evals/designs/2026-10-15-headroom-retrieval.md +0 -17
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-cross-file-questions.json +0 -158
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-deep-page-questions.json +0 -160
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-kotlin-test-paths.json +0 -106
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-navigation-prefix-validation.json +0 -266
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-navigation-prefix.json +0 -310
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-candidate.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-development.json +0 -208
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-freeze.json +0 -48
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-negation-validation.json +0 -208
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/accepted.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/boundaries.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/combined.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/expansion.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/identity.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/manifest.json +0 -76
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/negation.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/owner_only.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-candidates/owners.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-confirmation-freeze.json +0 -7
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-confirmation.json +0 -206
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-development.json +0 -206
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-freeze.json +0 -348
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-correctness-validation.json +0 -206
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-usefulness-development.json +0 -285
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-usefulness-validation.json +0 -285
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-search-usefulness.json +0 -36
- attocode_code_intel-0.1.20/evals/designs/2026-10-16-test-intent.json +0 -210
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-change-focus-candidate.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-change-workflow-replays.json +0 -98
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-change-workflow-replays.md +0 -61
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-c2f.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-development.json +0 -409
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-freeze.json +0 -49
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-t.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-tcf.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-file-coverage-validation.json +0 -394
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-candidate.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-development.json +0 -328
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-freeze.json +0 -36
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-search-batch-validation.json +0 -342
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-candidate.json +0 -350
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-development.json +0 -1467
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-freeze.json +0 -43
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-t2.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-t3.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-17-test-source-slot-validation.json +0 -400
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-candidate.json +0 -244
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-development.json +0 -1844
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-freeze.json +0 -47
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-p.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-pf.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-paired-source-validation.json +0 -410
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-candidate.json +0 -422
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-development.json +0 -2220
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-freeze.json +0 -44
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q1.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q2.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q3.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-q5.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s1.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2-equivalence.json +0 -12
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2-freeze.json +0 -51
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2-validation.json +0 -536
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-s2.patch.gz +0 -0
- attocode_code_intel-0.1.20/evals/designs/2026-10-18-query-source-validation.json +0 -558
- attocode_code_intel-0.1.20/evals/designs/2026-10-19-cpu-fn-embed-cost.json +0 -33
- attocode_code_intel-0.1.20/evals/designs/2026-10-20-clause-balance-validation.json +0 -499
- attocode_code_intel-0.1.20/evals/designs/2026-10-20-search-repair-validation.json +0 -419
- attocode_code_intel-0.1.20/evals/designs/2026-10-20-test-support-development.json +0 -294
- attocode_code_intel-0.1.20/evals/designs/2026-10-20-test-support-freeze.json +0 -32
- attocode_code_intel-0.1.20/evals/designs/2026-10-23-preview-windows.json +0 -512
- attocode_code_intel-0.1.20/evals/designs/2026-10-23-restart-fingerprints.json +0 -78
- attocode_code_intel-0.1.20/evals/discovery_reuse_probe.py +0 -63
- attocode_code_intel-0.1.20/evals/external_benchmarks.py +0 -132
- attocode_code_intel-0.1.20/evals/external_study.py +0 -409
- attocode_code_intel-0.1.20/evals/graded_blind_pack.yaml +0 -755
- attocode_code_intel-0.1.20/evals/lexical_sql_probe.py +0 -171
- attocode_code_intel-0.1.20/evals/localize_study.py +0 -743
- attocode_code_intel-0.1.20/evals/locbench_title_pack.yaml +0 -300
- attocode_code_intel-0.1.20/evals/onboarding_study.py +0 -205
- attocode_code_intel-0.1.20/evals/pilot.py +0 -206
- attocode_code_intel-0.1.20/evals/quality_scoring.py +0 -286
- attocode_code_intel-0.1.20/evals/quality_tasks.py +0 -315
- attocode_code_intel-0.1.20/evals/release_gate.py +0 -144
- attocode_code_intel-0.1.20/evals/repair_grading.py +0 -142
- attocode_code_intel-0.1.20/evals/repair_study.py +0 -513
- attocode_code_intel-0.1.20/evals/repair_worker.py +0 -442
- attocode_code_intel-0.1.20/evals/responses.py +0 -87
- attocode_code_intel-0.1.20/evals/restart_discovery_probe.py +0 -101
- attocode_code_intel-0.1.20/evals/search_evidence_audit.py +0 -297
- attocode_code_intel-0.1.20/evals/source_view_transfer.yaml +0 -58
- attocode_code_intel-0.1.20/evals/structural_write_probe.py +0 -83
- attocode_code_intel-0.1.20/evals/study.py +0 -485
- attocode_code_intel-0.1.20/evals/study_clients.py +0 -167
- attocode_code_intel-0.1.20/evals/study_events.py +0 -257
- attocode_code_intel-0.1.20/evals/study_tasks.py +0 -173
- attocode_code_intel-0.1.20/evals/token_overhead.py +0 -84
- attocode_code_intel-0.1.20/evals/understanding_scoring.py +0 -120
- attocode_code_intel-0.1.20/evals/understanding_study.py +0 -387
- attocode_code_intel-0.1.20/evals/warm_cache.py +0 -496
- attocode_code_intel-0.1.20/evals/workflows.py +0 -143
- attocode_code_intel-0.1.20/src/attocode_intel/_internal/tricks/recursive_context.py +0 -357
- attocode_code_intel-0.1.20/src/attocode_intel/_internal/types/__init__.py +0 -1
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/LICENSE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/GUIDELINES.md +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/errors/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/index_probe.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/index_repair.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/index_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/language_registry.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/parse_diagnostics.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/lsp/client.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/utilities/ignore.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
- {attocode_code_intel-0.1.20/src/attocode_intel/_internal/tricks → attocode_code_intel-0.1.22/src/attocode_intel/_internal/types}/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/types/events.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_internal/types/severity.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/_shared.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/analysis_coverage.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/access.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/app.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/api_keys.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/context.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/jwt.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/oauth.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/auth/passwords.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/deps.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/knowledge_bridge.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/mcp_transport.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/middleware.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/models.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/db_provider.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/local_provider.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/providers/remote_provider.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/repository_source.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/activity.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/adr.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/analysis.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/api_keys.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/auth.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/branches.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/embeddings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/files.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/files_v2.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/gc.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/git_v2.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/graph.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/graph_viz.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/health.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/history.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/jobs.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/learning.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/lsp.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/notify.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/operations.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/orgs.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/preferences.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/presence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/projects.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/repos.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/search.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/snapshots.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/webhooks.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/routes/websocket.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/static/graph.html +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/api/utils.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/hashing.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/provenance.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/audit.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/bug_finder.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/bundle.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/catalog.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/change_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/change_investigation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/change_review.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/cli.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/community.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/jev.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/redact.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/confidence/settings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/config.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/crypto.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/base.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/engine.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/db/models.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/entrypoint.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/focused_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/freshness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/gateway.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/credentials.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/manager.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/models.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/git/storage.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/graph_query_parser.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/helpers.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/debouncer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/delta_indexer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/full_indexer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/incremental.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/parser.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/indexing/summarizer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/installer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/investigation_cli.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/knowledge.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/local_knowledge.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/alembic.ini +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/env.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/script.py.mako +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/onboarding.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/output.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/precision.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/presence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/probe.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/project_dir.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/pubsub.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/query_ranking.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/readiness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/redis.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/reference_pages.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/remote.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/repo_ranker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/request_context.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/ci.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/combinators.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/enricher.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/evolution.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/executor.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/filters/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/filters/pipeline.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/formatter.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/hygiene.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/importers/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/importers/semgrep.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/loader.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/marketplace.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/metavar.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/model.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/plugins/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/profiling.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/registry.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/sarif.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/rules/testing.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/search_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/server.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/sharing.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/branch_overlay.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/content_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/dependency_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/diff_engine.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/embedding_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/provenance_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/security_scanner_db.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/storage/symbol_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/structural_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/symbol_inspection.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/symbol_links.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/telemetry.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/test_ranking.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/fixtures.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/helpers.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/testing/mocks.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/adr_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/analysis_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/composite_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/dead_code_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/distill_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/frecency_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/history_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/learning_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/lsp_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/maintenance_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/navigation_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/overlay_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/pin_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/pin_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/query_history_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/readiness_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/rule_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/search_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/tools/snapshot_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/job_utils.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/jobs.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/run.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/src/attocode_intel/workers/settings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/.attocode/rules/team-preferences.yaml +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/go/bad_patterns.go +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/java/BadPatterns.java +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/python/bad_patterns.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/rust/bad_patterns.rs +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/fixtures/rule_violations/typescript/bad_patterns.ts +0 -0
- {attocode_code_intel-0.1.20/tests/integration → attocode_code_intel-0.1.22/tests/fixtures/sample_project}/__init__.py +0 -0
- {attocode_code_intel-0.1.20/tests/integration/code_intel → attocode_code_intel-0.1.22/tests/integration}/__init__.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit → attocode_code_intel-0.1.22/tests/integration/code_intel}/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/conftest.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_http_smoke.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_mcp_tools_audit.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_remote_mcp_http_integration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/code_intel/test_service_integration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/integration/test_rule_bench_floor_e2e.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_ast_snapshot.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_behavioral_negation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_change_focus.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_change_investigation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_chunk_identity.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_codex_repair_study.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_cold_discovery.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_cold_index_cost.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_compact_inspection.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_corpus_capture.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_daily_workflows.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_db_navigation_http.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_discovery_reuse.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_doctor.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_doctor_runtime.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_edit_restart.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_experiment_dispatch.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_experiment_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_experiment_readiness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_external_study.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_file_symbol_scope.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_fixture_source_alias.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_focused_inspection.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_image_budget.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_importance_publication.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_probe.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_processes.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_reuse.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_index_sequences.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_kotlin_test_paths.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_language_capabilities.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lean_profile.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lexical_sql_cost.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_local_reranker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_local_workflow_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_localize_study.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lsp_diagnostics.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lsp_document_lifecycle.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_lsp_stderr_lifecycle.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_mcp_search_evaluation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_mixed_workspace.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_module_ownership.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_native_capture.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_native_experiment.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_navigation_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_navigation_prefix_trial.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_onboarding_study.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_operation_contracts.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_optional_grammar_admission.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_parse_recovery.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_parser_thread_isolation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_pilot.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_precision_protocol.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_precision_recovery.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_admission.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_experiment.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_sources.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_preview_windows.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_cloud.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_evaluation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_lifecycle.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_quality_runner.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_query_ranking.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_query_requirements.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_ranking_intent.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_real_language_server.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_recovery_readiness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_release_verification.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_remote.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_repair_study.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_restart_experiment.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_ablation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_audit.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_body_trial.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_retrieval_cycle.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_budget_repair.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_evidence_audit.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_search_usefulness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_snippet_budget.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_source_exclusions.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_structural_evidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_structural_write_cost.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_study.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_symbol_order.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_systemone_ranker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_test_intent_trial.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_token_overhead.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_trigram_workspace.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_understanding_evaluation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_walk_order.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_warm_cache.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/test_workflow_sequences.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit/code_intel → attocode_code_intel-0.1.22/tests/unit}/__init__.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit/context → attocode_code_intel-0.1.22/tests/unit/code_intel}/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/conftest.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_advisory_lock.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_api.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_api_phase3a.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_api_v2.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_auth.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_branch_versioning.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_bug_finder.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_call_graph_tool.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_ci_runner.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_lifecycle.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_maintenance_local.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_ops.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_query_commands.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cli_remote.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_codex_rereview_polish.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_combinators.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_confidence.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_confidence_adoption.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_config.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_config_remote.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_cross_mode.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_db_security_scan.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_deps.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_diff_engine.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_edge_cases.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_frecency.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_fuzzy.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_index_store_migration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_kw_index_status.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_lsp_call_graph.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_lsp_enrichment.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_lsp_extended_models.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_marketplace.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_metavar.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_middleware.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_notify_enhanced.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_org_isolation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_pack_autoload.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_profiling.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_project_discovery.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_provenance_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_pubsub_streams.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_query_constraints.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_query_history.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_readiness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_reindex_embeddings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_remote_local_fallback.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_remote_provider.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_remote_reliability.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_repo_ranker.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_evolution.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_hygiene.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rule_violations.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rules_engine.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_rules_integration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_sarif.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_search_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_server_startup.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_service.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_service_mode.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_status_health.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_structural_executor.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_supply_chain_rules.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_testing_framework.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/test_webhook_encryption.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/conftest.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_adr_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_analysis_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_dead_code_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_distill_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_history_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_learning_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_lsp_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_maintenance_tools_phase2.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_navigation_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_phase2c_anchors_and_overlays.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_readiness_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_search_status_mismatch.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_search_tools.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/code_intel/tools/test_server_tools.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit/eval → attocode_code_intel-0.1.22/tests/unit/context}/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_action_hash.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_ast_service_adapter.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_blob_oid.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_cache_manifest.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_cas.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_embedding_rotation.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_pagerank_restoration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_provenance.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_retrieval_pin.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/context/test_vector_store_dim_safety.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit/integrations → attocode_code_intel-0.1.22/tests/unit/eval}/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/conftest.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_acc_at_k.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_broad_candidate_audit.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_calibration_demo.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_harness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_agents.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_ci.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_datasets.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_dense.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_function_bm25.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_function_dense.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_rerank.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_retrieve.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_run.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_matrix_stats.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_accuracy.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_config.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_corpus.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_evaluator.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_predicate.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_scoring.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_bench_template_engine.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_rule_harness_import.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_search_quality_reporting.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_search_readiness.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/eval/test_seed_attocode_fixtures.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit/integrations/context → attocode_code_intel-0.1.22/tests/unit/integrations}/__init__.py +0 -0
- {attocode_code_intel-0.1.20/tests/unit/integrations/utilities → attocode_code_intel-0.1.22/tests/unit/integrations/context}/__init__.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_architecture_drift.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_ast_service_hydration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_body_chunking.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_call_graph.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_code_analyzer.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_codebase_ast.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_codebase_context.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_context_stores_closed.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_cross_ref_search.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_embedder_default.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_embeddings.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_embeddings_query.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_go_symbols.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_hydration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_index_store.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_model_mismatch.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_path_downweight.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_query_routing.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_semantic_search.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_supported_languages.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_temporal_coupling.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_trigram_index.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_trigram_regex.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/context/test_ts_parser.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_dataflow.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_feature_flags.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_new_security_rules.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_security_autofix.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_security_matcher.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/test_streaming_lsp.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/utilities/test_ignore.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/integrations/utilities/test_token_estimate.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_code_intel.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_code_intel_hydration.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_errors.py +0 -0
- {attocode_code_intel-0.1.20 → attocode_code_intel-0.1.22}/tests/unit/test_memory_store.py +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
dist/
|
|
3
|
+
__pycache__/
|
|
4
|
+
.venv/
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.db
|
|
7
|
+
*.db-shm
|
|
8
|
+
*.db-wal
|
|
9
|
+
*.jsonl
|
|
10
|
+
.mypy_cache/
|
|
11
|
+
.pytest_cache/
|
|
12
|
+
.ruff_cache/
|
|
13
|
+
|
|
14
|
+
# Node
|
|
15
|
+
node_modules/
|
|
16
|
+
*.tsbuildinfo
|
|
17
|
+
|
|
18
|
+
# Environment
|
|
19
|
+
.env
|
|
20
|
+
|
|
21
|
+
# Claude/Agent
|
|
22
|
+
.claude/
|
|
23
|
+
.agent/
|
|
24
|
+
.traces/
|
|
25
|
+
.production-agent-sessions/
|
|
26
|
+
.test-sandbox/
|
|
27
|
+
|
|
28
|
+
# Attocode index, caches and private quality runs
|
|
29
|
+
/.attocode/
|
|
30
|
+
|
|
31
|
+
docs/superpowers/
|
|
32
|
+
eval/charts/
|
|
33
|
+
eval/*.md
|
|
34
|
+
eval/*.log
|
|
35
|
+
eval/*.json
|
|
36
|
+
|
|
37
|
+
# Build outputs
|
|
38
|
+
*.vsix
|
|
39
|
+
site/
|
|
40
|
+
snapshot_report.html
|
|
41
|
+
.internal
|
|
42
|
+
|
|
43
|
+
# scripts
|
|
44
|
+
scripts/*
|
|
45
|
+
!scripts/check_pack_licenses.py
|
|
46
|
+
.DS_Store
|
|
47
|
+
|
|
48
|
+
#playwright
|
|
49
|
+
.playwright-mcp
|
|
50
|
+
|
|
51
|
+
#gsd
|
|
52
|
+
.gsd/
|
|
53
|
+
.bg-shell/
|
|
54
|
+
|
|
55
|
+
#cursor
|
|
56
|
+
.cursor/
|
|
57
|
+
|
|
58
|
+
# search-quality sweep scratch output
|
|
59
|
+
eval/sweep_out/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: attocode-code-intel
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.22
|
|
4
4
|
Summary: Local code search and navigation for coding agents and people
|
|
5
5
|
Project-URL: Homepage, https://github.com/eren23/attocode
|
|
6
6
|
Project-URL: Repository, https://github.com/eren23/attocode
|
|
@@ -139,6 +139,15 @@ To use the latest source, install from a clone of this repository: `uv tool inst
|
|
|
139
139
|
|
|
140
140
|
## What your agent gets
|
|
141
141
|
|
|
142
|
+
Version 0.1.22 adds an opt-in discovery budget of up to 100,000 files
|
|
143
|
+
(`ATTOCODE_INTEL_DISCOVERY_MAX_FILES`; the default stays 50,000). It also packages
|
|
144
|
+
the LLM client, so `ATTOCODE_FLAG_CONFIDENCE=llm` and LLM rule synthesis work from
|
|
145
|
+
a PyPI install when an OpenRouter or Anthropic key is set.
|
|
146
|
+
|
|
147
|
+
Version 0.1.21 includes configured search-discovery coverage, OCaml interface
|
|
148
|
+
parsing and more conservative Go/Rust fallback evidence. The existing 100 ms native
|
|
149
|
+
budget and 50,000-file discovery safety ceiling remain; bounded fallback is heuristic.
|
|
150
|
+
|
|
142
151
|
Version 0.1.20 improves native OCaml/Perl call candidates and conservative workspace
|
|
143
152
|
import candidates for OCaml, Perl and Crystal. Physical paths and ambiguity remain
|
|
144
153
|
guarded; native limits, ranking and dependencies are unchanged. Optional grammars
|
|
@@ -229,7 +238,7 @@ failed the frozen protocol. It provides no quality, cost or time benefit evidenc
|
|
|
229
238
|
|
|
230
239
|
- **First search.** The first tool call starts the index build. A search waits up to 15 seconds for the index. On a large repository, a search can report that the index is warming. Then search again. An empty result during warm-up does not prove that the code is absent.
|
|
231
240
|
- **Index location.** The index is in `.attocode/` in your project. When the server makes that folder, it adds a `.gitignore`, so the index stays out of commits.
|
|
232
|
-
- **What the index reads.**
|
|
241
|
+
- **What the index reads.** By default the server discovers at most 50,000 eligible files and skips files over 1 MB. From 0.1.22, the [discovery budget setting](https://github.com/eren23/attocode/blob/main/docs/intelligence-discovery.md) allows an explicit limit up to 100,000; the selected index can be smaller under its independent file limit. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
|
|
233
242
|
- **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig. Optional grammars are loaded only when already installed or cached; installing the `tree-sitter-all` extra does not trigger grammar downloads during navigation. A slow grammar falls back after a 100 ms parse budget. Static imports and references are partial evidence, not compiler/type resolution.
|
|
234
243
|
- **Degraded parsing (development builds).** Selecting a missing definition in
|
|
235
244
|
a file with a recorded native parse failure permits one bounded retry for
|
|
@@ -26,6 +26,15 @@ To use the latest source, install from a clone of this repository: `uv tool inst
|
|
|
26
26
|
|
|
27
27
|
## What your agent gets
|
|
28
28
|
|
|
29
|
+
Version 0.1.22 adds an opt-in discovery budget of up to 100,000 files
|
|
30
|
+
(`ATTOCODE_INTEL_DISCOVERY_MAX_FILES`; the default stays 50,000). It also packages
|
|
31
|
+
the LLM client, so `ATTOCODE_FLAG_CONFIDENCE=llm` and LLM rule synthesis work from
|
|
32
|
+
a PyPI install when an OpenRouter or Anthropic key is set.
|
|
33
|
+
|
|
34
|
+
Version 0.1.21 includes configured search-discovery coverage, OCaml interface
|
|
35
|
+
parsing and more conservative Go/Rust fallback evidence. The existing 100 ms native
|
|
36
|
+
budget and 50,000-file discovery safety ceiling remain; bounded fallback is heuristic.
|
|
37
|
+
|
|
29
38
|
Version 0.1.20 improves native OCaml/Perl call candidates and conservative workspace
|
|
30
39
|
import candidates for OCaml, Perl and Crystal. Physical paths and ambiguity remain
|
|
31
40
|
guarded; native limits, ranking and dependencies are unchanged. Optional grammars
|
|
@@ -116,7 +125,7 @@ failed the frozen protocol. It provides no quality, cost or time benefit evidenc
|
|
|
116
125
|
|
|
117
126
|
- **First search.** The first tool call starts the index build. A search waits up to 15 seconds for the index. On a large repository, a search can report that the index is warming. Then search again. An empty result during warm-up does not prove that the code is absent.
|
|
118
127
|
- **Index location.** The index is in `.attocode/` in your project. When the server makes that folder, it adds a `.gitignore`, so the index stays out of commits.
|
|
119
|
-
- **What the index reads.**
|
|
128
|
+
- **What the index reads.** By default the server discovers at most 50,000 eligible files and skips files over 1 MB. From 0.1.22, the [discovery budget setting](https://github.com/eren23/attocode/blob/main/docs/intelligence-discovery.md) allows an explicit limit up to 100,000; the selected index can be smaller under its independent file limit. It skips files that `.gitignore` ignores, and folders that start with a dot. It also skips folders named `dist`, `build`, `out`, `output`, `target`, `env`, `tmp`, `vendor` or `coverage`, and binary, media and lock files. If a build-named folder contains real source, explicitly re-include it with a root `.gitignore` entry such as `!dist/`; discovery and edit refresh honor that override.
|
|
120
129
|
- **Languages.** The base install parses Bash, C, C#, C++, CSS, Elixir, Go, HCL, HTML, Java, JavaScript, JSON, Kotlin, Lua, PHP, Python, Ruby, Rust, Scala, Swift, TOML, TypeScript, YAML and Zig. Optional grammars are loaded only when already installed or cached; installing the `tree-sitter-all` extra does not trigger grammar downloads during navigation. A slow grammar falls back after a 100 ms parse budget. Static imports and references are partial evidence, not compiler/type resolution.
|
|
121
130
|
- **Degraded parsing (development builds).** Selecting a missing definition in
|
|
122
131
|
a file with a recorded native parse failure permits one bounded retry for
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "attocode-code-intel"
|
|
9
|
-
version = "0.1.
|
|
9
|
+
version = "0.1.22"
|
|
10
10
|
description = "Local code search and navigation for coding agents and people"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
requires-python = ">=3.12"
|
|
@@ -142,8 +142,8 @@ packages = [
|
|
|
142
142
|
]
|
|
143
143
|
|
|
144
144
|
[tool.hatch.build.targets.sdist]
|
|
145
|
-
# Frozen
|
|
146
|
-
exclude = ["/evals/
|
|
145
|
+
# Frozen study designs and results remain available in the tagged Git repository.
|
|
146
|
+
exclude = ["/evals/"]
|
|
147
147
|
|
|
148
148
|
[tool.pytest.ini_options]
|
|
149
149
|
asyncio_mode = "auto"
|
|
@@ -1428,6 +1428,7 @@ class ASTService:
|
|
|
1428
1428
|
def _index_definitions(self, rel_path: str, ast: FileAST, *, index=None) -> None:
|
|
1429
1429
|
"""Phase 1: Index all *definitions* (functions, classes, methods)."""
|
|
1430
1430
|
index = self._index if index is None else index
|
|
1431
|
+
source = 'regex' if ast.language in {'go', 'rust'} and ast.parsing_tier == 'regex' else 'tree-sitter'
|
|
1431
1432
|
# Top-level functions
|
|
1432
1433
|
for func in ast.functions:
|
|
1433
1434
|
loc = SymbolLocation(
|
|
@@ -1437,6 +1438,7 @@ class ASTService:
|
|
|
1437
1438
|
file_path=rel_path,
|
|
1438
1439
|
start_line=func.start_line,
|
|
1439
1440
|
end_line=func.end_line,
|
|
1441
|
+
source=source,
|
|
1440
1442
|
)
|
|
1441
1443
|
index.add_definition(loc)
|
|
1442
1444
|
|
|
@@ -1449,6 +1451,7 @@ class ASTService:
|
|
|
1449
1451
|
file_path=rel_path,
|
|
1450
1452
|
start_line=cls.start_line,
|
|
1451
1453
|
end_line=cls.end_line,
|
|
1454
|
+
source=source,
|
|
1452
1455
|
)
|
|
1453
1456
|
index.add_definition(cls_loc)
|
|
1454
1457
|
|
|
@@ -1460,6 +1463,7 @@ class ASTService:
|
|
|
1460
1463
|
file_path=rel_path,
|
|
1461
1464
|
start_line=method.start_line,
|
|
1462
1465
|
end_line=method.end_line,
|
|
1466
|
+
source=source,
|
|
1463
1467
|
)
|
|
1464
1468
|
index.add_definition(method_loc)
|
|
1465
1469
|
|
|
@@ -1472,6 +1476,7 @@ class ASTService:
|
|
|
1472
1476
|
file_path=rel_path,
|
|
1473
1477
|
start_line=0,
|
|
1474
1478
|
end_line=0,
|
|
1479
|
+
source=source,
|
|
1475
1480
|
)
|
|
1476
1481
|
index.add_definition(var_loc)
|
|
1477
1482
|
|
|
@@ -1563,6 +1568,10 @@ class ASTService:
|
|
|
1563
1568
|
# Build a regex pattern for call sites: symbol_name(
|
|
1564
1569
|
# Only scan for symbols that are actually defined somewhere.
|
|
1565
1570
|
# Skip comment lines and string literals to reduce false positives.
|
|
1571
|
+
lexical_fallback = ast.language in {'go', 'rust'}
|
|
1572
|
+
if lexical_fallback:
|
|
1573
|
+
from .codebase_ast import _mask_go_rust_source
|
|
1574
|
+
content = _mask_go_rust_source(content, ast.language)
|
|
1566
1575
|
in_multiline_string = False
|
|
1567
1576
|
for i, line in enumerate(content.split("\n"), 1):
|
|
1568
1577
|
stripped = line.lstrip()
|
|
@@ -1591,12 +1600,19 @@ class ASTService:
|
|
|
1591
1600
|
|
|
1592
1601
|
# Strip inline comments and string literals for matching
|
|
1593
1602
|
# Remove quoted strings to avoid matching inside them
|
|
1594
|
-
clean_line = re.sub(r'(["\'])(?:(?!\1).)*\1', '""', line)
|
|
1603
|
+
clean_line = line if lexical_fallback else re.sub(r'(["\'])(?:(?!\1).)*\1', '""', line)
|
|
1604
|
+
declaration = None
|
|
1605
|
+
if ast.language == 'go':
|
|
1606
|
+
declaration = re.match(r'^\s*func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(', clean_line)
|
|
1607
|
+
elif ast.language == 'rust':
|
|
1608
|
+
declaration = re.match(r'^\s*(?:pub(?:\([^)]*\))?\s+)?(?:(?:async|unsafe|extern|const)\s+)*fn\s+(\w+)', clean_line)
|
|
1595
1609
|
caller = _enclosing_qname(i)
|
|
1596
1610
|
|
|
1597
1611
|
# Find function/method calls: name(
|
|
1598
1612
|
for m in re.finditer(r"(?<!\.)\b(\w+)\s*\(", clean_line):
|
|
1599
1613
|
name = m.group(1)
|
|
1614
|
+
if declaration is not None and m.start(1) == declaration.start(1):
|
|
1615
|
+
continue
|
|
1600
1616
|
if name in known_symbols and name not in ("if", "for", "while", "return", "print"):
|
|
1601
1617
|
ref = SymbolRef(
|
|
1602
1618
|
symbol_name=name,
|
|
@@ -1605,6 +1621,7 @@ class ASTService:
|
|
|
1605
1621
|
line=i,
|
|
1606
1622
|
syntax_name=name,
|
|
1607
1623
|
caller_qualified_name=caller,
|
|
1624
|
+
source='regex' if lexical_fallback else 'tree-sitter',
|
|
1608
1625
|
)
|
|
1609
1626
|
index.add_reference(ref)
|
|
1610
1627
|
|
|
@@ -1619,5 +1636,6 @@ class ASTService:
|
|
|
1619
1636
|
line=i,
|
|
1620
1637
|
syntax_name=m.group(0).rsplit("(", 1)[0].strip(),
|
|
1621
1638
|
caller_qualified_name=caller,
|
|
1639
|
+
source='regex' if lexical_fallback else 'tree-sitter',
|
|
1622
1640
|
)
|
|
1623
1641
|
index.add_reference(ref)
|
|
@@ -863,12 +863,116 @@ def parse_javascript(content: str, path: str = "") -> FileAST:
|
|
|
863
863
|
return ast
|
|
864
864
|
|
|
865
865
|
|
|
866
|
+
def _mask_go_rust_source(content: str, language: str, *, keep_quoted: bool = False) -> str:
|
|
867
|
+
"""Keep coordinates while hiding comments/literals from bounded heuristics.
|
|
868
|
+
|
|
869
|
+
keep_quoted retains ordinary double-quoted Go import paths. Raw literals
|
|
870
|
+
stay hidden in both views so their interior lines cannot become imports.
|
|
871
|
+
This is lexical filtering, not a complete language grammar.
|
|
872
|
+
"""
|
|
873
|
+
output = list(content)
|
|
874
|
+
size, i = len(content), 0
|
|
875
|
+
raw_string = re.compile(r'(?:b|c)?r(#{0,255})"')
|
|
876
|
+
rust_char = re.compile(r"'(?:\\(?:u\{[0-9a-fA-F_]+\}|x[0-9a-fA-F]{2}|[^\r\n])|[^\\'\r\n])'")
|
|
877
|
+
|
|
878
|
+
def hide(start, end):
|
|
879
|
+
for at in range(start, min(end, size)):
|
|
880
|
+
if content[at] not in '\r\n':
|
|
881
|
+
output[at] = ' '
|
|
882
|
+
|
|
883
|
+
while i < size:
|
|
884
|
+
start = i
|
|
885
|
+
if content.startswith('//', i):
|
|
886
|
+
end = content.find('\n', i + 2)
|
|
887
|
+
i = size if end < 0 else end
|
|
888
|
+
hide(start, i)
|
|
889
|
+
elif content.startswith('/*', i):
|
|
890
|
+
i, depth = i + 2, 1
|
|
891
|
+
while i < size and depth:
|
|
892
|
+
if language == 'rust' and content.startswith('/*', i):
|
|
893
|
+
depth += 1
|
|
894
|
+
i += 2
|
|
895
|
+
elif content.startswith('*/', i):
|
|
896
|
+
depth -= 1
|
|
897
|
+
i += 2
|
|
898
|
+
else:
|
|
899
|
+
i += 1
|
|
900
|
+
hide(start, i)
|
|
901
|
+
elif language == 'go' and content[i] == '`':
|
|
902
|
+
end = content.find('`', i + 1)
|
|
903
|
+
i = size if end < 0 else end + 1
|
|
904
|
+
hide(start, i)
|
|
905
|
+
elif language == 'rust' and (i == 0 or not (content[i - 1].isalnum() or content[i - 1] == '_')) and (raw := raw_string.match(content, i)):
|
|
906
|
+
closing = '"' + raw.group(1)
|
|
907
|
+
end = content.find(closing, raw.end())
|
|
908
|
+
i = size if end < 0 else end + len(closing)
|
|
909
|
+
hide(start, i)
|
|
910
|
+
elif language == 'rust' and content[i] == "'":
|
|
911
|
+
# An apostrophe also introduces a lifetime/label. Only a complete
|
|
912
|
+
# character token is hidden; &'a and 'label: stay code.
|
|
913
|
+
char = rust_char.match(content, i)
|
|
914
|
+
if char:
|
|
915
|
+
i = char.end()
|
|
916
|
+
hide(start, i)
|
|
917
|
+
else:
|
|
918
|
+
i += 1
|
|
919
|
+
elif content[i] == '"' or (language == 'go' and content[i] == "'"):
|
|
920
|
+
quote = content[i]
|
|
921
|
+
i += 1
|
|
922
|
+
while i < size:
|
|
923
|
+
if content[i] == '\\':
|
|
924
|
+
i += 2
|
|
925
|
+
elif content[i] == quote:
|
|
926
|
+
i += 1
|
|
927
|
+
break
|
|
928
|
+
else:
|
|
929
|
+
i += 1
|
|
930
|
+
if not (keep_quoted and quote == '"'):
|
|
931
|
+
hide(start, i)
|
|
932
|
+
else:
|
|
933
|
+
i += 1
|
|
934
|
+
return ''.join(output)
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
def _bounded_fallback_end(lines: list[str], start: int) -> int:
|
|
938
|
+
"""Find an ordinary declaration body within the existing500-line window."""
|
|
939
|
+
depth = parens = brackets = 0
|
|
940
|
+
opened = False
|
|
941
|
+
for number in range(start, min(start + 500, len(lines))):
|
|
942
|
+
line = lines[number]
|
|
943
|
+
if number > start and not opened and not parens and not brackets and re.match(
|
|
944
|
+
r'\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+|unsafe\s+)?(?:func|fn|struct|enum|trait|type|impl|mod|use|import|const|var)\b', line,
|
|
945
|
+
):
|
|
946
|
+
return start + 1
|
|
947
|
+
for char in line:
|
|
948
|
+
if opened:
|
|
949
|
+
depth += (char == '{') - (char == '}')
|
|
950
|
+
elif char == '(':
|
|
951
|
+
parens += 1
|
|
952
|
+
elif char == ')':
|
|
953
|
+
parens = max(0, parens - 1)
|
|
954
|
+
elif char == '[':
|
|
955
|
+
brackets += 1
|
|
956
|
+
elif char == ']':
|
|
957
|
+
brackets = max(0, brackets - 1)
|
|
958
|
+
elif not parens and not brackets:
|
|
959
|
+
if char == ';':
|
|
960
|
+
return start + 1
|
|
961
|
+
if char == '{':
|
|
962
|
+
opened, depth = True, 1
|
|
963
|
+
# A return type may close its own braces before the function body
|
|
964
|
+
# opens on the same line. Finish only after processing that line.
|
|
965
|
+
if opened and depth == 0:
|
|
966
|
+
return number + 1
|
|
967
|
+
return start + 1
|
|
968
|
+
|
|
969
|
+
|
|
866
970
|
def parse_rust(content: str, path: str = "") -> FileAST:
|
|
867
971
|
"""Parse Rust source using regex patterns.
|
|
868
972
|
|
|
869
973
|
Extracts functions, structs, enums, traits, impl blocks, imports (use/mod).
|
|
870
974
|
"""
|
|
871
|
-
lines = content.split("\n")
|
|
975
|
+
lines = _mask_go_rust_source(content, 'rust').split("\n")
|
|
872
976
|
ast = FileAST(path=path, language="rust", line_count=len(lines))
|
|
873
977
|
|
|
874
978
|
for i, line in enumerate(lines):
|
|
@@ -894,20 +998,13 @@ def parse_rust(content: str, path: str = "") -> FileAST:
|
|
|
894
998
|
|
|
895
999
|
# Functions: (pub)? (async)? fn name(...)
|
|
896
1000
|
fn_match = re.match(
|
|
897
|
-
r"^(?:pub(?:\([\w:]+\))?\s+)?(?:async\s+)?(?:unsafe\s+)?(?:extern\s
|
|
1001
|
+
r"^(?:pub(?:\([\w:]+\))?\s+)?(?:async\s+)?(?:unsafe\s+)?(?:extern\s+)?fn\s+(\w+)",
|
|
898
1002
|
stripped,
|
|
899
1003
|
)
|
|
900
1004
|
if fn_match:
|
|
901
1005
|
func_name = fn_match.group(1)
|
|
902
1006
|
# Find end via brace matching
|
|
903
|
-
end_line = i
|
|
904
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
905
|
-
if brace_count > 0:
|
|
906
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
907
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
908
|
-
if brace_count <= 0:
|
|
909
|
-
end_line = j + 1
|
|
910
|
-
break
|
|
1007
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
911
1008
|
is_async = "async " in stripped.split("fn")[0]
|
|
912
1009
|
ast.functions.append(FunctionDef(
|
|
913
1010
|
name=func_name,
|
|
@@ -920,14 +1017,7 @@ def parse_rust(content: str, path: str = "") -> FileAST:
|
|
|
920
1017
|
# Structs: (pub)? struct Name
|
|
921
1018
|
struct_match = re.match(r"^(?:pub(?:\([\w:]+\))?\s+)?struct\s+(\w+)", stripped)
|
|
922
1019
|
if struct_match:
|
|
923
|
-
end_line = i
|
|
924
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
925
|
-
if brace_count > 0:
|
|
926
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
927
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
928
|
-
if brace_count <= 0:
|
|
929
|
-
end_line = j + 1
|
|
930
|
-
break
|
|
1020
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
931
1021
|
ast.classes.append(ClassDef(
|
|
932
1022
|
name=struct_match.group(1),
|
|
933
1023
|
start_line=i + 1,
|
|
@@ -938,14 +1028,7 @@ def parse_rust(content: str, path: str = "") -> FileAST:
|
|
|
938
1028
|
# Enums: (pub)? enum Name
|
|
939
1029
|
enum_match = re.match(r"^(?:pub(?:\([\w:]+\))?\s+)?enum\s+(\w+)", stripped)
|
|
940
1030
|
if enum_match:
|
|
941
|
-
end_line = i
|
|
942
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
943
|
-
if brace_count > 0:
|
|
944
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
945
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
946
|
-
if brace_count <= 0:
|
|
947
|
-
end_line = j + 1
|
|
948
|
-
break
|
|
1031
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
949
1032
|
ast.classes.append(ClassDef(
|
|
950
1033
|
name=enum_match.group(1),
|
|
951
1034
|
start_line=i + 1,
|
|
@@ -956,14 +1039,7 @@ def parse_rust(content: str, path: str = "") -> FileAST:
|
|
|
956
1039
|
# Traits: (pub)? trait Name
|
|
957
1040
|
trait_match = re.match(r"^(?:pub(?:\([\w:]+\))?\s+)?(?:unsafe\s+)?trait\s+(\w+)", stripped)
|
|
958
1041
|
if trait_match:
|
|
959
|
-
end_line = i
|
|
960
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
961
|
-
if brace_count > 0:
|
|
962
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
963
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
964
|
-
if brace_count <= 0:
|
|
965
|
-
end_line = j + 1
|
|
966
|
-
break
|
|
1042
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
967
1043
|
ast.classes.append(ClassDef(
|
|
968
1044
|
name=trait_match.group(1),
|
|
969
1045
|
start_line=i + 1,
|
|
@@ -984,7 +1060,8 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
984
1060
|
|
|
985
1061
|
Extracts functions, methods, structs, interfaces, imports.
|
|
986
1062
|
"""
|
|
987
|
-
lines = content.split("\n")
|
|
1063
|
+
lines = _mask_go_rust_source(content, 'go').split("\n")
|
|
1064
|
+
import_lines = _mask_go_rust_source(content, 'go', keep_quoted=True).split("\n")
|
|
988
1065
|
ast = FileAST(path=path, language="go", line_count=len(lines))
|
|
989
1066
|
|
|
990
1067
|
i = 0
|
|
@@ -995,7 +1072,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
995
1072
|
if stripped == "import (" or stripped.startswith("import ("):
|
|
996
1073
|
i += 1
|
|
997
1074
|
while i < len(lines):
|
|
998
|
-
imp_line =
|
|
1075
|
+
imp_line = import_lines[i].strip()
|
|
999
1076
|
if imp_line == ")":
|
|
1000
1077
|
break
|
|
1001
1078
|
# Parse "pkg" or alias "pkg"
|
|
@@ -1009,7 +1086,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
1009
1086
|
continue
|
|
1010
1087
|
|
|
1011
1088
|
# Single import: import "pkg"
|
|
1012
|
-
single_imp = re.match(r'^import\s+(?:\w+\s+)?"([^"]+)"', stripped)
|
|
1089
|
+
single_imp = re.match(r'^import\s+(?:\w+\s+)?"([^"]+)"', import_lines[i].strip()) if stripped.startswith('import') else None
|
|
1013
1090
|
if single_imp:
|
|
1014
1091
|
ast.imports.append(ImportDef(
|
|
1015
1092
|
module=single_imp.group(1), is_from=False, line=i + 1,
|
|
@@ -1021,14 +1098,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
1021
1098
|
method_match = re.match(r"^func\s+\([^)]+\)\s+(\w+)\s*\(", stripped)
|
|
1022
1099
|
if method_match:
|
|
1023
1100
|
func_name = method_match.group(1)
|
|
1024
|
-
end_line = i
|
|
1025
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
1026
|
-
if brace_count > 0:
|
|
1027
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
1028
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
1029
|
-
if brace_count <= 0:
|
|
1030
|
-
end_line = j + 1
|
|
1031
|
-
break
|
|
1101
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
1032
1102
|
ast.functions.append(FunctionDef(
|
|
1033
1103
|
name=func_name,
|
|
1034
1104
|
start_line=i + 1,
|
|
@@ -1042,14 +1112,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
1042
1112
|
fn_match = re.match(r"^func\s+(\w+)\s*\(", stripped)
|
|
1043
1113
|
if fn_match:
|
|
1044
1114
|
func_name = fn_match.group(1)
|
|
1045
|
-
end_line = i
|
|
1046
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
1047
|
-
if brace_count > 0:
|
|
1048
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
1049
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
1050
|
-
if brace_count <= 0:
|
|
1051
|
-
end_line = j + 1
|
|
1052
|
-
break
|
|
1115
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
1053
1116
|
ast.functions.append(FunctionDef(
|
|
1054
1117
|
name=func_name,
|
|
1055
1118
|
start_line=i + 1,
|
|
@@ -1061,14 +1124,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
1061
1124
|
# Struct: type Name struct {
|
|
1062
1125
|
struct_match = re.match(r"^type\s+(\w+)\s+struct\s*\{", stripped)
|
|
1063
1126
|
if struct_match:
|
|
1064
|
-
end_line = i
|
|
1065
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
1066
|
-
if brace_count > 0:
|
|
1067
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
1068
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
1069
|
-
if brace_count <= 0:
|
|
1070
|
-
end_line = j + 1
|
|
1071
|
-
break
|
|
1127
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
1072
1128
|
ast.classes.append(ClassDef(
|
|
1073
1129
|
name=struct_match.group(1),
|
|
1074
1130
|
start_line=i + 1,
|
|
@@ -1080,14 +1136,7 @@ def parse_go(content: str, path: str = "") -> FileAST:
|
|
|
1080
1136
|
# Interface: type Name interface {
|
|
1081
1137
|
iface_match = re.match(r"^type\s+(\w+)\s+interface\s*\{", stripped)
|
|
1082
1138
|
if iface_match:
|
|
1083
|
-
end_line = i
|
|
1084
|
-
brace_count = stripped.count("{") - stripped.count("}")
|
|
1085
|
-
if brace_count > 0:
|
|
1086
|
-
for j in range(i + 1, min(i + 500, len(lines))):
|
|
1087
|
-
brace_count += lines[j].count("{") - lines[j].count("}")
|
|
1088
|
-
if brace_count <= 0:
|
|
1089
|
-
end_line = j + 1
|
|
1090
|
-
break
|
|
1139
|
+
end_line = _bounded_fallback_end(lines, i)
|
|
1091
1140
|
ast.classes.append(ClassDef(
|
|
1092
1141
|
name=iface_match.group(1),
|
|
1093
1142
|
start_line=i + 1,
|
|
@@ -821,6 +821,27 @@ def build_dependency_graph(
|
|
|
821
821
|
return graph
|
|
822
822
|
|
|
823
823
|
|
|
824
|
+
_DISCOVERY_ENV = "ATTOCODE_INTEL_DISCOVERY_MAX_FILES"
|
|
825
|
+
_DEFAULT_DISCOVERY_MAX_FILES = 50_000
|
|
826
|
+
_HARD_DISCOVERY_MAX_FILES = 100_000
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
def _validate_discovery_max_files(value: int) -> int:
|
|
830
|
+
if type(value) is not int or not 1 <= value <= _HARD_DISCOVERY_MAX_FILES:
|
|
831
|
+
raise ValueError(f"discovery_max_files must be an integer from 1 to {_HARD_DISCOVERY_MAX_FILES}")
|
|
832
|
+
return value
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
def _discovery_max_files_from_env() -> int:
|
|
836
|
+
raw = os.environ.get(_DISCOVERY_ENV)
|
|
837
|
+
if raw is None:
|
|
838
|
+
return _DEFAULT_DISCOVERY_MAX_FILES
|
|
839
|
+
try:
|
|
840
|
+
return _validate_discovery_max_files(int(raw))
|
|
841
|
+
except ValueError as exc:
|
|
842
|
+
raise ValueError(f"{_DISCOVERY_ENV} must be an integer from 1 to {_HARD_DISCOVERY_MAX_FILES}") from exc
|
|
843
|
+
|
|
844
|
+
|
|
824
845
|
@dataclass
|
|
825
846
|
class CodebaseContextManager:
|
|
826
847
|
"""Manages codebase context for intelligent code understanding.
|
|
@@ -853,6 +874,12 @@ class CodebaseContextManager:
|
|
|
853
874
|
_ignored_checkout_dirs_capped: bool = field(default=False, repr=False)
|
|
854
875
|
cancelled: Callable[[], bool] | None = field(default=None, repr=False, compare=False)
|
|
855
876
|
_discovery_snapshot: Any = field(default=None, repr=False, compare=False)
|
|
877
|
+
# Separate from max_files, which caps selection after importance scoring.
|
|
878
|
+
# Capture the environment per instance; preserve existing positional fields.
|
|
879
|
+
discovery_max_files: int = field(default_factory=_discovery_max_files_from_env, kw_only=True)
|
|
880
|
+
|
|
881
|
+
def __post_init__(self) -> None:
|
|
882
|
+
_validate_discovery_max_files(self.discovery_max_files)
|
|
856
883
|
|
|
857
884
|
def _check_cancelled(self) -> None:
|
|
858
885
|
if self.cancelled is not None and self.cancelled():
|
|
@@ -906,7 +933,8 @@ class CodebaseContextManager:
|
|
|
906
933
|
directory/file and the ignore-file identity must still match. A failed
|
|
907
934
|
validation leaves this context empty so its normal fresh discovery runs.
|
|
908
935
|
"""
|
|
909
|
-
|
|
936
|
+
scan_limit = _validate_discovery_max_files(self.discovery_max_files)
|
|
937
|
+
if snapshot is None or len(snapshot.files) > scan_limit or not snapshot.valid_for(self):
|
|
910
938
|
return False
|
|
911
939
|
files = [FileInfo(*row) for row in snapshot.files]
|
|
912
940
|
cap = _compute_dynamic_cap(files, self.max_files)
|
|
@@ -927,6 +955,7 @@ class CodebaseContextManager:
|
|
|
927
955
|
Returns:
|
|
928
956
|
List of FileInfo objects for discovered files.
|
|
929
957
|
"""
|
|
958
|
+
scan_limit = _validate_discovery_max_files(self.discovery_max_files)
|
|
930
959
|
root = Path(self.root_dir)
|
|
931
960
|
resolved_root = root.resolve()
|
|
932
961
|
from attocode_intel._internal.integrations.context.discovery_snapshot import (
|
|
@@ -962,7 +991,7 @@ class CodebaseContextManager:
|
|
|
962
991
|
guard(root / ".gitignore", missing_ok=True)
|
|
963
992
|
ignore = IgnoreManager(root, default_dirs=self.ignore_patterns)
|
|
964
993
|
files: list[FileInfo] = []
|
|
965
|
-
|
|
994
|
+
scan_truncated = False
|
|
966
995
|
self._ignored_checkout_dirs = []
|
|
967
996
|
self._ignored_checkout_dirs_capped = False
|
|
968
997
|
|
|
@@ -1028,6 +1057,12 @@ class CodebaseContextManager:
|
|
|
1028
1057
|
if size > 1_000_000: # 1MB
|
|
1029
1058
|
continue
|
|
1030
1059
|
|
|
1060
|
+
# One further eligible file proves overflow. Excluded files do
|
|
1061
|
+
# not, and no descriptor/content is allocated for this lookahead.
|
|
1062
|
+
if len(files) >= scan_limit:
|
|
1063
|
+
scan_truncated = True
|
|
1064
|
+
break
|
|
1065
|
+
|
|
1031
1066
|
is_test = any(p in rel_path.lower() for p in TEST_PATTERNS)
|
|
1032
1067
|
is_config = any(p in rel_path.lower() for p in CONFIG_PATTERNS)
|
|
1033
1068
|
|
|
@@ -1050,10 +1085,7 @@ class CodebaseContextManager:
|
|
|
1050
1085
|
line_count=line_count,
|
|
1051
1086
|
))
|
|
1052
1087
|
|
|
1053
|
-
|
|
1054
|
-
break
|
|
1055
|
-
|
|
1056
|
-
if len(files) >= _SAFETY_CEILING:
|
|
1088
|
+
if scan_truncated:
|
|
1057
1089
|
break
|
|
1058
1090
|
|
|
1059
1091
|
# Score importance
|
|
@@ -1084,14 +1116,14 @@ class CodebaseContextManager:
|
|
|
1084
1116
|
# Truncate to dynamic cap AFTER scoring (smart truncation)
|
|
1085
1117
|
cap = _compute_dynamic_cap(files, self.max_files)
|
|
1086
1118
|
self.discovered_file_count = len(files)
|
|
1087
|
-
self.discovery_truncated = len(files) > cap
|
|
1119
|
+
self.discovery_truncated = scan_truncated or len(files) > cap
|
|
1088
1120
|
if len(files) > cap:
|
|
1089
1121
|
files = files[:cap]
|
|
1090
1122
|
|
|
1091
1123
|
self._files = files
|
|
1092
1124
|
self.refresh_excluded_checkout_roots()
|
|
1093
1125
|
self._last_refresh_time = time.monotonic()
|
|
1094
|
-
if snapshot_safe and not self.discovery_truncated and self.discovered_file_count <
|
|
1126
|
+
if snapshot_safe and not self.discovery_truncated and self.discovered_file_count < scan_limit:
|
|
1095
1127
|
self._discovery_snapshot = DiscoverySnapshot(
|
|
1096
1128
|
os.path.abspath(self.root_dir), frozenset(self.ignore_patterns),
|
|
1097
1129
|
self._last_refresh_time,
|
|
@@ -1375,55 +1407,6 @@ class CodebaseContextManager:
|
|
|
1375
1407
|
|
|
1376
1408
|
return result
|
|
1377
1409
|
|
|
1378
|
-
# --- Recursive context retrieval ---
|
|
1379
|
-
|
|
1380
|
-
def get_recursive_context(
|
|
1381
|
-
self,
|
|
1382
|
-
seed_files: list[str],
|
|
1383
|
-
token_budget: int = 20_000,
|
|
1384
|
-
max_depth: int = 3,
|
|
1385
|
-
max_files: int = 15,
|
|
1386
|
-
) -> str:
|
|
1387
|
-
"""Gather context by recursively following imports from seed files.
|
|
1388
|
-
|
|
1389
|
-
Uses the RecursiveContextRetriever to mechanically follow Python/JS
|
|
1390
|
-
imports starting from seed files, gathering content up to a depth
|
|
1391
|
-
and token budget. Zero LLM cost.
|
|
1392
|
-
|
|
1393
|
-
Args:
|
|
1394
|
-
seed_files: Files to start traversal from.
|
|
1395
|
-
token_budget: Maximum tokens to gather.
|
|
1396
|
-
max_depth: Maximum import-following depth.
|
|
1397
|
-
max_files: Maximum files to visit.
|
|
1398
|
-
|
|
1399
|
-
Returns:
|
|
1400
|
-
Combined content from all gathered files.
|
|
1401
|
-
"""
|
|
1402
|
-
from attocode_intel._internal.tricks.recursive_context import RecursiveContextRetriever
|
|
1403
|
-
|
|
1404
|
-
class _FileProvider:
|
|
1405
|
-
def __init__(self, root: str) -> None:
|
|
1406
|
-
self._root = os.path.realpath(root)
|
|
1407
|
-
|
|
1408
|
-
def get_content(self, path: str) -> str | None:
|
|
1409
|
-
candidate = os.path.normpath(os.path.join(self._root, path))
|
|
1410
|
-
if not candidate.startswith(self._root):
|
|
1411
|
-
return None # Path traversal rejected
|
|
1412
|
-
try:
|
|
1413
|
-
with open(candidate, encoding="utf-8", errors="replace") as f:
|
|
1414
|
-
return f.read()
|
|
1415
|
-
except (OSError, UnicodeDecodeError):
|
|
1416
|
-
return None
|
|
1417
|
-
|
|
1418
|
-
retriever = RecursiveContextRetriever(
|
|
1419
|
-
_FileProvider(self.root_dir),
|
|
1420
|
-
max_depth=max_depth,
|
|
1421
|
-
token_budget=token_budget,
|
|
1422
|
-
max_files=max_files,
|
|
1423
|
-
)
|
|
1424
|
-
result = retriever.retrieve(seed_files)
|
|
1425
|
-
return result.content
|
|
1426
|
-
|
|
1427
1410
|
# --- Incremental update API ---
|
|
1428
1411
|
|
|
1429
1412
|
def mark_file_dirty(self, file_path: str) -> None:
|