agent-codinglanguage-mapper 1.1.1__tar.gz → 1.1.3__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.3/.github/workflows/ci.yml +445 -0
- agent_codinglanguage_mapper-1.1.3/MANIFEST.in +12 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/PKG-INFO +11 -9
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/README.md +10 -8
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/pyproject.toml +1 -1
- agent_codinglanguage_mapper-1.1.3/scripts/audit_language_matrix.py +584 -0
- agent_codinglanguage_mapper-1.1.3/scripts/benchmark_large_workspaces.py +352 -0
- agent_codinglanguage_mapper-1.1.3/scripts/build_github_performance_corpus.py +279 -0
- agent_codinglanguage_mapper-1.1.3/scripts/evaluate_external_corpora.py +456 -0
- agent_codinglanguage_mapper-1.1.3/scripts/generate_language_matrix.py +312 -0
- agent_codinglanguage_mapper-1.1.3/scripts/run_opencode_e2e.py +2229 -0
- agent_codinglanguage_mapper-1.1.3/scripts/run_openrouter_e2e.py +2358 -0
- agent_codinglanguage_mapper-1.1.3/src/agent_codinglanguage_mapper/_version.py +1 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi.py +51 -30
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/preprocessor.py +55 -44
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/tree_sitter.py +223 -116
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/discovery.py +51 -32
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/indexer.py +230 -141
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/mapper.py +37 -10
- agent_codinglanguage_mapper-1.1.3/src/agent_codinglanguage_mapper/templates/opencode/agents/agent-codinglanguage-mapper.md +43 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/templates/opencode/plugins/codebase_map.ts +53 -1
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/templates/skill/SKILL.md +6 -6
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper.egg-info/PKG-INFO +11 -9
- agent_codinglanguage_mapper-1.1.3/src/agent_codinglanguage_mapper.egg-info/SOURCES.txt +227 -0
- agent_codinglanguage_mapper-1.1.3/tests/corpora.lock.json +188 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/runtime.lock.json +38 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/cpp/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/cpp/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/cpp/workspace/src/cache.cpp +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/csharp/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/csharp/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/csharp/workspace/src/RateService.cs +10 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/delphi/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/delphi/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/delphi/workspace/src/InventoryService.pas +18 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/guidelines/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/guidelines/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/guidelines/workspace/.editorconfig +8 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/guidelines/workspace/src/sample.py +2 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/mixed-ffi/golden.json +16 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/mixed-ffi/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/mixed-ffi/workspace/CMakeLists.txt +4 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/mixed-ffi/workspace/native/metrics.cpp +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/mixed-ffi/workspace/python/metrics_bridge.py +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/python/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/python/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/python/workspace/src/billing.py +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/rust/golden.json +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/rust/prompt.txt +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/e2e/scenarios/rust/workspace/src/lib.rs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/DeprecatedOnConst.pas +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/VariantRecordFieldAttributes.pas +17 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/alignedrecords.pas +26 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/constset.pas +21 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/deprecatedtype.pas +20 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/dottedtypes.pas +37 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/endtoken.pas +32 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/experimentals.pas +18 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/externalfunction.pas +9 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/finalizationinitializationexports.pas +53 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/forwardoverloaded.pas +19 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/forwardwithoutsemicolon.pas +20 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/genericconstraints.pas +26 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/genericinterfacemethoddelegation.pas +28 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/implementsgenerictype.pas +18 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/include file2.inc +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/includefile.inc +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/includefile.pas +17 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/managedrecords.pas +25 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/messagemethod.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/multiline.pas +24 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/nonalignedrecords.pas +25 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/numbers.pas +20 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/pointerchars.pas +28 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/properties.pas +24 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/strictvisibility.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/tryexcept.pas +54 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/umlauts.pas +0 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/legacy_snippets/whitespacearoundifdefcondition.pas +23 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/library_demo.dpr +20 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/package_demo.dpk +10 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/program_demo.dpr +11 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_advanced.pas +66 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_attributes.pas +25 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_basic.pas +17 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_consumer.pas +19 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_generics.pas +44 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_inheritance.pas +29 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_math.pas +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_properties.pas +45 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_sections.pas +19 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_statements.pas +52 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_types.pas +56 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_unresolved.pas +16 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/delphi/unit_with.pas +31 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/Legacy.csx +2 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/Modern.cs +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/legacy.hpp +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/legacy.py +4 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/legacy.rs +1 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/modern.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/modern.py +9 -0
- agent_codinglanguage_mapper-1.1.3/tests/fixtures/polyglot/modern.rs +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-03.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-11.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-14.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-17.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-20.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-23.cpp +9 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-98.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-gnu-stable.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/cpp/cpp-msvc-stable.cpp +6 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-1.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-10.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-11.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-12.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-13.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-14.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-2.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-3.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-4.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-5.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-6.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-7.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-8.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/csharp/csharp-9.cs +5 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-10-2006.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-11-2007.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-12-2009.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-13-2010.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-14-xe-2011.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-15-xe2-2012.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-16-xe3-2013.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-17-xe4-2013.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-18-xe5-2013.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-19-xe6-2014.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-20-xe7-2014.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-21-xe8-2015.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-22-10-seattle-2015.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-23-10-1-berlin-2016.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-24-10-2-tokyo-2017.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-25-10-3-rio-2018.pas +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-26-10-4-sydney-2020.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-27-11-alexandria-2021.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-28-12-athens-2023.pas +16 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-29-13-florence-2024.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-7-7.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-8-8.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-9-2005.pas +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/delphi/delphi-directives.pas +16 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-2-7.py +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-0.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-1.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-10.py +15 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-11.py +15 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-12.py +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-13.py +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-14.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-2.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-3.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-4.py +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-5.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-6.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-7.py +14 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-8.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/python/python-3-9.py +13 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/rust/rust-2015.rs +8 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/rust/rust-2018.rs +7 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/rust/rust-2021.rs +7 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/fixtures/rust/rust-2024.rs +8 -0
- agent_codinglanguage_mapper-1.1.3/tests/language_matrix/matrix.json +1548 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_adapters.py +244 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_delphi_adapter.py +128 -1
- agent_codinglanguage_mapper-1.1.3/tests/test_github_performance_corpus.py +204 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_indexer.py +180 -135
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_integration_install.py +61 -3
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_language_matrix.py +6 -1
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_mapper_details.py +96 -6
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_opencode_e2e_harness.py +138 -15
- agent_codinglanguage_mapper-1.1.3/tests/test_openrouter_e2e_harness.py +4465 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_package_contract.py +45 -12
- agent_codinglanguage_mapper-1.1.3/tests/test_performance_harness.py +155 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_workspace.py +40 -0
- agent_codinglanguage_mapper-1.1.1/src/agent_codinglanguage_mapper/_version.py +0 -1
- agent_codinglanguage_mapper-1.1.1/src/agent_codinglanguage_mapper/templates/opencode/agents/agent-codinglanguage-mapper.md +0 -16
- agent_codinglanguage_mapper-1.1.1/src/agent_codinglanguage_mapper.egg-info/SOURCES.txt +0 -69
- agent_codinglanguage_mapper-1.1.1/tests/test_performance_harness.py +0 -61
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/LICENSE +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/setup.cfg +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/__main__.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/__init__.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/comment_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/consts.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/grammar.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lark_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lark_tokens.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/nodes.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/parser.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/project_discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/project_indexer.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/semantic.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/semantic_builder.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/source_reader.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/adapters/delphi_frontend/workspace.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/cli.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/formatting.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/guidelines.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/integration.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/lsp_service.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/models.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/protocol.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/rendering.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/worker.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper/workspace.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper.egg-info/dependency_links.txt +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper.egg-info/entry_points.txt +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper.egg-info/requires.txt +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/src/agent_codinglanguage_mapper.egg-info/top_level.txt +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_cli.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_discovery.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_ffi.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_guideline_formatting.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_guidelines.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_large_files.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_lsp_server.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_lsp_service.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_protocol.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/tests/test_rendering.py +0 -0
- {agent_codinglanguage_mapper-1.1.1 → agent_codinglanguage_mapper-1.1.3}/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.3
|
|
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
|
|
@@ -333,7 +333,9 @@ This creates:
|
|
|
333
333
|
.opencode/plugins/codebase_map.ts
|
|
334
334
|
```
|
|
335
335
|
|
|
336
|
-
The generated `agent-codinglanguage-mapper` agent denies all tools by default and permits only its package-named skill, `codebase_map`, and `
|
|
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.
|
|
337
339
|
|
|
338
340
|
The installer never reads or changes `opencode.json`; user configuration remains
|
|
339
341
|
user-owned. The deprecated `--write`, `--write-config`, and `--write-agent`
|
|
@@ -350,16 +352,16 @@ Run it with:
|
|
|
350
352
|
```bash
|
|
351
353
|
opencode run \
|
|
352
354
|
--agent agent-codinglanguage-mapper \
|
|
353
|
-
"Find
|
|
355
|
+
"Find the C# PaymentService and cite its declaration. Use the installed skill and the fixed open, C# find, focus, and declaration-inspect tools."
|
|
354
356
|
```
|
|
355
357
|
|
|
356
358
|
A typical investigation should:
|
|
357
359
|
|
|
358
|
-
1. Call `
|
|
359
|
-
2.
|
|
360
|
-
3. Select a returned `target_id` with `
|
|
361
|
-
4.
|
|
362
|
-
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.
|
|
363
365
|
6. Follow `next_cursor` when evidence is truncated.
|
|
364
366
|
|
|
365
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.
|
|
@@ -387,7 +389,7 @@ Private Linux CI records and uploads the same measurements with `--report-only`;
|
|
|
387
389
|
|
|
388
390
|
## Offline Ornith/OpenCode Evaluation
|
|
389
391
|
|
|
390
|
-
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.
|
|
391
393
|
|
|
392
394
|
Inspect the plan without launching a model:
|
|
393
395
|
|
|
@@ -286,7 +286,9 @@ This creates:
|
|
|
286
286
|
.opencode/plugins/codebase_map.ts
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
The generated `agent-codinglanguage-mapper` agent denies all tools by default and permits only its package-named skill, `codebase_map`, and `
|
|
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.
|
|
290
292
|
|
|
291
293
|
The installer never reads or changes `opencode.json`; user configuration remains
|
|
292
294
|
user-owned. The deprecated `--write`, `--write-config`, and `--write-agent`
|
|
@@ -303,16 +305,16 @@ Run it with:
|
|
|
303
305
|
```bash
|
|
304
306
|
opencode run \
|
|
305
307
|
--agent agent-codinglanguage-mapper \
|
|
306
|
-
"Find
|
|
308
|
+
"Find the C# PaymentService and cite its declaration. Use the installed skill and the fixed open, C# find, focus, and declaration-inspect tools."
|
|
307
309
|
```
|
|
308
310
|
|
|
309
311
|
A typical investigation should:
|
|
310
312
|
|
|
311
|
-
1. Call `
|
|
312
|
-
2.
|
|
313
|
-
3. Select a returned `target_id` with `
|
|
314
|
-
4.
|
|
315
|
-
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.
|
|
316
318
|
6. Follow `next_cursor` when evidence is truncated.
|
|
317
319
|
|
|
318
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.
|
|
@@ -340,7 +342,7 @@ Private Linux CI records and uploads the same measurements with `--report-only`;
|
|
|
340
342
|
|
|
341
343
|
## Offline Ornith/OpenCode Evaluation
|
|
342
344
|
|
|
343
|
-
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.
|
|
344
346
|
|
|
345
347
|
Inspect the plan without launching a model:
|
|
346
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.3"
|
|
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"
|