agent-codinglanguage-mapper 1.1.2__tar.gz → 1.1.4__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.
- {agent_codinglanguage_mapper-1.1.2/src/agent_codinglanguage_mapper.egg-info → agent_codinglanguage_mapper-1.1.4}/PKG-INFO +7 -1
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/README.md +6 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/pyproject.toml +1 -1
- agent_codinglanguage_mapper-1.1.4/src/agent_codinglanguage_mapper/_version.py +1 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/indexer.py +86 -62
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/mapper.py +33 -22
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4/src/agent_codinglanguage_mapper.egg-info}/PKG-INFO +7 -1
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_indexer.py +115 -137
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_package_contract.py +8 -12
- agent_codinglanguage_mapper-1.1.2/src/agent_codinglanguage_mapper/_version.py +0 -1
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/.github/workflows/ci.yml +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/LICENSE +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/MANIFEST.in +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/audit_language_matrix.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/benchmark_large_workspaces.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/build_github_performance_corpus.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/evaluate_external_corpora.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/generate_language_matrix.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/run_opencode_e2e.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/scripts/run_openrouter_e2e.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/setup.cfg +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/__main__.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/comment_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/consts.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/grammar.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lark_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lark_tokens.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/nodes.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/parser.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/preprocessor.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/project_discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/project_indexer.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/semantic.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/semantic_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/source_reader.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/workspace.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/adapters/tree_sitter.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/cli.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/formatting.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/guidelines.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/integration.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/lsp_service.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/models.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/protocol.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/rendering.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/templates/opencode/agents/agent-codinglanguage-mapper.md +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/templates/opencode/plugins/codebase_map.ts +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/templates/skill/SKILL.md +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/worker.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper/workspace.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper.egg-info/SOURCES.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper.egg-info/dependency_links.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper.egg-info/entry_points.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper.egg-info/requires.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/src/agent_codinglanguage_mapper.egg-info/top_level.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/corpora.lock.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/runtime.lock.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/cpp/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/cpp/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/cpp/workspace/src/cache.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/csharp/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/csharp/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/csharp/workspace/src/RateService.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/delphi/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/delphi/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/delphi/workspace/src/InventoryService.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/guidelines/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/guidelines/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/guidelines/workspace/.editorconfig +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/guidelines/workspace/src/sample.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/mixed-ffi/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/mixed-ffi/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/mixed-ffi/workspace/CMakeLists.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/mixed-ffi/workspace/native/metrics.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/mixed-ffi/workspace/python/metrics_bridge.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/python/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/python/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/python/workspace/src/billing.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/rust/golden.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/rust/prompt.txt +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/e2e/scenarios/rust/workspace/src/lib.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/alignedrecords.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/constset.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/deprecatedtype.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/dottedtypes.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/endtoken.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/experimentals.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/externalfunction.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/forwardoverloaded.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/genericconstraints.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/implementsgenerictype.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/include file2.inc +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/includefile.inc +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/includefile.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/managedrecords.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/messagemethod.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/multiline.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/nonalignedrecords.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/numbers.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/pointerchars.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/properties.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/strictvisibility.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/tryexcept.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/umlauts.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/library_demo.dpr +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/package_demo.dpk +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/program_demo.dpr +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_advanced.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_attributes.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_basic.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_consumer.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_generics.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_inheritance.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_math.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_properties.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_sections.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_statements.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_types.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_unresolved.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/delphi/unit_with.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/Legacy.csx +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/Modern.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/legacy.hpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/legacy.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/legacy.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/modern.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/modern.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/fixtures/polyglot/modern.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-03.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-11.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-14.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-17.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-20.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-23.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-98.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-gnu-stable.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/cpp/cpp-msvc-stable.cpp +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-1.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-10.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-11.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-12.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-13.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-14.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-2.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-3.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-4.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-5.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-6.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-7.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-8.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/csharp/csharp-9.cs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-10-2006.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-11-2007.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-12-2009.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-13-2010.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-14-xe-2011.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-15-xe2-2012.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-16-xe3-2013.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-17-xe4-2013.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-18-xe5-2013.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-19-xe6-2014.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-20-xe7-2014.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-21-xe8-2015.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-22-10-seattle-2015.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-23-10-1-berlin-2016.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-24-10-2-tokyo-2017.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-25-10-3-rio-2018.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-26-10-4-sydney-2020.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-27-11-alexandria-2021.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-28-12-athens-2023.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-29-13-florence-2024.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-7-7.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-8-8.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-9-2005.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/delphi/delphi-directives.pas +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-2-7.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-0.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-1.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-10.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-11.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-12.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-13.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-14.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-2.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-3.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-4.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-5.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-6.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-7.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-8.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/python/python-3-9.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/rust/rust-2015.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/rust/rust-2018.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/rust/rust-2021.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/fixtures/rust/rust-2024.rs +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/language_matrix/matrix.json +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_adapters.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_cli.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_delphi_adapter.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_ffi.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_github_performance_corpus.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_guideline_formatting.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_guidelines.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_integration_install.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_language_matrix.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_large_files.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_lsp_service.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_mapper_details.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_opencode_e2e_harness.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_openrouter_e2e_harness.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_performance_harness.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_protocol.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_rendering.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_worker.py +0 -0
- {agent_codinglanguage_mapper-1.1.2 → agent_codinglanguage_mapper-1.1.4}/tests/test_workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-codinglanguage-mapper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.4
|
|
4
4
|
Summary: Agent-focused semantic mapping and language services for mixed-language codebases.
|
|
5
5
|
Author: Dark Light
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -106,6 +106,12 @@ Parser-native nodes are intentionally private. Ranges are zero-based and half-op
|
|
|
106
106
|
|
|
107
107
|
`CodebaseMapper.open()` creates an outline index first. `inspect`, `focus`, and outgoing `callees`/`uses` traces load detail only for the selected source file. Incoming `references`/`callers`/`used_by` traces load the remaining workspace detail because their evidence can originate in any indexed file. Parsed detail and focus remain resident for the mapper session. The same optimized path is used for small and large files.
|
|
108
108
|
|
|
109
|
+
Batch consumers that only need the complete outline should use
|
|
110
|
+
`snapshot = CodebaseMapper.index(".")`. This one-shot path returns the same deterministic
|
|
111
|
+
`WorkspaceSnapshot` without retaining source buffers, parser outlines, or the interactive refresh
|
|
112
|
+
cache after indexing. It is intended for inventory and documentation pipelines over very large
|
|
113
|
+
repositories.
|
|
114
|
+
|
|
109
115
|
The private session index retains each parser-native outline tree, its source buffer, a source digest, and a lightweight file fingerprint. A detail upgrade therefore queries the existing tree instead of rereading or reparsing every indexed source. When an indexed source changes during a worker session, the mapper rebuilds the outline snapshot, updates `workspace_revision`, clears stale detail/focus state, and invalidates old cursors before answering the next request. Parser-native nodes never appear in the public result types.
|
|
110
116
|
|
|
111
117
|
## CLI
|
|
@@ -59,6 +59,12 @@ Parser-native nodes are intentionally private. Ranges are zero-based and half-op
|
|
|
59
59
|
|
|
60
60
|
`CodebaseMapper.open()` creates an outline index first. `inspect`, `focus`, and outgoing `callees`/`uses` traces load detail only for the selected source file. Incoming `references`/`callers`/`used_by` traces load the remaining workspace detail because their evidence can originate in any indexed file. Parsed detail and focus remain resident for the mapper session. The same optimized path is used for small and large files.
|
|
61
61
|
|
|
62
|
+
Batch consumers that only need the complete outline should use
|
|
63
|
+
`snapshot = CodebaseMapper.index(".")`. This one-shot path returns the same deterministic
|
|
64
|
+
`WorkspaceSnapshot` without retaining source buffers, parser outlines, or the interactive refresh
|
|
65
|
+
cache after indexing. It is intended for inventory and documentation pipelines over very large
|
|
66
|
+
repositories.
|
|
67
|
+
|
|
62
68
|
The private session index retains each parser-native outline tree, its source buffer, a source digest, and a lightweight file fingerprint. A detail upgrade therefore queries the existing tree instead of rereading or reparsing every indexed source. When an indexed source changes during a worker session, the mapper rebuilds the outline snapshot, updates `workspace_revision`, clears stale detail/focus state, and invalidates old cursors before answering the next request. Parser-native nodes never appear in the public result types.
|
|
63
69
|
|
|
64
70
|
## CLI
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-codinglanguage-mapper"
|
|
7
|
-
version = "1.1.
|
|
7
|
+
version = "1.1.4"
|
|
8
8
|
description = "Agent-focused semantic mapping and language services for mixed-language codebases."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10,<3.15"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.1.4"
|
|
@@ -54,10 +54,7 @@ class WorkspaceIndexCache:
|
|
|
54
54
|
directories: tuple[tuple[str, int], ...] = ()
|
|
55
55
|
|
|
56
56
|
def sources_changed(self, root: Path) -> bool:
|
|
57
|
-
if any(
|
|
58
|
-
not _dependencies_unchanged(cached.dependency_stamps)
|
|
59
|
-
for cached in self.entries.values()
|
|
60
|
-
):
|
|
57
|
+
if any(not _dependencies_unchanged(cached.dependency_stamps) for cached in self.entries.values()):
|
|
61
58
|
return True
|
|
62
59
|
for relative, cached in self.entries.items():
|
|
63
60
|
path = root / relative
|
|
@@ -83,6 +80,67 @@ class WorkspaceIndexCache:
|
|
|
83
80
|
return new_inventory != self.inventory
|
|
84
81
|
|
|
85
82
|
|
|
83
|
+
def _deduplicate_parser_symbols(items: tuple[Symbol, ...]) -> tuple[Symbol, ...]:
|
|
84
|
+
"""Collapse identical symbols and C/C++ aliases for one concrete declaration."""
|
|
85
|
+
|
|
86
|
+
def declaration_key(item: Symbol) -> tuple[str, str, int, int]:
|
|
87
|
+
anchor = item.name_range or item.range
|
|
88
|
+
return (
|
|
89
|
+
item.qualified_name,
|
|
90
|
+
anchor.path,
|
|
91
|
+
anchor.start_line,
|
|
92
|
+
anchor.start_character,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
groups: dict[tuple[str, str, int, int], list[Symbol]] = defaultdict(list)
|
|
96
|
+
for item in items:
|
|
97
|
+
groups[declaration_key(item)].append(item)
|
|
98
|
+
emitted: set[tuple[str, str, int, int]] = set()
|
|
99
|
+
selected: list[Symbol] = []
|
|
100
|
+
concrete_kinds = {"class", "enum", "struct", "union"}
|
|
101
|
+
for item in items:
|
|
102
|
+
key = declaration_key(item)
|
|
103
|
+
if key in emitted:
|
|
104
|
+
continue
|
|
105
|
+
emitted.add(key)
|
|
106
|
+
group: list[Symbol] = []
|
|
107
|
+
identities: set[tuple[object, ...]] = set()
|
|
108
|
+
for candidate in groups[key]:
|
|
109
|
+
identity = (
|
|
110
|
+
candidate.name,
|
|
111
|
+
candidate.qualified_name,
|
|
112
|
+
candidate.kind,
|
|
113
|
+
candidate.language,
|
|
114
|
+
candidate.range,
|
|
115
|
+
candidate.project_id,
|
|
116
|
+
candidate.file_id,
|
|
117
|
+
candidate.signature,
|
|
118
|
+
candidate.native_kind,
|
|
119
|
+
candidate.parent_id,
|
|
120
|
+
candidate.name_range,
|
|
121
|
+
candidate.role,
|
|
122
|
+
)
|
|
123
|
+
if identity in identities:
|
|
124
|
+
continue
|
|
125
|
+
identities.add(identity)
|
|
126
|
+
group.append(candidate)
|
|
127
|
+
if group and group[0].language is Language.DELPHI:
|
|
128
|
+
logical: dict[tuple[str, str, str], Symbol] = {}
|
|
129
|
+
for candidate in group:
|
|
130
|
+
logical.setdefault(
|
|
131
|
+
(candidate.kind, candidate.role, candidate.parent_id),
|
|
132
|
+
candidate,
|
|
133
|
+
)
|
|
134
|
+
group = list(logical.values())
|
|
135
|
+
concrete = [candidate for candidate in group if candidate.kind in concrete_kinds]
|
|
136
|
+
aliases = [candidate for candidate in group if candidate.kind == "type_alias"]
|
|
137
|
+
if len(concrete) == 1 and aliases:
|
|
138
|
+
selected.append(concrete[0])
|
|
139
|
+
else:
|
|
140
|
+
selected.extend(group)
|
|
141
|
+
return tuple(selected)
|
|
142
|
+
|
|
143
|
+
|
|
86
144
|
def build_workspace_snapshot(
|
|
87
145
|
root: str | Path,
|
|
88
146
|
languages: Iterable[Language] | None = None,
|
|
@@ -108,9 +166,7 @@ def build_workspace_snapshot(
|
|
|
108
166
|
selected_detail_files = None if detail_files is None else {Path(item).as_posix() for item in detail_files}
|
|
109
167
|
incremental_detail = base_snapshot is not None and selected_detail_files is not None
|
|
110
168
|
base_files_by_path = (
|
|
111
|
-
{item.path: item for item in base_snapshot.files}
|
|
112
|
-
if incremental_detail and base_snapshot is not None
|
|
113
|
-
else {}
|
|
169
|
+
{item.path: item for item in base_snapshot.files} if incremental_detail and base_snapshot is not None else {}
|
|
114
170
|
)
|
|
115
171
|
base_references_by_path: dict[str, list[Reference]] = defaultdict(list)
|
|
116
172
|
base_relations_by_path: dict[str, list[Relation]] = defaultdict(list)
|
|
@@ -137,9 +193,8 @@ def build_workspace_snapshot(
|
|
|
137
193
|
for found in discovery.files:
|
|
138
194
|
relative = found.path.relative_to(workspace).as_posix()
|
|
139
195
|
include_detail = (
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
)
|
|
196
|
+
selected_detail_files is None or relative in selected_detail_files
|
|
197
|
+
) and found.path.suffix.casefold() != ".inc"
|
|
143
198
|
file_id = stable_id("file", found.project_id, relative)
|
|
144
199
|
project = projects_by_id[found.project_id]
|
|
145
200
|
delphi_config: DelphiProjectDiscovery | None = None
|
|
@@ -271,11 +326,7 @@ def build_workspace_snapshot(
|
|
|
271
326
|
else:
|
|
272
327
|
adapter = pooled_adapter
|
|
273
328
|
outline = adapter.parse_outline(relative, source)
|
|
274
|
-
result = (
|
|
275
|
-
adapter.resolve(adapter.parse_detail(relative, source, outline))
|
|
276
|
-
if include_detail
|
|
277
|
-
else outline
|
|
278
|
-
)
|
|
329
|
+
result = adapter.resolve(adapter.parse_detail(relative, source, outline)) if include_detail else outline
|
|
279
330
|
if index_cache is not None:
|
|
280
331
|
index_cache.entries[relative] = _CachedParse(
|
|
281
332
|
found.project_id,
|
|
@@ -292,8 +343,9 @@ def build_workspace_snapshot(
|
|
|
292
343
|
)
|
|
293
344
|
active_cache_paths.add(relative)
|
|
294
345
|
source_digests.append((relative, source_digest))
|
|
346
|
+
parsed_symbols = _deduplicate_parser_symbols(result.symbols)
|
|
295
347
|
normalized_symbols_list: list[Symbol] = []
|
|
296
|
-
for parsed_symbol in
|
|
348
|
+
for parsed_symbol in parsed_symbols:
|
|
297
349
|
normalized_range = _workspace_required_range(
|
|
298
350
|
workspace,
|
|
299
351
|
parsed_symbol.range,
|
|
@@ -304,10 +356,7 @@ def build_workspace_snapshot(
|
|
|
304
356
|
parsed_symbol.name_range,
|
|
305
357
|
workspace_path_cache,
|
|
306
358
|
)
|
|
307
|
-
if
|
|
308
|
-
normalized_range is parsed_symbol.range
|
|
309
|
-
and normalized_name_range is parsed_symbol.name_range
|
|
310
|
-
):
|
|
359
|
+
if normalized_range is parsed_symbol.range and normalized_name_range is parsed_symbol.name_range:
|
|
311
360
|
normalized_symbols_list.append(parsed_symbol)
|
|
312
361
|
else:
|
|
313
362
|
normalized_symbols_list.append(
|
|
@@ -320,7 +369,7 @@ def build_workspace_snapshot(
|
|
|
320
369
|
normalized_symbols = tuple(normalized_symbols_list)
|
|
321
370
|
ids = {
|
|
322
371
|
parsed_symbol.target_id: _workspace_symbol_id(found.project_id, file_id, normalized)
|
|
323
|
-
for parsed_symbol, normalized in zip(
|
|
372
|
+
for parsed_symbol, normalized in zip(parsed_symbols, normalized_symbols)
|
|
324
373
|
}
|
|
325
374
|
symbols.extend(
|
|
326
375
|
Symbol(
|
|
@@ -338,7 +387,7 @@ def build_workspace_snapshot(
|
|
|
338
387
|
normalized.name_range,
|
|
339
388
|
parsed_symbol.role,
|
|
340
389
|
)
|
|
341
|
-
for parsed_symbol, normalized in zip(
|
|
390
|
+
for parsed_symbol, normalized in zip(parsed_symbols, normalized_symbols)
|
|
342
391
|
)
|
|
343
392
|
for reference in result.references:
|
|
344
393
|
source_id = ids.get(reference.source_id, "")
|
|
@@ -363,7 +412,7 @@ def build_workspace_snapshot(
|
|
|
363
412
|
range=normalized_range,
|
|
364
413
|
)
|
|
365
414
|
)
|
|
366
|
-
local_symbols_by_id = {parsed_symbol.target_id: parsed_symbol for parsed_symbol in
|
|
415
|
+
local_symbols_by_id = {parsed_symbol.target_id: parsed_symbol for parsed_symbol in parsed_symbols}
|
|
367
416
|
for relation in result.relations:
|
|
368
417
|
relation_library = relation.target_library
|
|
369
418
|
relation_source = local_symbols_by_id.get(relation.source_id)
|
|
@@ -382,14 +431,12 @@ def build_workspace_snapshot(
|
|
|
382
431
|
target_id=ids.get(relation.target_id, ""),
|
|
383
432
|
target_library=relation_library,
|
|
384
433
|
evidence=tuple(
|
|
385
|
-
_workspace_required_range(workspace, value, workspace_path_cache)
|
|
386
|
-
for value in relation.evidence
|
|
434
|
+
_workspace_required_range(workspace, value, workspace_path_cache) for value in relation.evidence
|
|
387
435
|
),
|
|
388
436
|
)
|
|
389
437
|
)
|
|
390
438
|
problems.extend(
|
|
391
|
-
_workspace_problem(workspace, problem, relative, workspace_path_cache)
|
|
392
|
-
for problem in result.problems
|
|
439
|
+
_workspace_problem(workspace, problem, relative, workspace_path_cache) for problem in result.problems
|
|
393
440
|
)
|
|
394
441
|
|
|
395
442
|
inventory = workspace_inventory(workspace, scan=scan)
|
|
@@ -415,11 +462,7 @@ def build_workspace_snapshot(
|
|
|
415
462
|
relations=resolved_relations,
|
|
416
463
|
problems=tuple(problems),
|
|
417
464
|
source_digests=tuple(source_digests),
|
|
418
|
-
metadata_digests=tuple(
|
|
419
|
-
(relative, digest)
|
|
420
|
-
for relative, _modified, _size, digest in inventory
|
|
421
|
-
if digest
|
|
422
|
-
),
|
|
465
|
+
metadata_digests=tuple((relative, digest) for relative, _modified, _size, digest in inventory if digest),
|
|
423
466
|
)
|
|
424
467
|
|
|
425
468
|
|
|
@@ -554,24 +597,16 @@ def _discard_shadowed_fragment_results(
|
|
|
554
597
|
and owner_path == anchor.path
|
|
555
598
|
and (
|
|
556
599
|
source_key(symbol) in contextual_keys
|
|
557
|
-
or (
|
|
558
|
-
symbol.language is Language.DELPHI
|
|
559
|
-
and symbol.kind == "unit"
|
|
560
|
-
and symbol.name_range is None
|
|
561
|
-
)
|
|
600
|
+
or (symbol.language is Language.DELPHI and symbol.kind == "unit" and symbol.name_range is None)
|
|
562
601
|
)
|
|
563
602
|
):
|
|
564
603
|
discarded_ids.add(symbol.target_id)
|
|
565
604
|
kept_symbols = [item for item in symbols if item.target_id not in discarded_ids]
|
|
566
605
|
kept_references = [
|
|
567
|
-
item
|
|
568
|
-
for item in references
|
|
569
|
-
if item.source_id not in discarded_ids and item.target_id not in discarded_ids
|
|
606
|
+
item for item in references if item.source_id not in discarded_ids and item.target_id not in discarded_ids
|
|
570
607
|
]
|
|
571
608
|
kept_relations = [
|
|
572
|
-
item
|
|
573
|
-
for item in relations
|
|
574
|
-
if item.source_id not in discarded_ids and item.target_id not in discarded_ids
|
|
609
|
+
item for item in relations if item.source_id not in discarded_ids and item.target_id not in discarded_ids
|
|
575
610
|
]
|
|
576
611
|
return kept_symbols, kept_references, kept_relations
|
|
577
612
|
|
|
@@ -624,6 +659,7 @@ def _workspace_symbol_id(project_id: str, file_id: str, symbol: Symbol) -> str:
|
|
|
624
659
|
"symbol",
|
|
625
660
|
project_id,
|
|
626
661
|
file_id,
|
|
662
|
+
anchor.path,
|
|
627
663
|
symbol.qualified_name,
|
|
628
664
|
str(anchor.start_line),
|
|
629
665
|
str(anchor.start_character),
|
|
@@ -768,21 +804,15 @@ def _resolve_workspace(
|
|
|
768
804
|
and _is_abi_export_symbol(source)
|
|
769
805
|
and all(
|
|
770
806
|
item.target_id != source.target_id
|
|
771
|
-
for item in abi_exports[
|
|
772
|
-
(_normalize_library(relation.target_library), relation.target_name)
|
|
773
|
-
]
|
|
807
|
+
for item in abi_exports[(_normalize_library(relation.target_library), relation.target_name)]
|
|
774
808
|
)
|
|
775
809
|
):
|
|
776
810
|
library = _normalize_library(relation.target_library)
|
|
777
811
|
if library:
|
|
778
812
|
abi_exports[(library, relation.target_name)].append(source)
|
|
779
813
|
|
|
780
|
-
resolved_references = tuple(
|
|
781
|
-
|
|
782
|
-
)
|
|
783
|
-
resolved_relations = tuple(
|
|
784
|
-
_resolve_relation(item, by_name, abi_exports, by_id, visibility) for item in relations
|
|
785
|
-
)
|
|
814
|
+
resolved_references = tuple(_resolve_reference(item, by_name, by_id, visibility) for item in references)
|
|
815
|
+
resolved_relations = tuple(_resolve_relation(item, by_name, abi_exports, by_id, visibility) for item in relations)
|
|
786
816
|
return resolved_references, resolved_relations
|
|
787
817
|
|
|
788
818
|
|
|
@@ -924,11 +954,7 @@ def _workspace_visibility(
|
|
|
924
954
|
visibility: list[_ImportRule] = []
|
|
925
955
|
for reference in references:
|
|
926
956
|
owner = by_id.get(reference.source_id)
|
|
927
|
-
if
|
|
928
|
-
owner is None
|
|
929
|
-
or reference.reference_kind != "import"
|
|
930
|
-
or owner.kind not in {"module", "namespace", "unit"}
|
|
931
|
-
):
|
|
957
|
+
if owner is None or reference.reference_kind != "import" or owner.kind not in {"module", "namespace", "unit"}:
|
|
932
958
|
continue
|
|
933
959
|
visibility.append(
|
|
934
960
|
_ImportRule(
|
|
@@ -1009,7 +1035,7 @@ def _csharp_namespace(symbol: Symbol, by_id: dict[str, Symbol]) -> str:
|
|
|
1009
1035
|
if current.kind == "namespace":
|
|
1010
1036
|
qualified = current.qualified_name
|
|
1011
1037
|
module_prefix = f"{PurePosixPath(current.range.path).stem}."
|
|
1012
|
-
return qualified[len(module_prefix):] if qualified.startswith(module_prefix) else qualified
|
|
1038
|
+
return qualified[len(module_prefix) :] if qualified.startswith(module_prefix) else qualified
|
|
1013
1039
|
current = by_id.get(current.parent_id)
|
|
1014
1040
|
return ""
|
|
1015
1041
|
|
|
@@ -1053,7 +1079,7 @@ def _rule_exposes_candidate(
|
|
|
1053
1079
|
qualifier_parts = normalized_qualifier.split(".")
|
|
1054
1080
|
alias_parts = normalized_alias.split(".")
|
|
1055
1081
|
if qualifier_parts[: len(alias_parts)] == alias_parts and module_matches:
|
|
1056
|
-
remainder = ".".join(qualifier_parts[len(alias_parts):])
|
|
1082
|
+
remainder = ".".join(qualifier_parts[len(alias_parts) :])
|
|
1057
1083
|
return not remainder or _candidate_parent_scope(candidate, by_id).endswith(remainder)
|
|
1058
1084
|
|
|
1059
1085
|
if not rule.wildcard or not module_matches:
|
|
@@ -1065,9 +1091,7 @@ def _rule_exposes_candidate(
|
|
|
1065
1091
|
|
|
1066
1092
|
candidate_parent = _candidate_parent_scope(candidate, by_id)
|
|
1067
1093
|
if normalized_qualifier:
|
|
1068
|
-
expected_parent = ".".join(
|
|
1069
|
-
part for part in (rule.import_path, normalized_qualifier) if part
|
|
1070
|
-
)
|
|
1094
|
+
expected_parent = ".".join(part for part in (rule.import_path, normalized_qualifier) if part)
|
|
1071
1095
|
return candidate_parent == expected_parent
|
|
1072
1096
|
if rule.module_alias:
|
|
1073
1097
|
return candidate_parent == rule.import_path
|
|
@@ -141,7 +141,11 @@ class CodebaseMapper:
|
|
|
141
141
|
|
|
142
142
|
@classmethod
|
|
143
143
|
def open(cls, root: str | Path, languages: str | tuple[Language, ...] = "auto") -> "CodebaseMapper":
|
|
144
|
-
selected =
|
|
144
|
+
selected = (
|
|
145
|
+
None
|
|
146
|
+
if languages == "auto"
|
|
147
|
+
else tuple(Language(item) if isinstance(item, str) else item for item in languages)
|
|
148
|
+
)
|
|
145
149
|
index_cache = WorkspaceIndexCache()
|
|
146
150
|
return cls(
|
|
147
151
|
root,
|
|
@@ -151,6 +155,26 @@ class CodebaseMapper:
|
|
|
151
155
|
index_cache=index_cache,
|
|
152
156
|
)
|
|
153
157
|
|
|
158
|
+
@classmethod
|
|
159
|
+
def index(
|
|
160
|
+
cls,
|
|
161
|
+
root: str | Path,
|
|
162
|
+
languages: str | tuple[Language, ...] = "auto",
|
|
163
|
+
) -> WorkspaceSnapshot:
|
|
164
|
+
"""Build a complete outline snapshot without retaining an interactive cache."""
|
|
165
|
+
|
|
166
|
+
selected = (
|
|
167
|
+
None
|
|
168
|
+
if languages == "auto"
|
|
169
|
+
else tuple(Language(item) if isinstance(item, str) else item for item in languages)
|
|
170
|
+
)
|
|
171
|
+
return build_workspace_snapshot(
|
|
172
|
+
root,
|
|
173
|
+
selected,
|
|
174
|
+
detail_files=(),
|
|
175
|
+
index_cache=None,
|
|
176
|
+
)
|
|
177
|
+
|
|
154
178
|
def __enter__(self) -> "CodebaseMapper":
|
|
155
179
|
return self
|
|
156
180
|
|
|
@@ -189,10 +213,7 @@ class CodebaseMapper:
|
|
|
189
213
|
if (
|
|
190
214
|
request.file_id
|
|
191
215
|
and candidate.file_id != request.file_id
|
|
192
|
-
and (
|
|
193
|
-
requested_source is None
|
|
194
|
-
or Path(candidate.range.path).as_posix() != requested_source.path
|
|
195
|
-
)
|
|
216
|
+
and (requested_source is None or Path(candidate.range.path).as_posix() != requested_source.path)
|
|
196
217
|
):
|
|
197
218
|
continue
|
|
198
219
|
if request.languages and candidate.language not in request.languages:
|
|
@@ -273,11 +294,7 @@ class CodebaseMapper:
|
|
|
273
294
|
)
|
|
274
295
|
|
|
275
296
|
def _refresh_changed_sources(self) -> None:
|
|
276
|
-
if (
|
|
277
|
-
not self._lazy_details
|
|
278
|
-
or self._index_cache is None
|
|
279
|
-
or not self._index_cache.sources_changed(self.root)
|
|
280
|
-
):
|
|
297
|
+
if not self._lazy_details or self._index_cache is None or not self._index_cache.sources_changed(self.root):
|
|
281
298
|
return
|
|
282
299
|
self.snapshot = build_workspace_snapshot(
|
|
283
300
|
self.root,
|
|
@@ -351,7 +368,7 @@ class CodebaseMapper:
|
|
|
351
368
|
text_offset = self._decode_cursor(request)
|
|
352
369
|
if text_offset > len(full_text) or (request.cursor and text_offset == len(full_text)):
|
|
353
370
|
raise ProtocolError("cursor offset is invalid")
|
|
354
|
-
item[text_key] = full_text[text_offset:text_offset + _SOURCE_CHUNK_CHARS]
|
|
371
|
+
item[text_key] = full_text[text_offset : text_offset + _SOURCE_CHUNK_CHARS]
|
|
355
372
|
if text_key == "source":
|
|
356
373
|
line_offset = full_text[:text_offset].count("\n")
|
|
357
374
|
item["citation"] = f"{symbol.range.path}:{int(str(item['citation']).rsplit(':', 1)[1]) + line_offset}"
|
|
@@ -450,7 +467,7 @@ class CodebaseMapper:
|
|
|
450
467
|
low = middle + 1
|
|
451
468
|
else:
|
|
452
469
|
high = middle - 1
|
|
453
|
-
bounded[detail_key] = text[:max(0, high)]
|
|
470
|
+
bounded[detail_key] = text[: max(0, high)]
|
|
454
471
|
return bounded
|
|
455
472
|
|
|
456
473
|
for key in ("kind", "role", "project_id", "file_id", "qualified_name", "signature"):
|
|
@@ -487,9 +504,7 @@ class CodebaseMapper:
|
|
|
487
504
|
selected = [item for item in references if item.target_id in request_target_id_set]
|
|
488
505
|
return self._page_response(request, [_reference_mapping(item) for item in selected])
|
|
489
506
|
if relation in {"callers", "used_by"}:
|
|
490
|
-
target_ids = {
|
|
491
|
-
item.source_id for item in references if item.target_id in request_target_id_set
|
|
492
|
-
}
|
|
507
|
+
target_ids = {item.source_id for item in references if item.target_id in request_target_id_set}
|
|
493
508
|
target_ids.update(
|
|
494
509
|
item.source_id
|
|
495
510
|
for item in self.snapshot.relations
|
|
@@ -501,16 +516,12 @@ class CodebaseMapper:
|
|
|
501
516
|
return self._page_response(request, [_symbol_mapping(item) for item in caller_symbols])
|
|
502
517
|
if relation in {"callees", "uses"}:
|
|
503
518
|
target_ids = {
|
|
504
|
-
item.target_id
|
|
505
|
-
for item in references
|
|
506
|
-
if item.source_id in request_target_id_set and item.target_id
|
|
519
|
+
item.target_id for item in references if item.source_id in request_target_id_set and item.target_id
|
|
507
520
|
}
|
|
508
521
|
target_ids.update(
|
|
509
522
|
item.target_id
|
|
510
523
|
for item in self.snapshot.relations
|
|
511
|
-
if relation == "uses"
|
|
512
|
-
and item.source_id in request_target_id_set
|
|
513
|
-
and item.target_id
|
|
524
|
+
if relation == "uses" and item.source_id in request_target_id_set and item.target_id
|
|
514
525
|
)
|
|
515
526
|
callee_symbols = [
|
|
516
527
|
self.snapshot.symbols_by_id[item] for item in target_ids if item in self.snapshot.symbols_by_id
|
|
@@ -545,7 +556,7 @@ class CodebaseMapper:
|
|
|
545
556
|
start = self._decode_cursor(request)
|
|
546
557
|
selected: list[dict[str, object]] = []
|
|
547
558
|
used = 0
|
|
548
|
-
for item in items[start:start + request.max_items]:
|
|
559
|
+
for item in items[start : start + request.max_items]:
|
|
549
560
|
size = len(json.dumps(item, sort_keys=True, separators=(",", ":")))
|
|
550
561
|
if used + size > request.max_chars:
|
|
551
562
|
if not selected:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-codinglanguage-mapper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.4
|
|
4
4
|
Summary: Agent-focused semantic mapping and language services for mixed-language codebases.
|
|
5
5
|
Author: Dark Light
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -106,6 +106,12 @@ Parser-native nodes are intentionally private. Ranges are zero-based and half-op
|
|
|
106
106
|
|
|
107
107
|
`CodebaseMapper.open()` creates an outline index first. `inspect`, `focus`, and outgoing `callees`/`uses` traces load detail only for the selected source file. Incoming `references`/`callers`/`used_by` traces load the remaining workspace detail because their evidence can originate in any indexed file. Parsed detail and focus remain resident for the mapper session. The same optimized path is used for small and large files.
|
|
108
108
|
|
|
109
|
+
Batch consumers that only need the complete outline should use
|
|
110
|
+
`snapshot = CodebaseMapper.index(".")`. This one-shot path returns the same deterministic
|
|
111
|
+
`WorkspaceSnapshot` without retaining source buffers, parser outlines, or the interactive refresh
|
|
112
|
+
cache after indexing. It is intended for inventory and documentation pipelines over very large
|
|
113
|
+
repositories.
|
|
114
|
+
|
|
109
115
|
The private session index retains each parser-native outline tree, its source buffer, a source digest, and a lightweight file fingerprint. A detail upgrade therefore queries the existing tree instead of rereading or reparsing every indexed source. When an indexed source changes during a worker session, the mapper rebuilds the outline snapshot, updates `workspace_revision`, clears stale detail/focus state, and invalidates old cursors before answering the next request. Parser-native nodes never appear in the public result types.
|
|
110
116
|
|
|
111
117
|
## CLI
|