agent-codinglanguage-mapper 1.1.0__tar.gz → 1.1.2__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/.github/workflows/ci.yml +445 -0
- agent_codinglanguage_mapper-1.1.2/MANIFEST.in +12 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/PKG-INFO +23 -24
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/README.md +22 -23
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/pyproject.toml +1 -1
- agent_codinglanguage_mapper-1.1.2/scripts/audit_language_matrix.py +584 -0
- agent_codinglanguage_mapper-1.1.2/scripts/benchmark_large_workspaces.py +352 -0
- agent_codinglanguage_mapper-1.1.2/scripts/build_github_performance_corpus.py +279 -0
- agent_codinglanguage_mapper-1.1.2/scripts/evaluate_external_corpora.py +456 -0
- agent_codinglanguage_mapper-1.1.2/scripts/generate_language_matrix.py +312 -0
- agent_codinglanguage_mapper-1.1.2/scripts/run_opencode_e2e.py +2229 -0
- agent_codinglanguage_mapper-1.1.2/scripts/run_openrouter_e2e.py +2358 -0
- agent_codinglanguage_mapper-1.1.2/src/agent_codinglanguage_mapper/_version.py +1 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi.py +51 -30
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/preprocessor.py +55 -44
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/tree_sitter.py +223 -116
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/cli.py +8 -1
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/discovery.py +51 -32
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/indexer.py +185 -91
- agent_codinglanguage_mapper-1.1.2/src/agent_codinglanguage_mapper/integration.py +212 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/mapper.py +37 -10
- agent_codinglanguage_mapper-1.1.2/src/agent_codinglanguage_mapper/templates/opencode/agents/agent-codinglanguage-mapper.md +43 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/templates/opencode/plugins/codebase_map.ts +53 -1
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/templates/skill/SKILL.md +7 -7
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper.egg-info/PKG-INFO +23 -24
- agent_codinglanguage_mapper-1.1.2/src/agent_codinglanguage_mapper.egg-info/SOURCES.txt +227 -0
- agent_codinglanguage_mapper-1.1.2/tests/corpora.lock.json +188 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/runtime.lock.json +38 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/cpp/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/cpp/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/cpp/workspace/src/cache.cpp +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/csharp/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/csharp/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/csharp/workspace/src/RateService.cs +10 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/delphi/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/delphi/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/delphi/workspace/src/InventoryService.pas +18 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/guidelines/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/guidelines/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/guidelines/workspace/.editorconfig +8 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/guidelines/workspace/src/sample.py +2 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/mixed-ffi/golden.json +16 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/mixed-ffi/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/mixed-ffi/workspace/CMakeLists.txt +4 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/mixed-ffi/workspace/native/metrics.cpp +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/mixed-ffi/workspace/python/metrics_bridge.py +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/python/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/python/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/python/workspace/src/billing.py +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/rust/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/rust/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/e2e/scenarios/rust/workspace/src/lib.rs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/DeprecatedOnConst.pas +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/VariantRecordFieldAttributes.pas +17 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/alignedrecords.pas +26 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/constset.pas +21 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/deprecatedtype.pas +20 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/dottedtypes.pas +37 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/endtoken.pas +32 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/experimentals.pas +18 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/externalfunction.pas +9 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/finalizationinitializationexports.pas +53 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/forwardoverloaded.pas +19 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/forwardwithoutsemicolon.pas +20 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/genericconstraints.pas +26 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/genericinterfacemethoddelegation.pas +28 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/implementsgenerictype.pas +18 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/include file2.inc +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/includefile.inc +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/includefile.pas +17 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/managedrecords.pas +25 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/messagemethod.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/multiline.pas +24 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/nonalignedrecords.pas +25 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/numbers.pas +20 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/pointerchars.pas +28 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/properties.pas +24 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/strictvisibility.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/tryexcept.pas +54 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/umlauts.pas +0 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/legacy_snippets/whitespacearoundifdefcondition.pas +23 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/library_demo.dpr +20 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/package_demo.dpk +10 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/program_demo.dpr +11 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_advanced.pas +66 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_attributes.pas +25 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_basic.pas +17 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_consumer.pas +19 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_generics.pas +44 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_inheritance.pas +29 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_math.pas +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_properties.pas +45 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_sections.pas +19 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_statements.pas +52 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_types.pas +56 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_unresolved.pas +16 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/delphi/unit_with.pas +31 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/Legacy.csx +2 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/Modern.cs +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/legacy.hpp +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/legacy.py +4 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/legacy.rs +1 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/modern.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/modern.py +9 -0
- agent_codinglanguage_mapper-1.1.2/tests/fixtures/polyglot/modern.rs +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-03.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-11.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-14.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-17.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-20.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-23.cpp +9 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-98.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-gnu-stable.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/cpp/cpp-msvc-stable.cpp +6 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-1.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-10.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-11.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-12.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-13.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-14.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-2.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-3.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-4.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-5.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-6.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-7.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-8.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/csharp/csharp-9.cs +5 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-10-2006.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-11-2007.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-12-2009.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-13-2010.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-14-xe-2011.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-15-xe2-2012.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-16-xe3-2013.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-17-xe4-2013.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-18-xe5-2013.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-19-xe6-2014.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-20-xe7-2014.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-21-xe8-2015.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-22-10-seattle-2015.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-23-10-1-berlin-2016.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-24-10-2-tokyo-2017.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-25-10-3-rio-2018.pas +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-26-10-4-sydney-2020.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-27-11-alexandria-2021.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-28-12-athens-2023.pas +16 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-29-13-florence-2024.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-7-7.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-8-8.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-9-2005.pas +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/delphi/delphi-directives.pas +16 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-2-7.py +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-0.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-1.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-10.py +15 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-11.py +15 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-12.py +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-13.py +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-14.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-2.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-3.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-4.py +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-5.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-6.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-7.py +14 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-8.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/python/python-3-9.py +13 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/rust/rust-2015.rs +8 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/rust/rust-2018.rs +7 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/rust/rust-2021.rs +7 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/fixtures/rust/rust-2024.rs +8 -0
- agent_codinglanguage_mapper-1.1.2/tests/language_matrix/matrix.json +1548 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_adapters.py +244 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_cli.py +3 -1
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_delphi_adapter.py +128 -1
- agent_codinglanguage_mapper-1.1.2/tests/test_github_performance_corpus.py +204 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_indexer.py +127 -1
- agent_codinglanguage_mapper-1.1.2/tests/test_integration_install.py +357 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_language_matrix.py +6 -1
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_mapper_details.py +96 -6
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_opencode_e2e_harness.py +148 -25
- agent_codinglanguage_mapper-1.1.2/tests/test_openrouter_e2e_harness.py +4465 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_package_contract.py +39 -2
- agent_codinglanguage_mapper-1.1.2/tests/test_performance_harness.py +155 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_workspace.py +40 -0
- agent_codinglanguage_mapper-1.1.0/src/agent_codinglanguage_mapper/_version.py +0 -1
- agent_codinglanguage_mapper-1.1.0/src/agent_codinglanguage_mapper/integration.py +0 -187
- agent_codinglanguage_mapper-1.1.0/src/agent_codinglanguage_mapper.egg-info/SOURCES.txt +0 -68
- agent_codinglanguage_mapper-1.1.0/tests/test_integration_install.py +0 -196
- agent_codinglanguage_mapper-1.1.0/tests/test_performance_harness.py +0 -61
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/LICENSE +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/setup.cfg +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/__main__.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/comment_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/consts.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/grammar.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lark_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lark_tokens.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/nodes.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/parser.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/project_discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/project_indexer.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/semantic.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/semantic_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/source_reader.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/workspace.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/formatting.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/guidelines.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/lsp_service.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/models.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/protocol.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/rendering.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/worker.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper/workspace.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper.egg-info/dependency_links.txt +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper.egg-info/entry_points.txt +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper.egg-info/requires.txt +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/src/agent_codinglanguage_mapper.egg-info/top_level.txt +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_ffi.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_guideline_formatting.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_guidelines.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_large_files.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_lsp_service.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_protocol.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_rendering.py +0 -0
- {agent_codinglanguage_mapper-1.1.0 → agent_codinglanguage_mapper-1.1.2}/tests/test_worker.py +0 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
env:
|
|
12
|
+
PIP_DISABLE_PIP_VERSION_CHECK: "1"
|
|
13
|
+
PYTHONUTF8: "1"
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
name: Build release artifacts
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
timeout-minutes: 15
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Check out source
|
|
23
|
+
uses: actions/checkout@v7
|
|
24
|
+
|
|
25
|
+
- name: Set up Python 3.12
|
|
26
|
+
uses: actions/setup-python@v6
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.12"
|
|
29
|
+
|
|
30
|
+
- name: Install build tooling
|
|
31
|
+
run: python -m pip install "build>=1.2" "twine>=5"
|
|
32
|
+
|
|
33
|
+
- name: Build wheel and source distribution once
|
|
34
|
+
run: python -m build
|
|
35
|
+
|
|
36
|
+
- name: Validate distribution metadata
|
|
37
|
+
run: python -m twine check dist/*
|
|
38
|
+
|
|
39
|
+
- name: Validate package contents and write checksums
|
|
40
|
+
shell: bash
|
|
41
|
+
run: |
|
|
42
|
+
python - <<'PY'
|
|
43
|
+
from email.parser import BytesParser
|
|
44
|
+
import hashlib
|
|
45
|
+
from pathlib import Path
|
|
46
|
+
import tarfile
|
|
47
|
+
import zipfile
|
|
48
|
+
|
|
49
|
+
dist = Path("dist")
|
|
50
|
+
wheels = sorted(dist.glob("*.whl"))
|
|
51
|
+
sdists = sorted(dist.glob("*.tar.gz"))
|
|
52
|
+
assert len(wheels) == 1, f"expected one wheel, found {wheels}"
|
|
53
|
+
assert len(sdists) == 1, f"expected one sdist, found {sdists}"
|
|
54
|
+
|
|
55
|
+
expected_templates = {
|
|
56
|
+
"agent_codinglanguage_mapper/templates/skill/SKILL.md",
|
|
57
|
+
"agent_codinglanguage_mapper/templates/opencode/plugins/codebase_map.ts",
|
|
58
|
+
}
|
|
59
|
+
forbidden = ("python-delphi-lsp", "python_delphi_lsp", "delphi_lsp")
|
|
60
|
+
|
|
61
|
+
with zipfile.ZipFile(wheels[0]) as archive:
|
|
62
|
+
names = set(archive.namelist())
|
|
63
|
+
metadata_name = next(name for name in names if name.endswith(".dist-info/METADATA"))
|
|
64
|
+
metadata = BytesParser().parsebytes(archive.read(metadata_name))
|
|
65
|
+
assert metadata["Name"] == "agent-codinglanguage-mapper"
|
|
66
|
+
assert metadata["Version"] == "1.1.2"
|
|
67
|
+
assert metadata["Author"] == "Dark Light"
|
|
68
|
+
requirements = [value.lower() for value in metadata.get_all("Requires-Dist", [])]
|
|
69
|
+
assert not any(marker in value for marker in forbidden for value in requirements)
|
|
70
|
+
assert expected_templates <= names
|
|
71
|
+
assert all(archive.getinfo(name).file_size > 0 for name in expected_templates)
|
|
72
|
+
assert not any(marker in name.lower() for marker in forbidden for name in names)
|
|
73
|
+
for name in names:
|
|
74
|
+
if name.endswith(".py"):
|
|
75
|
+
source = archive.read(name).lower()
|
|
76
|
+
assert not any(marker.encode() in source for marker in forbidden), name
|
|
77
|
+
|
|
78
|
+
with tarfile.open(sdists[0], "r:gz") as archive:
|
|
79
|
+
members = [member for member in archive.getmembers() if member.isfile()]
|
|
80
|
+
names = {member.name for member in members}
|
|
81
|
+
pkg_info_name = next(name for name in names if name.count("/") == 1 and name.endswith("/PKG-INFO"))
|
|
82
|
+
pkg_info_stream = archive.extractfile(pkg_info_name)
|
|
83
|
+
assert pkg_info_stream is not None
|
|
84
|
+
metadata = BytesParser().parsebytes(pkg_info_stream.read())
|
|
85
|
+
assert metadata["Name"] == "agent-codinglanguage-mapper"
|
|
86
|
+
assert metadata["Version"] == "1.1.2"
|
|
87
|
+
assert metadata["Author"] == "Dark Light"
|
|
88
|
+
requirements = [value.lower() for value in metadata.get_all("Requires-Dist", [])]
|
|
89
|
+
assert not any(marker in value for marker in forbidden for value in requirements)
|
|
90
|
+
for template in expected_templates:
|
|
91
|
+
matches = [name for name in names if name.endswith(f"/{template}")]
|
|
92
|
+
assert len(matches) == 1, f"missing or duplicate sdist template: {template}"
|
|
93
|
+
member = archive.getmember(matches[0])
|
|
94
|
+
assert member.size > 0
|
|
95
|
+
assert not any(marker in name.lower() for marker in forbidden for name in names)
|
|
96
|
+
|
|
97
|
+
checksum_lines = []
|
|
98
|
+
for artifact in [*wheels, *sdists]:
|
|
99
|
+
digest = hashlib.sha256(artifact.read_bytes()).hexdigest()
|
|
100
|
+
checksum_lines.append(f"{digest} {artifact.name}")
|
|
101
|
+
(dist / "SHA256SUMS").write_text("\n".join(checksum_lines) + "\n", encoding="ascii")
|
|
102
|
+
PY
|
|
103
|
+
|
|
104
|
+
- name: Upload exact distribution artifacts
|
|
105
|
+
uses: actions/upload-artifact@v7
|
|
106
|
+
with:
|
|
107
|
+
name: python-distributions
|
|
108
|
+
path: |
|
|
109
|
+
dist/*.whl
|
|
110
|
+
dist/*.tar.gz
|
|
111
|
+
dist/SHA256SUMS
|
|
112
|
+
if-no-files-found: error
|
|
113
|
+
retention-days: 14
|
|
114
|
+
|
|
115
|
+
wheel-tests:
|
|
116
|
+
name: Wheel tests (${{ matrix.os }}, Python ${{ matrix.python-version }})
|
|
117
|
+
needs: build
|
|
118
|
+
runs-on: ${{ matrix.os }}
|
|
119
|
+
timeout-minutes: 25
|
|
120
|
+
strategy:
|
|
121
|
+
fail-fast: false
|
|
122
|
+
matrix:
|
|
123
|
+
os:
|
|
124
|
+
- ubuntu-latest
|
|
125
|
+
- macos-latest
|
|
126
|
+
- windows-latest
|
|
127
|
+
python-version:
|
|
128
|
+
- "3.10"
|
|
129
|
+
- "3.11"
|
|
130
|
+
- "3.12"
|
|
131
|
+
- "3.13"
|
|
132
|
+
- "3.14"
|
|
133
|
+
|
|
134
|
+
steps:
|
|
135
|
+
- name: Check out tests
|
|
136
|
+
uses: actions/checkout@v7
|
|
137
|
+
|
|
138
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
139
|
+
uses: actions/setup-python@v6
|
|
140
|
+
with:
|
|
141
|
+
python-version: ${{ matrix.python-version }}
|
|
142
|
+
|
|
143
|
+
- name: Download exact distribution artifacts
|
|
144
|
+
uses: actions/download-artifact@v8
|
|
145
|
+
with:
|
|
146
|
+
name: python-distributions
|
|
147
|
+
path: dist
|
|
148
|
+
|
|
149
|
+
- name: Verify artifact checksums
|
|
150
|
+
shell: bash
|
|
151
|
+
run: |
|
|
152
|
+
python - <<'PY'
|
|
153
|
+
import hashlib
|
|
154
|
+
from pathlib import Path
|
|
155
|
+
|
|
156
|
+
dist = Path("dist")
|
|
157
|
+
expected = {}
|
|
158
|
+
for line in (dist / "SHA256SUMS").read_text(encoding="ascii").splitlines():
|
|
159
|
+
digest, filename = line.split(maxsplit=1)
|
|
160
|
+
expected[filename] = digest
|
|
161
|
+
artifacts = sorted([*dist.glob("*.whl"), *dist.glob("*.tar.gz")])
|
|
162
|
+
assert len(artifacts) == 2
|
|
163
|
+
assert set(expected) == {artifact.name for artifact in artifacts}
|
|
164
|
+
for artifact in artifacts:
|
|
165
|
+
actual = hashlib.sha256(artifact.read_bytes()).hexdigest()
|
|
166
|
+
assert actual == expected[artifact.name], artifact.name
|
|
167
|
+
PY
|
|
168
|
+
|
|
169
|
+
- name: Install exact wheel and test tooling
|
|
170
|
+
shell: bash
|
|
171
|
+
run: |
|
|
172
|
+
python -m pip install --upgrade pip
|
|
173
|
+
python -m pip install dist/*.whl
|
|
174
|
+
python -m pip install "pytest>=8" "pytest-cov>=5" "tomli>=2; python_version < '3.11'"
|
|
175
|
+
|
|
176
|
+
- name: Verify imports use the installed wheel
|
|
177
|
+
shell: bash
|
|
178
|
+
env:
|
|
179
|
+
HF_DATASETS_OFFLINE: "1"
|
|
180
|
+
HF_HUB_OFFLINE: "1"
|
|
181
|
+
PIP_NO_INDEX: "1"
|
|
182
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
183
|
+
UV_OFFLINE: "1"
|
|
184
|
+
run: |
|
|
185
|
+
python - <<'PY'
|
|
186
|
+
from pathlib import Path
|
|
187
|
+
import agent_codinglanguage_mapper
|
|
188
|
+
|
|
189
|
+
imported = Path(agent_codinglanguage_mapper.__file__).resolve()
|
|
190
|
+
source = (Path.cwd() / "src").resolve()
|
|
191
|
+
assert source not in imported.parents, f"source-tree import detected: {imported}"
|
|
192
|
+
assert agent_codinglanguage_mapper.__version__ == "1.1.2"
|
|
193
|
+
PY
|
|
194
|
+
|
|
195
|
+
- name: Run offline package test gates
|
|
196
|
+
shell: bash
|
|
197
|
+
env:
|
|
198
|
+
HF_DATASETS_OFFLINE: "1"
|
|
199
|
+
HF_HUB_OFFLINE: "1"
|
|
200
|
+
OPENCODE_DISABLE_AUTOUPDATE: "1"
|
|
201
|
+
PIP_NO_INDEX: "1"
|
|
202
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
203
|
+
UV_OFFLINE: "1"
|
|
204
|
+
run: |
|
|
205
|
+
python -m pytest -q -o pythonpath= \
|
|
206
|
+
tests/test_adapters.py \
|
|
207
|
+
tests/test_cli.py \
|
|
208
|
+
tests/test_delphi_adapter.py \
|
|
209
|
+
tests/test_discovery.py \
|
|
210
|
+
tests/test_ffi.py \
|
|
211
|
+
tests/test_guideline_formatting.py \
|
|
212
|
+
tests/test_guidelines.py \
|
|
213
|
+
tests/test_indexer.py \
|
|
214
|
+
tests/test_integration_install.py \
|
|
215
|
+
tests/test_language_matrix.py \
|
|
216
|
+
tests/test_lsp_server.py \
|
|
217
|
+
tests/test_lsp_service.py \
|
|
218
|
+
tests/test_mapper_details.py \
|
|
219
|
+
tests/test_openrouter_e2e_harness.py \
|
|
220
|
+
tests/test_package_contract.py \
|
|
221
|
+
tests/test_protocol.py \
|
|
222
|
+
tests/test_rendering.py \
|
|
223
|
+
tests/test_worker.py \
|
|
224
|
+
tests/test_workspace.py
|
|
225
|
+
|
|
226
|
+
sdist-tests:
|
|
227
|
+
name: Source distribution tests (Ubuntu, Python 3.12)
|
|
228
|
+
needs: build
|
|
229
|
+
runs-on: ubuntu-latest
|
|
230
|
+
timeout-minutes: 25
|
|
231
|
+
|
|
232
|
+
steps:
|
|
233
|
+
- name: Check out tests
|
|
234
|
+
uses: actions/checkout@v7
|
|
235
|
+
|
|
236
|
+
- name: Set up Python 3.12
|
|
237
|
+
uses: actions/setup-python@v6
|
|
238
|
+
with:
|
|
239
|
+
python-version: "3.12"
|
|
240
|
+
|
|
241
|
+
- name: Download exact distribution artifacts
|
|
242
|
+
uses: actions/download-artifact@v8
|
|
243
|
+
with:
|
|
244
|
+
name: python-distributions
|
|
245
|
+
path: dist
|
|
246
|
+
|
|
247
|
+
- name: Verify artifact checksums and read sdist dependencies
|
|
248
|
+
shell: bash
|
|
249
|
+
run: |
|
|
250
|
+
python - <<'PY'
|
|
251
|
+
from email.parser import BytesParser
|
|
252
|
+
import hashlib
|
|
253
|
+
from pathlib import Path
|
|
254
|
+
import tarfile
|
|
255
|
+
|
|
256
|
+
dist = Path("dist")
|
|
257
|
+
expected = {}
|
|
258
|
+
for line in (dist / "SHA256SUMS").read_text(encoding="ascii").splitlines():
|
|
259
|
+
digest, filename = line.split(maxsplit=1)
|
|
260
|
+
expected[filename] = digest
|
|
261
|
+
artifacts = sorted([*dist.glob("*.whl"), *dist.glob("*.tar.gz")])
|
|
262
|
+
assert len(artifacts) == 2
|
|
263
|
+
assert set(expected) == {artifact.name for artifact in artifacts}
|
|
264
|
+
for artifact in artifacts:
|
|
265
|
+
actual = hashlib.sha256(artifact.read_bytes()).hexdigest()
|
|
266
|
+
assert actual == expected[artifact.name], artifact.name
|
|
267
|
+
|
|
268
|
+
sdists = sorted(dist.glob("*.tar.gz"))
|
|
269
|
+
assert len(sdists) == 1, f"expected one sdist, found {sdists}"
|
|
270
|
+
with tarfile.open(sdists[0], "r:gz") as archive:
|
|
271
|
+
pkg_info = next(
|
|
272
|
+
member
|
|
273
|
+
for member in archive.getmembers()
|
|
274
|
+
if member.isfile() and member.name.count("/") == 1 and member.name.endswith("/PKG-INFO")
|
|
275
|
+
)
|
|
276
|
+
stream = archive.extractfile(pkg_info)
|
|
277
|
+
assert stream is not None
|
|
278
|
+
metadata = BytesParser().parsebytes(stream.read())
|
|
279
|
+
requirements = metadata.get_all("Requires-Dist", [])
|
|
280
|
+
Path("sdist-runtime-requirements.txt").write_text(
|
|
281
|
+
"\n".join(requirements) + "\n",
|
|
282
|
+
encoding="utf-8",
|
|
283
|
+
)
|
|
284
|
+
PY
|
|
285
|
+
|
|
286
|
+
- name: Install sdist dependencies and test tooling
|
|
287
|
+
run: |
|
|
288
|
+
python -m pip install --upgrade pip
|
|
289
|
+
python -m pip install "setuptools>=77" wheel
|
|
290
|
+
python -m pip install -r sdist-runtime-requirements.txt
|
|
291
|
+
python -m pip install "pytest>=8" "pytest-cov>=5" "tomli>=2; python_version < '3.11'"
|
|
292
|
+
|
|
293
|
+
- name: Install the exact source distribution offline
|
|
294
|
+
env:
|
|
295
|
+
HF_DATASETS_OFFLINE: "1"
|
|
296
|
+
HF_HUB_OFFLINE: "1"
|
|
297
|
+
PIP_NO_INDEX: "1"
|
|
298
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
299
|
+
UV_OFFLINE: "1"
|
|
300
|
+
run: python -m pip install --no-build-isolation --no-cache-dir --no-deps dist/*.tar.gz
|
|
301
|
+
|
|
302
|
+
- name: Verify imports use the installed source distribution
|
|
303
|
+
shell: bash
|
|
304
|
+
env:
|
|
305
|
+
HF_DATASETS_OFFLINE: "1"
|
|
306
|
+
HF_HUB_OFFLINE: "1"
|
|
307
|
+
PIP_NO_INDEX: "1"
|
|
308
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
309
|
+
UV_OFFLINE: "1"
|
|
310
|
+
run: |
|
|
311
|
+
python - <<'PY'
|
|
312
|
+
import hashlib
|
|
313
|
+
from importlib.metadata import distribution
|
|
314
|
+
import json
|
|
315
|
+
from pathlib import Path
|
|
316
|
+
from urllib.parse import unquote, urlparse
|
|
317
|
+
import agent_codinglanguage_mapper
|
|
318
|
+
|
|
319
|
+
imported = Path(agent_codinglanguage_mapper.__file__).resolve()
|
|
320
|
+
source = (Path.cwd() / "src").resolve()
|
|
321
|
+
assert source not in imported.parents, f"source-tree import detected: {imported}"
|
|
322
|
+
assert agent_codinglanguage_mapper.__version__ == "1.1.2"
|
|
323
|
+
|
|
324
|
+
sdists = sorted(Path("dist").glob("*.tar.gz"))
|
|
325
|
+
assert len(sdists) == 1, f"expected one sdist, found {sdists}"
|
|
326
|
+
installed = distribution("agent-codinglanguage-mapper")
|
|
327
|
+
direct_url_text = installed.read_text("direct_url.json")
|
|
328
|
+
assert direct_url_text is not None, "pip did not record the installed archive"
|
|
329
|
+
direct_url = json.loads(direct_url_text)
|
|
330
|
+
installed_archive = Path(unquote(urlparse(direct_url["url"]).path)).name
|
|
331
|
+
assert installed_archive == sdists[0].name
|
|
332
|
+
expected_hash = hashlib.sha256(sdists[0].read_bytes()).hexdigest()
|
|
333
|
+
assert direct_url["archive_info"]["hash"] == f"sha256={expected_hash}"
|
|
334
|
+
PY
|
|
335
|
+
|
|
336
|
+
- name: Run offline source distribution test gates
|
|
337
|
+
shell: bash
|
|
338
|
+
env:
|
|
339
|
+
HF_DATASETS_OFFLINE: "1"
|
|
340
|
+
HF_HUB_OFFLINE: "1"
|
|
341
|
+
OPENCODE_DISABLE_AUTOUPDATE: "1"
|
|
342
|
+
PIP_NO_INDEX: "1"
|
|
343
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
344
|
+
UV_OFFLINE: "1"
|
|
345
|
+
run: |
|
|
346
|
+
python -m pytest -q -o pythonpath= \
|
|
347
|
+
tests/test_adapters.py \
|
|
348
|
+
tests/test_cli.py \
|
|
349
|
+
tests/test_delphi_adapter.py \
|
|
350
|
+
tests/test_discovery.py \
|
|
351
|
+
tests/test_ffi.py \
|
|
352
|
+
tests/test_guideline_formatting.py \
|
|
353
|
+
tests/test_guidelines.py \
|
|
354
|
+
tests/test_indexer.py \
|
|
355
|
+
tests/test_integration_install.py \
|
|
356
|
+
tests/test_language_matrix.py \
|
|
357
|
+
tests/test_lsp_server.py \
|
|
358
|
+
tests/test_lsp_service.py \
|
|
359
|
+
tests/test_mapper_details.py \
|
|
360
|
+
tests/test_openrouter_e2e_harness.py \
|
|
361
|
+
tests/test_package_contract.py \
|
|
362
|
+
tests/test_protocol.py \
|
|
363
|
+
tests/test_rendering.py \
|
|
364
|
+
tests/test_worker.py \
|
|
365
|
+
tests/test_workspace.py
|
|
366
|
+
|
|
367
|
+
quality:
|
|
368
|
+
name: Static, audit, and performance gates
|
|
369
|
+
needs: build
|
|
370
|
+
runs-on: ubuntu-latest
|
|
371
|
+
timeout-minutes: 30
|
|
372
|
+
|
|
373
|
+
steps:
|
|
374
|
+
- name: Check out source
|
|
375
|
+
uses: actions/checkout@v7
|
|
376
|
+
|
|
377
|
+
- name: Set up Python 3.12
|
|
378
|
+
uses: actions/setup-python@v6
|
|
379
|
+
with:
|
|
380
|
+
python-version: "3.12"
|
|
381
|
+
|
|
382
|
+
- name: Download exact distribution artifacts
|
|
383
|
+
uses: actions/download-artifact@v8
|
|
384
|
+
with:
|
|
385
|
+
name: python-distributions
|
|
386
|
+
path: dist
|
|
387
|
+
|
|
388
|
+
- name: Install exact wheel and quality tooling
|
|
389
|
+
run: |
|
|
390
|
+
python -m pip install --upgrade pip
|
|
391
|
+
python -m pip install dist/*.whl
|
|
392
|
+
python -m pip install "mypy==1.19.1" "pytest>=8" "ruff>=0.6" "tomli>=2"
|
|
393
|
+
|
|
394
|
+
- name: Run Ruff
|
|
395
|
+
run: python -m ruff check src tests scripts
|
|
396
|
+
|
|
397
|
+
- name: Run strict mypy
|
|
398
|
+
run: python -m mypy src scripts
|
|
399
|
+
|
|
400
|
+
- name: Audit the formal language matrix offline
|
|
401
|
+
env:
|
|
402
|
+
HF_DATASETS_OFFLINE: "1"
|
|
403
|
+
HF_HUB_OFFLINE: "1"
|
|
404
|
+
PIP_NO_INDEX: "1"
|
|
405
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
406
|
+
UV_OFFLINE: "1"
|
|
407
|
+
run: python scripts/audit_language_matrix.py
|
|
408
|
+
|
|
409
|
+
- name: Run source-only harness tests offline
|
|
410
|
+
env:
|
|
411
|
+
HF_DATASETS_OFFLINE: "1"
|
|
412
|
+
HF_HUB_OFFLINE: "1"
|
|
413
|
+
OPENCODE_DISABLE_AUTOUPDATE: "1"
|
|
414
|
+
PIP_NO_INDEX: "1"
|
|
415
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
416
|
+
UV_OFFLINE: "1"
|
|
417
|
+
run: |
|
|
418
|
+
python -m pytest -q -o pythonpath= \
|
|
419
|
+
tests/test_large_files.py \
|
|
420
|
+
tests/test_opencode_e2e_harness.py \
|
|
421
|
+
tests/test_openrouter_e2e_harness.py \
|
|
422
|
+
tests/test_performance_harness.py
|
|
423
|
+
|
|
424
|
+
- name: Enforce large-workspace performance budgets
|
|
425
|
+
env:
|
|
426
|
+
HF_DATASETS_OFFLINE: "1"
|
|
427
|
+
HF_HUB_OFFLINE: "1"
|
|
428
|
+
PIP_NO_INDEX: "1"
|
|
429
|
+
TRANSFORMERS_OFFLINE: "1"
|
|
430
|
+
UV_OFFLINE: "1"
|
|
431
|
+
run: |
|
|
432
|
+
python scripts/benchmark_large_workspaces.py \
|
|
433
|
+
--lines 100000 \
|
|
434
|
+
--samples 5 \
|
|
435
|
+
--report-only \
|
|
436
|
+
--output ci-artifacts/large-workspace-benchmark.json
|
|
437
|
+
|
|
438
|
+
- name: Upload benchmark report
|
|
439
|
+
if: always()
|
|
440
|
+
uses: actions/upload-artifact@v7
|
|
441
|
+
with:
|
|
442
|
+
name: large-workspace-benchmark
|
|
443
|
+
path: ci-artifacts/large-workspace-benchmark.json
|
|
444
|
+
if-no-files-found: warn
|
|
445
|
+
retention-days: 14
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
include .github/workflows/ci.yml
|
|
2
|
+
include scripts/audit_language_matrix.py
|
|
3
|
+
include scripts/benchmark_large_workspaces.py
|
|
4
|
+
include scripts/build_github_performance_corpus.py
|
|
5
|
+
include scripts/evaluate_external_corpora.py
|
|
6
|
+
include scripts/generate_language_matrix.py
|
|
7
|
+
include scripts/run_opencode_e2e.py
|
|
8
|
+
include scripts/run_openrouter_e2e.py
|
|
9
|
+
include tests/corpora.lock.json
|
|
10
|
+
recursive-include tests/e2e *.cpp *.cs *.json *.pas *.py *.rs *.txt .editorconfig CMakeLists.txt
|
|
11
|
+
recursive-include tests/fixtures *.cpp *.cs *.csx *.dpk *.dpr *.hpp *.inc *.pas *.py *.rs
|
|
12
|
+
recursive-include tests/language_matrix *.cpp *.cs *.json *.pas *.py *.rs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-codinglanguage-mapper
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.2
|
|
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
|
|
@@ -319,50 +319,49 @@ Example generic client configuration:
|
|
|
319
319
|
|
|
320
320
|
## OpenCode Integration
|
|
321
321
|
|
|
322
|
-
Install the
|
|
322
|
+
Install the package-named skill, Markdown agent, and plugin into a repository:
|
|
323
323
|
|
|
324
324
|
```bash
|
|
325
|
-
codinglanguage-mapper opencode install --target .
|
|
325
|
+
codinglanguage-mapper opencode install --target .
|
|
326
326
|
```
|
|
327
327
|
|
|
328
328
|
This creates:
|
|
329
329
|
|
|
330
330
|
```text
|
|
331
|
-
.agents/skills/
|
|
331
|
+
.agents/skills/agent-codinglanguage-mapper/SKILL.md
|
|
332
|
+
.opencode/agents/agent-codinglanguage-mapper.md
|
|
332
333
|
.opencode/plugins/codebase_map.ts
|
|
333
|
-
opencode.json
|
|
334
334
|
```
|
|
335
335
|
|
|
336
|
-
The generated `
|
|
336
|
+
The generated `agent-codinglanguage-mapper` agent denies all tools by default and permits only its package-named skill, the legacy `codebase_map` tool, `code_guidelines`, three fixed phase tools (`codebase_map_open`, `codebase_map_focus`, and `codebase_map_inspect_declaration`), and five fixed-language find tools: `codebase_map_find_python`, `codebase_map_find_rust`, `codebase_map_find_csharp`, `codebase_map_find_delphi`, and `codebase_map_find_cpp`. Each fixed-language tool requires `query`, accepts the optional `project_id`, `file_id`, `cursor`, `max_items`, and `max_chars` bounds, and injects its own Protocol 3 `find` action and language. It defaults to at most 5 results and 4,000 characters, while callers can explicitly raise either bound when needed. The fixed open, focus, and declaration-inspect tools likewise inject their Protocol 3 action and inspect detail. These smaller schemas prevent a model from corrupting or omitting required phase fields and keep follow-up model context bounded.
|
|
337
|
+
|
|
338
|
+
All mapper tools share the same persistent worker. The plugin maps the active OpenCode directory, serializes Protocol 3 requests, applies a hard timeout, reports bounded worker `stderr`, restarts after failure, and preserves focus plus warm parser indexes across short idle gaps. It stops the worker when the session is deleted or after 60 seconds without another mapper request.
|
|
339
|
+
|
|
340
|
+
The installer never reads or changes `opencode.json`; user configuration remains
|
|
341
|
+
user-owned. The deprecated `--write`, `--write-config`, and `--write-agent`
|
|
342
|
+
compatibility flags are accepted, but the Markdown agent is installed by
|
|
343
|
+
default and those flags do not enable configuration writes.
|
|
337
344
|
|
|
338
345
|
`code_guidelines` exposes four actions: `detect`, `audit`, `patch`, and `apply`. The first three are read-only. `apply` is rejected unless its request contains `write: true`, so the agent must inspect a patch before it can opt into mutation.
|
|
339
346
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
"permission": {
|
|
343
|
-
"*": "deny",
|
|
344
|
-
"skill": "allow",
|
|
345
|
-
"codebase_map": "allow",
|
|
346
|
-
"code_guidelines": "allow"
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
```
|
|
347
|
+
The agent's YAML frontmatter contains its restricted permissions; no matching
|
|
348
|
+
JSON agent block is required.
|
|
350
349
|
|
|
351
350
|
Run it with:
|
|
352
351
|
|
|
353
352
|
```bash
|
|
354
353
|
opencode run \
|
|
355
|
-
--agent
|
|
356
|
-
"Find
|
|
354
|
+
--agent agent-codinglanguage-mapper \
|
|
355
|
+
"Find the C# PaymentService and cite its declaration. Use the installed skill and the fixed open, C# find, focus, and declaration-inspect tools."
|
|
357
356
|
```
|
|
358
357
|
|
|
359
358
|
A typical investigation should:
|
|
360
359
|
|
|
361
|
-
1. Call `
|
|
362
|
-
2.
|
|
363
|
-
3. Select a returned `target_id` with `
|
|
364
|
-
4.
|
|
365
|
-
5. Use `trace` only for explicit Protocol 3 relations.
|
|
360
|
+
1. Call `codebase_map_open`.
|
|
361
|
+
2. When one language is known, call its `codebase_map_find_<language>` tool with a narrow `query` and optional project/file filters. Use legacy `codebase_map` with `action: find` for mixed-language searches.
|
|
362
|
+
3. Select a returned `target_id` with `codebase_map_focus`.
|
|
363
|
+
4. Call `codebase_map_inspect_declaration` without arguments for the focused declaration. Use legacy `codebase_map` only when another inspect detail is required.
|
|
364
|
+
5. Use legacy `codebase_map` with `trace` only for explicit Protocol 3 relations.
|
|
366
365
|
6. Follow `next_cursor` when evidence is truncated.
|
|
367
366
|
|
|
368
367
|
A formatting task should first call `code_guidelines` with `detect`, then `audit`, then `patch`. The agent can either improve source-aware findings itself or apply the package plan with `action: apply` and `write: true`. It must finish with another `audit`; it must never use `apply` merely to discover what would change.
|
|
@@ -390,7 +389,7 @@ Private Linux CI records and uploads the same measurements with `--report-only`;
|
|
|
390
389
|
|
|
391
390
|
## Offline Ornith/OpenCode Evaluation
|
|
392
391
|
|
|
393
|
-
The repository contains seven release E2Es: Python, Rust, C#, Delphi, C++, a mixed-language FFI workspace, and a coding-guidelines write workflow. They use the pinned local Ornith revision through vLLM 0.23.0 and OpenCode 1.17.18. The guidelines scenario must detect and audit the profile, inspect a patch, explicitly apply it with `write: true`, and finish with a clean audit. The Python scenario continues the same session through a headless OpenCode server and must inspect the focused symbol in a second turn without another `find` or explicit `target_id`, proving that the plugin preserves its warm worker. It then opens an independent session whose target-less `inspect` must be empty, proving that focus never crosses chat boundaries. The harness fails if a model shard is missing, a download is attempted, an unapproved tool is called, any assistant message uses a different agent, model, or provider, a worker survives server shutdown, or required evidence is absent.
|
|
392
|
+
The repository contains seven release E2Es: Python, Rust, C#, Delphi, C++, a mixed-language FFI workspace, and a coding-guidelines write workflow. They use the pinned local Ornith revision through vLLM 0.23.0 and OpenCode 1.17.18. The guidelines scenario must detect and audit the profile, inspect a patch, explicitly apply it with `write: true`, and finish with a clean audit. The Python scenario continues the same session through a headless OpenCode server and must inspect the focused symbol in a second turn without another `find` or explicit `target_id`, proving that the plugin preserves its warm worker. It then opens an independent session whose target-less `inspect` must be empty, proving that focus never crosses chat boundaries. The harness preflights the exact legacy-plus-fixed tool surface and accepts semantic evidence produced by either a fixed-language find tool or the legacy mapper. It fails if a model shard is missing, a download is attempted, an unapproved tool is called, any assistant message uses a different agent, model, or provider, a worker survives server shutdown, or required evidence is absent.
|
|
394
393
|
|
|
395
394
|
Inspect the plan without launching a model:
|
|
396
395
|
|
|
@@ -272,50 +272,49 @@ Example generic client configuration:
|
|
|
272
272
|
|
|
273
273
|
## OpenCode Integration
|
|
274
274
|
|
|
275
|
-
Install the
|
|
275
|
+
Install the package-named skill, Markdown agent, and plugin into a repository:
|
|
276
276
|
|
|
277
277
|
```bash
|
|
278
|
-
codinglanguage-mapper opencode install --target .
|
|
278
|
+
codinglanguage-mapper opencode install --target .
|
|
279
279
|
```
|
|
280
280
|
|
|
281
281
|
This creates:
|
|
282
282
|
|
|
283
283
|
```text
|
|
284
|
-
.agents/skills/
|
|
284
|
+
.agents/skills/agent-codinglanguage-mapper/SKILL.md
|
|
285
|
+
.opencode/agents/agent-codinglanguage-mapper.md
|
|
285
286
|
.opencode/plugins/codebase_map.ts
|
|
286
|
-
opencode.json
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
The generated `
|
|
289
|
+
The generated `agent-codinglanguage-mapper` agent denies all tools by default and permits only its package-named skill, the legacy `codebase_map` tool, `code_guidelines`, three fixed phase tools (`codebase_map_open`, `codebase_map_focus`, and `codebase_map_inspect_declaration`), and five fixed-language find tools: `codebase_map_find_python`, `codebase_map_find_rust`, `codebase_map_find_csharp`, `codebase_map_find_delphi`, and `codebase_map_find_cpp`. Each fixed-language tool requires `query`, accepts the optional `project_id`, `file_id`, `cursor`, `max_items`, and `max_chars` bounds, and injects its own Protocol 3 `find` action and language. It defaults to at most 5 results and 4,000 characters, while callers can explicitly raise either bound when needed. The fixed open, focus, and declaration-inspect tools likewise inject their Protocol 3 action and inspect detail. These smaller schemas prevent a model from corrupting or omitting required phase fields and keep follow-up model context bounded.
|
|
290
|
+
|
|
291
|
+
All mapper tools share the same persistent worker. The plugin maps the active OpenCode directory, serializes Protocol 3 requests, applies a hard timeout, reports bounded worker `stderr`, restarts after failure, and preserves focus plus warm parser indexes across short idle gaps. It stops the worker when the session is deleted or after 60 seconds without another mapper request.
|
|
292
|
+
|
|
293
|
+
The installer never reads or changes `opencode.json`; user configuration remains
|
|
294
|
+
user-owned. The deprecated `--write`, `--write-config`, and `--write-agent`
|
|
295
|
+
compatibility flags are accepted, but the Markdown agent is installed by
|
|
296
|
+
default and those flags do not enable configuration writes.
|
|
290
297
|
|
|
291
298
|
`code_guidelines` exposes four actions: `detect`, `audit`, `patch`, and `apply`. The first three are read-only. `apply` is rejected unless its request contains `write: true`, so the agent must inspect a patch before it can opt into mutation.
|
|
292
299
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
"permission": {
|
|
296
|
-
"*": "deny",
|
|
297
|
-
"skill": "allow",
|
|
298
|
-
"codebase_map": "allow",
|
|
299
|
-
"code_guidelines": "allow"
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
```
|
|
300
|
+
The agent's YAML frontmatter contains its restricted permissions; no matching
|
|
301
|
+
JSON agent block is required.
|
|
303
302
|
|
|
304
303
|
Run it with:
|
|
305
304
|
|
|
306
305
|
```bash
|
|
307
306
|
opencode run \
|
|
308
|
-
--agent
|
|
309
|
-
"Find
|
|
307
|
+
--agent agent-codinglanguage-mapper \
|
|
308
|
+
"Find the C# PaymentService and cite its declaration. Use the installed skill and the fixed open, C# find, focus, and declaration-inspect tools."
|
|
310
309
|
```
|
|
311
310
|
|
|
312
311
|
A typical investigation should:
|
|
313
312
|
|
|
314
|
-
1. Call `
|
|
315
|
-
2.
|
|
316
|
-
3. Select a returned `target_id` with `
|
|
317
|
-
4.
|
|
318
|
-
5. Use `trace` only for explicit Protocol 3 relations.
|
|
313
|
+
1. Call `codebase_map_open`.
|
|
314
|
+
2. When one language is known, call its `codebase_map_find_<language>` tool with a narrow `query` and optional project/file filters. Use legacy `codebase_map` with `action: find` for mixed-language searches.
|
|
315
|
+
3. Select a returned `target_id` with `codebase_map_focus`.
|
|
316
|
+
4. Call `codebase_map_inspect_declaration` without arguments for the focused declaration. Use legacy `codebase_map` only when another inspect detail is required.
|
|
317
|
+
5. Use legacy `codebase_map` with `trace` only for explicit Protocol 3 relations.
|
|
319
318
|
6. Follow `next_cursor` when evidence is truncated.
|
|
320
319
|
|
|
321
320
|
A formatting task should first call `code_guidelines` with `detect`, then `audit`, then `patch`. The agent can either improve source-aware findings itself or apply the package plan with `action: apply` and `write: true`. It must finish with another `audit`; it must never use `apply` merely to discover what would change.
|
|
@@ -343,7 +342,7 @@ Private Linux CI records and uploads the same measurements with `--report-only`;
|
|
|
343
342
|
|
|
344
343
|
## Offline Ornith/OpenCode Evaluation
|
|
345
344
|
|
|
346
|
-
The repository contains seven release E2Es: Python, Rust, C#, Delphi, C++, a mixed-language FFI workspace, and a coding-guidelines write workflow. They use the pinned local Ornith revision through vLLM 0.23.0 and OpenCode 1.17.18. The guidelines scenario must detect and audit the profile, inspect a patch, explicitly apply it with `write: true`, and finish with a clean audit. The Python scenario continues the same session through a headless OpenCode server and must inspect the focused symbol in a second turn without another `find` or explicit `target_id`, proving that the plugin preserves its warm worker. It then opens an independent session whose target-less `inspect` must be empty, proving that focus never crosses chat boundaries. The harness fails if a model shard is missing, a download is attempted, an unapproved tool is called, any assistant message uses a different agent, model, or provider, a worker survives server shutdown, or required evidence is absent.
|
|
345
|
+
The repository contains seven release E2Es: Python, Rust, C#, Delphi, C++, a mixed-language FFI workspace, and a coding-guidelines write workflow. They use the pinned local Ornith revision through vLLM 0.23.0 and OpenCode 1.17.18. The guidelines scenario must detect and audit the profile, inspect a patch, explicitly apply it with `write: true`, and finish with a clean audit. The Python scenario continues the same session through a headless OpenCode server and must inspect the focused symbol in a second turn without another `find` or explicit `target_id`, proving that the plugin preserves its warm worker. It then opens an independent session whose target-less `inspect` must be empty, proving that focus never crosses chat boundaries. The harness preflights the exact legacy-plus-fixed tool surface and accepts semantic evidence produced by either a fixed-language find tool or the legacy mapper. It fails if a model shard is missing, a download is attempted, an unapproved tool is called, any assistant message uses a different agent, model, or provider, a worker survives server shutdown, or required evidence is absent.
|
|
347
346
|
|
|
348
347
|
Inspect the plan without launching a model:
|
|
349
348
|
|
|
@@ -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.2"
|
|
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"
|