python-delphi-lsp 3.0.0__tar.gz → 3.1.1__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.
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/.github/workflows/ci.yml +9 -1
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/MANIFEST.in +2 -0
- {python_delphi_lsp-3.0.0/python_delphi_lsp.egg-info → python_delphi_lsp-3.1.1}/PKG-INFO +132 -5
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/README.md +128 -4
- python_delphi_lsp-3.1.1/delphi_lsp/_version.py +1 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cache.py +128 -18
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cli.py +172 -6
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_context.py +164 -43
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_layers.py +211 -62
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_metrics.py +138 -1
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_relations.py +32 -5
- python_delphi_lsp-3.1.1/delphi_lsp/agent_wiki.py +1435 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_workspace.py +72 -10
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/delphiast_parser.py +89 -18
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/lsp_server.py +291 -56
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/metrics.py +11 -4
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/navigation_cache.py +56 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/parser.py +8 -1
- python_delphi_lsp-3.1.1/delphi_lsp/project_config.py +266 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/project_discovery.py +226 -27
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/project_indexer.py +42 -4
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/semantic.py +0 -2
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/semantic_builder.py +51 -14
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/workspace.py +20 -4
- python_delphi_lsp-3.1.1/docs/release-2.3.0.md +47 -0
- python_delphi_lsp-3.1.1/docs/release-2.3.3.md +13 -0
- python_delphi_lsp-3.1.1/docs/release-3.0.0.md +64 -0
- python_delphi_lsp-3.1.1/docs/release-3.1.0.md +70 -0
- python_delphi_lsp-3.1.1/docs/release-3.1.1.md +46 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +360 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +152 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +48 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-23-2.3-performance.md +385 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-23-bounded-cli-cache-daemon.md +921 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +102 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +539 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +480 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +53 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +58 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +16 -0
- python_delphi_lsp-3.1.1/docs/superpowers/plans/2026-07-27-project-path-configuration.md +96 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +213 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-17-large-codebase-performance-design.md +47 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-22-conditional-outline-ranges-design.md +61 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-23-2.3-performance-design.md +180 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-23-bounded-cli-cache-daemon-design.md +230 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-23-delphiast-python-backend-design.md +125 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-23-parallel-cache-prewarming-design.md +231 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +197 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-24-repository-default-navigation-design.md +44 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-27-okf-memory-progress-design.md +87 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-27-okf-wiki-export-design.md +65 -0
- python_delphi_lsp-3.1.1/docs/superpowers/specs/2026-07-27-project-path-configuration-design.md +91 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/pyproject.toml +8 -1
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1/python_delphi_lsp.egg-info}/PKG-INFO +132 -5
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/SOURCES.txt +35 -0
- python_delphi_lsp-3.1.1/python_delphi_lsp.egg-info/dependency_links.txt +1 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/requires.txt +5 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_cache.py +110 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_cli_errors.py +142 -1
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_codebase.py +163 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_context.py +119 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_metrics.py +76 -0
- python_delphi_lsp-3.1.1/tests/test_agent_wiki.py +682 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_worker.py +100 -7
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_workspace.py +23 -0
- python_delphi_lsp-3.1.1/tests/test_delphiast_parser.py +332 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_lsp_features.py +45 -1
- python_delphi_lsp-3.1.1/tests/test_lsp_server.py +309 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_lsp_support.py +74 -5
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_metrics.py +36 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_navigation_cache.py +32 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_package_metadata.py +47 -3
- python_delphi_lsp-3.1.1/tests/test_project_config.py +210 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_project_discovery.py +318 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_project_indexer.py +132 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_semantic.py +1 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_workspace.py +66 -0
- python_delphi_lsp-3.0.0/delphi_lsp/_version.py +0 -1
- python_delphi_lsp-3.0.0/tests/test_delphiast_parser.py +0 -121
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/LICENSE +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/__init__.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cpg.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cpg_builder.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_protocol.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_templates.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/binary.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/comment_builder.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/delphiast_lexer.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/delphiast_tokens.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/grammar.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/lark_builder.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/lark_tokens.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/nodes.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/parallel_outline.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/parser_backend.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/preprocessor.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/progress.py +0 -0
- /python_delphi_lsp-3.0.0/python_delphi_lsp.egg-info/dependency_links.txt → /python_delphi_lsp-3.1.1/delphi_lsp/py.typed +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/opencode.json +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/audit_delphi_language_features.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/benchmark_cpg.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/benchmark_parallel_cache.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/run_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/setup.cfg +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/corpora.performance.lock.json +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_cpg.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_protocol.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_relations.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_bootstrap_vllm_opencode.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_delphiast_lexer.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_delphiast_native_compatibility.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_delphiast_semantic_compatibility.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_diagnostics.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_language_feature_matrix.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_legacy_snippets.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_opencode_config.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_opencode_probe.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_ornith_cache_prepare.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_parallel_outline.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_parser.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_parser_backends.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_preprocessor.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_progress.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_release_evidence.py +0 -0
- {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_vllm_start_script.py +0 -0
|
@@ -9,6 +9,7 @@ jobs:
|
|
|
9
9
|
test:
|
|
10
10
|
name: ${{ matrix.os }} / Python ${{ matrix.python }}
|
|
11
11
|
runs-on: ${{ matrix.os }}
|
|
12
|
+
timeout-minutes: 20
|
|
12
13
|
strategy:
|
|
13
14
|
fail-fast: false
|
|
14
15
|
matrix:
|
|
@@ -28,6 +29,7 @@ jobs:
|
|
|
28
29
|
package:
|
|
29
30
|
name: Build and validate distributions
|
|
30
31
|
runs-on: ubuntu-latest
|
|
32
|
+
timeout-minutes: 20
|
|
31
33
|
steps:
|
|
32
34
|
- uses: actions/checkout@v4
|
|
33
35
|
- uses: actions/setup-python@v5
|
|
@@ -38,6 +40,12 @@ jobs:
|
|
|
38
40
|
- run: python -m pip install --upgrade pip build twine
|
|
39
41
|
- run: python -m build
|
|
40
42
|
- run: python -m twine check dist/*
|
|
43
|
+
- name: Run tests from unpacked sdist
|
|
44
|
+
run: |
|
|
45
|
+
mkdir sdist-smoke
|
|
46
|
+
tar -xzf dist/*.tar.gz -C sdist-smoke --strip-components=1
|
|
47
|
+
python -m pip install "./sdist-smoke[test]"
|
|
48
|
+
python -m pytest sdist-smoke/tests
|
|
41
49
|
- run: python -m venv smoke-venv
|
|
42
50
|
- run: smoke-venv/bin/python -m pip install dist/*.whl
|
|
43
|
-
- run: smoke-venv/bin/python -c "import delphi_lsp; print(delphi_lsp.__name__)"
|
|
51
|
+
- run: smoke-venv/bin/python -c "import delphi_lsp, pathlib; package = pathlib.Path(delphi_lsp.__file__).parent; assert (package / 'py.typed').is_file(); print(delphi_lsp.__name__)"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
include LICENSE
|
|
2
2
|
include README.md
|
|
3
|
+
include delphi_lsp/py.typed
|
|
3
4
|
include opencode.json
|
|
4
5
|
include .github/workflows/ci.yml
|
|
5
6
|
include scripts/check_ornith_cache.py
|
|
@@ -21,4 +22,5 @@ include scripts/start_ornith_vllm.sh
|
|
|
21
22
|
include scripts/summarize_opencode_request_payloads.py
|
|
22
23
|
include scripts/ollama/ornith-lspctx.Modelfile
|
|
23
24
|
include tests/corpora.performance.lock.json
|
|
25
|
+
recursive-include docs *.md
|
|
24
26
|
recursive-include tests *.py *.pas *.inc *.dpr *.dpk
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-delphi-lsp
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.1.1
|
|
4
4
|
Summary: Python Delphi/Object Pascal parser, semantic indexer, and language server.
|
|
5
5
|
Author: Dark Light
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -24,25 +24,28 @@ License-File: LICENSE
|
|
|
24
24
|
Requires-Dist: lark>=1.1.9
|
|
25
25
|
Requires-Dist: pygls<2.0,>=1.3.0
|
|
26
26
|
Requires-Dist: lsprotocol>=2023.0.1
|
|
27
|
+
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
27
28
|
Requires-Dist: watchfiles<2.0,>=1.2
|
|
28
29
|
Provides-Extra: lsp
|
|
29
30
|
Requires-Dist: pygls<2.0,>=1.3.0; extra == "lsp"
|
|
30
31
|
Requires-Dist: lsprotocol>=2023.0.1; extra == "lsp"
|
|
31
32
|
Provides-Extra: test
|
|
32
33
|
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
34
|
+
Requires-Dist: pytest-timeout>=2.3.0; extra == "test"
|
|
33
35
|
Provides-Extra: dev
|
|
34
36
|
Requires-Dist: build>=1.2.0; extra == "dev"
|
|
35
37
|
Requires-Dist: twine>=5.0.0; extra == "dev"
|
|
36
38
|
Requires-Dist: pygls<2.0,>=1.3.0; extra == "dev"
|
|
37
39
|
Requires-Dist: lsprotocol>=2023.0.1; extra == "dev"
|
|
38
40
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-timeout>=2.3.0; extra == "dev"
|
|
39
42
|
Dynamic: license-file
|
|
40
43
|
|
|
41
44
|
# Python Delphi LSP
|
|
42
45
|
|
|
43
46
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
44
47
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
45
|
-
Version 3.
|
|
48
|
+
Version 3.1.1 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
46
49
|
|
|
47
50
|
## Install and quick start
|
|
48
51
|
|
|
@@ -190,15 +193,19 @@ not guessed.
|
|
|
190
193
|
|
|
191
194
|
```text
|
|
192
195
|
delphi-lsp-agent cache start --root PATH [--project-file FILE] [--max-memory 512M]
|
|
196
|
+
[--max-disk-cache 512M]
|
|
193
197
|
[--workers auto|N] [--startup-timeout 120]
|
|
194
198
|
[--idle-timeout 1800]
|
|
195
199
|
delphi-lsp-agent cache status --root PATH [--format text|json]
|
|
196
200
|
delphi-lsp-agent cache stop --root PATH
|
|
201
|
+
delphi-lsp-agent cache clear --root PATH
|
|
197
202
|
delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
|
|
198
203
|
[--query TEXT] [--format markdown|json] [--deep-projects]
|
|
199
204
|
[--workers auto|N]
|
|
200
205
|
delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
|
|
201
206
|
[--workers auto|N]
|
|
207
|
+
delphi-lsp-agent wiki export --root PATH [--project-file FILE] [--out DIRECTORY]
|
|
208
|
+
[--workers auto|N] [--force] [--quiet]
|
|
202
209
|
delphi-lsp-agent query --root PATH ACTION [VALUE]
|
|
203
210
|
[--project-id ID] [--detail summary|declaration|members|context|body|implementations]
|
|
204
211
|
[--relation references|callers|callees|uses|used_by|inherits|implements]
|
|
@@ -217,12 +224,67 @@ The `cache` commands manage one daemon per canonical root. Use these:
|
|
|
217
224
|
delphi-lsp-agent cache start --root PATH
|
|
218
225
|
delphi-lsp-agent cache status --root PATH
|
|
219
226
|
delphi-lsp-agent cache stop --root PATH
|
|
227
|
+
delphi-lsp-agent cache clear --root PATH
|
|
220
228
|
```
|
|
221
229
|
|
|
222
230
|
`cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
|
|
223
231
|
`cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
|
|
224
232
|
`cache stop` outputs stop status JSON and may include warnings on stderr.
|
|
233
|
+
`cache clear` stops the daemon and removes persistent navigation shards.
|
|
225
234
|
`query` outputs Protocol v3 JSON responses and writes warnings to stderr.
|
|
235
|
+
For `index`, a relative `--out` is resolved below `--root`; the default is
|
|
236
|
+
`.delphi-lsp/agent-index/index.json`.
|
|
237
|
+
|
|
238
|
+
### Open Knowledge Format wiki export
|
|
239
|
+
|
|
240
|
+
Export the complete unique knowledge represented by the layered codebase views
|
|
241
|
+
as a portable Markdown wiki:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
delphi-lsp-agent wiki export --root PATH --out codebase-wiki
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
When `--out` is relative, it is resolved below `--root`; the default is
|
|
248
|
+
`.delphi-lsp/wiki`. The command builds the semantic index once, deep-indexes
|
|
249
|
+
main projects, calculates workspace and unit metrics, and writes:
|
|
250
|
+
|
|
251
|
+
- an OKF 0.2 root `index.md`;
|
|
252
|
+
- linked project, unit, and symbol concepts;
|
|
253
|
+
- declaration and implementation source fragments;
|
|
254
|
+
- resolved and unresolved semantic references;
|
|
255
|
+
- discovery/project problems and complete metric records;
|
|
256
|
+
- Protocol v3, relation, CPG, cache, and layer-mapping reference concepts.
|
|
257
|
+
|
|
258
|
+
Without `--project-file`, the exporter selects repository main projects:
|
|
259
|
+
non-example project entries in the repository root, or, when none exist, the
|
|
260
|
+
shallowest configured `.dproj` entries. Recursively discovered example,
|
|
261
|
+
sample, test, benchmark, and vendor projects are not promoted to project
|
|
262
|
+
pages. A repository `.delphi-lsp.toml` can replace this heuristic with the
|
|
263
|
+
explicit monorepo selection described below. With `--project-file`, only that
|
|
264
|
+
explicit entry is selected. Project
|
|
265
|
+
dependency traversal and include loading are confined to the repository root,
|
|
266
|
+
so Delphi SDK and other external standard units are recorded as unresolved
|
|
267
|
+
dependencies instead of being parsed. If no main project can be identified,
|
|
268
|
+
the exporter falls back to the repository source inventory without inventing
|
|
269
|
+
project pages.
|
|
270
|
+
|
|
271
|
+
Every non-index concept is UTF-8 Markdown with YAML frontmatter and a non-empty
|
|
272
|
+
`type`. Readable filenames include a stable digest, so overloads and equal names
|
|
273
|
+
from different units remain distinct even on case-insensitive filesystems.
|
|
274
|
+
Output order and content are deterministic. The finished bundle replaces the
|
|
275
|
+
destination only after generation succeeds; an existing non-empty destination
|
|
276
|
+
requires `--force`, and unsafe root/ancestor/symlink targets are rejected.
|
|
277
|
+
|
|
278
|
+
Pages are streamed to disk, decoded source retention is bounded, and metrics
|
|
279
|
+
process source paths without materializing the entire source corpus. Lazy CPG
|
|
280
|
+
subgraphs are documented rather than eagerly multiplied across all possible
|
|
281
|
+
targets; a focused live `cpg` query remains the bounded way to obtain one graph.
|
|
282
|
+
The bundle structure follows the
|
|
283
|
+
[Open Knowledge Format 0.2 specification](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md).
|
|
284
|
+
|
|
285
|
+
Progress is shown on `stderr` while the final machine-readable JSON summary
|
|
286
|
+
remains the only record on `stdout`. Redirected progress is throttled to
|
|
287
|
+
milestones; pass `--quiet` to suppress it completely.
|
|
226
288
|
|
|
227
289
|
```bash
|
|
228
290
|
delphi-lsp-agent query --root PATH find TCustomer
|
|
@@ -232,9 +294,14 @@ delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
|
|
|
232
294
|
delphi-lsp-agent query --root PATH cpg TARGET_ID --graph full --direction out --depth 4
|
|
233
295
|
delphi-lsp-agent query --root PATH metrics
|
|
234
296
|
delphi-lsp-agent query --root PATH metrics UNIT_QUERY
|
|
297
|
+
delphi-lsp-agent query --root PATH metrics --target-id UNIT_TARGET_ID
|
|
235
298
|
delphi-lsp-agent cache status --root PATH --format json
|
|
236
299
|
```
|
|
237
300
|
|
|
301
|
+
A `target_v2_...` positional value for `metrics` is also recognized as a unit
|
|
302
|
+
target ID; other positional values remain case-insensitive unit-name or path
|
|
303
|
+
queries.
|
|
304
|
+
|
|
238
305
|
The repository root is sufficient even when it contains many projects:
|
|
239
306
|
|
|
240
307
|
```bash
|
|
@@ -243,7 +310,9 @@ delphi-lsp-agent query --root PATH find TCustomer
|
|
|
243
310
|
```
|
|
244
311
|
|
|
245
312
|
This prewarms one bounded repository navigation index and requires no project
|
|
246
|
-
selection. A `.dproj` is optional.
|
|
313
|
+
selection. A `.dproj` is optional. For repeatable monorepo selection, add a
|
|
314
|
+
`.delphi-lsp.toml` file as described below. Pass one project explicitly when
|
|
315
|
+
its project-specific compiler
|
|
247
316
|
settings and `MainSource` should define the index:
|
|
248
317
|
|
|
249
318
|
```bash
|
|
@@ -261,6 +330,61 @@ delphi-lsp-agent query --root PATH focus --project-id PROJECT_ID
|
|
|
261
330
|
|
|
262
331
|
Selecting a project this way also prewarms its navigation cache.
|
|
263
332
|
|
|
333
|
+
### TOML project selection for monorepos
|
|
334
|
+
|
|
335
|
+
Place `.delphi-lsp.toml` in the repository root to define which `.dpr`,
|
|
336
|
+
`.dpk`, or companion `.dproj` projects belong to the codebase:
|
|
337
|
+
|
|
338
|
+
```toml
|
|
339
|
+
[projects]
|
|
340
|
+
include = [
|
|
341
|
+
"apps/**",
|
|
342
|
+
"services/Api/ApiServer.dproj",
|
|
343
|
+
"packages/*/Runtime.dpk",
|
|
344
|
+
]
|
|
345
|
+
exclude = [
|
|
346
|
+
"**/examples/**",
|
|
347
|
+
"**/tests/**",
|
|
348
|
+
]
|
|
349
|
+
|
|
350
|
+
[workspace]
|
|
351
|
+
exclude = [
|
|
352
|
+
"vendor",
|
|
353
|
+
"generated/**",
|
|
354
|
+
"thirdparty/legacy",
|
|
355
|
+
]
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Paths are relative to the repository root, case-insensitive, and use `/` on
|
|
359
|
+
every operating system. An exact directory name covers all descendants. `*`
|
|
360
|
+
matches within one path segment, while `**` crosses directory boundaries.
|
|
361
|
+
Absolute paths and `..` traversal are rejected.
|
|
362
|
+
|
|
363
|
+
When `include` is non-empty, only matching project entries remain. Matching a
|
|
364
|
+
`.dproj` selects the `.dpr` or `.dpk` from its `MainSource`. The `exclude`
|
|
365
|
+
list is applied afterward, so `exclude` always wins. With active TOML filters,
|
|
366
|
+
all remaining matches are main projects even when they occur at different
|
|
367
|
+
directory depths; the built-in shallow-project and example-name heuristic is
|
|
368
|
+
not applied.
|
|
369
|
+
|
|
370
|
+
Use `projects.exclude` when a directory may still contain shared units but its
|
|
371
|
+
project entries must not become selectable projects. Use `workspace.exclude`
|
|
372
|
+
for a hard boundary. Matching directories are never traversed or parsed, and
|
|
373
|
+
neither is any file below them. They cannot be reintroduced by
|
|
374
|
+
`projects.include` or an explicit `--project-file`. Unit dependencies and
|
|
375
|
+
include directives resolving into those directories are reported as
|
|
376
|
+
unavailable without reading the files.
|
|
377
|
+
For complete directory pruning, an exact entry such as `"vendor"` is enough;
|
|
378
|
+
`"generated/**"` also excludes the `generated` directory itself.
|
|
379
|
+
|
|
380
|
+
The same selection is used by `cache`, `worker`, `query`, `view`, `index`,
|
|
381
|
+
wiki export, and language-server discovery. An explicit `--project-file`
|
|
382
|
+
bypasses `projects.include` and `projects.exclude` for that invocation, but
|
|
383
|
+
never bypasses `workspace.exclude`. If no project remains, the command reports
|
|
384
|
+
that the configured filters matched no Delphi projects and stops instead of
|
|
385
|
+
silently parsing every source file in the repository. Restart an already
|
|
386
|
+
running cache daemon after changing the path configuration.
|
|
387
|
+
|
|
264
388
|
`inspect` uses the currently focused target, so call `focus TARGET_ID` before
|
|
265
389
|
`inspect` unless a previous request already selected it.
|
|
266
390
|
|
|
@@ -294,7 +418,9 @@ under `.delphi-lsp/agent-cache/navigation-v1`. A restarted CLI or OpenCode cache
|
|
|
294
418
|
daemon reuses unchanged units without parsing them again. Source content,
|
|
295
419
|
conditional defines, or a shard-schema change produces a cache miss; malformed
|
|
296
420
|
or incompatible JSON is ignored and rebuilt. The disk cache contains no pickle
|
|
297
|
-
payloads and does not count against the retained-RAM budget.
|
|
421
|
+
payloads and does not count against the retained-RAM budget. Each completed
|
|
422
|
+
navigation build removes superseded shards and enforces the
|
|
423
|
+
`--max-disk-cache` byte budget, which defaults to 512 MiB.
|
|
298
424
|
|
|
299
425
|
Cache prewarming builds the navigation registry directly without constructing
|
|
300
426
|
an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
|
|
@@ -330,7 +456,8 @@ outside the root workspace.
|
|
|
330
456
|
`metrics`. For example, `delphi-lsp-agent view --layer metrics --format json`
|
|
331
457
|
returns a project summary and detailed unit metric objects; `--query` filters
|
|
332
458
|
units by name or path.
|
|
333
|
-
`index` materializes overview, projects, and problems JSON. `
|
|
459
|
+
`index` materializes overview, projects, and problems JSON. `wiki export`
|
|
460
|
+
materializes the same navigational knowledge as a linked OKF Markdown bundle. `skill install`
|
|
334
461
|
writes the skill; `opencode install` writes the package-named skill, Markdown
|
|
335
462
|
agent, and plugin. The two deprecated write flags are harmless aliases and do
|
|
336
463
|
not change user configuration.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
4
4
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
5
|
-
Version 3.
|
|
5
|
+
Version 3.1.1 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
6
6
|
|
|
7
7
|
## Install and quick start
|
|
8
8
|
|
|
@@ -150,15 +150,19 @@ not guessed.
|
|
|
150
150
|
|
|
151
151
|
```text
|
|
152
152
|
delphi-lsp-agent cache start --root PATH [--project-file FILE] [--max-memory 512M]
|
|
153
|
+
[--max-disk-cache 512M]
|
|
153
154
|
[--workers auto|N] [--startup-timeout 120]
|
|
154
155
|
[--idle-timeout 1800]
|
|
155
156
|
delphi-lsp-agent cache status --root PATH [--format text|json]
|
|
156
157
|
delphi-lsp-agent cache stop --root PATH
|
|
158
|
+
delphi-lsp-agent cache clear --root PATH
|
|
157
159
|
delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
|
|
158
160
|
[--query TEXT] [--format markdown|json] [--deep-projects]
|
|
159
161
|
[--workers auto|N]
|
|
160
162
|
delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
|
|
161
163
|
[--workers auto|N]
|
|
164
|
+
delphi-lsp-agent wiki export --root PATH [--project-file FILE] [--out DIRECTORY]
|
|
165
|
+
[--workers auto|N] [--force] [--quiet]
|
|
162
166
|
delphi-lsp-agent query --root PATH ACTION [VALUE]
|
|
163
167
|
[--project-id ID] [--detail summary|declaration|members|context|body|implementations]
|
|
164
168
|
[--relation references|callers|callees|uses|used_by|inherits|implements]
|
|
@@ -177,12 +181,67 @@ The `cache` commands manage one daemon per canonical root. Use these:
|
|
|
177
181
|
delphi-lsp-agent cache start --root PATH
|
|
178
182
|
delphi-lsp-agent cache status --root PATH
|
|
179
183
|
delphi-lsp-agent cache stop --root PATH
|
|
184
|
+
delphi-lsp-agent cache clear --root PATH
|
|
180
185
|
```
|
|
181
186
|
|
|
182
187
|
`cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
|
|
183
188
|
`cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
|
|
184
189
|
`cache stop` outputs stop status JSON and may include warnings on stderr.
|
|
190
|
+
`cache clear` stops the daemon and removes persistent navigation shards.
|
|
185
191
|
`query` outputs Protocol v3 JSON responses and writes warnings to stderr.
|
|
192
|
+
For `index`, a relative `--out` is resolved below `--root`; the default is
|
|
193
|
+
`.delphi-lsp/agent-index/index.json`.
|
|
194
|
+
|
|
195
|
+
### Open Knowledge Format wiki export
|
|
196
|
+
|
|
197
|
+
Export the complete unique knowledge represented by the layered codebase views
|
|
198
|
+
as a portable Markdown wiki:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
delphi-lsp-agent wiki export --root PATH --out codebase-wiki
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
When `--out` is relative, it is resolved below `--root`; the default is
|
|
205
|
+
`.delphi-lsp/wiki`. The command builds the semantic index once, deep-indexes
|
|
206
|
+
main projects, calculates workspace and unit metrics, and writes:
|
|
207
|
+
|
|
208
|
+
- an OKF 0.2 root `index.md`;
|
|
209
|
+
- linked project, unit, and symbol concepts;
|
|
210
|
+
- declaration and implementation source fragments;
|
|
211
|
+
- resolved and unresolved semantic references;
|
|
212
|
+
- discovery/project problems and complete metric records;
|
|
213
|
+
- Protocol v3, relation, CPG, cache, and layer-mapping reference concepts.
|
|
214
|
+
|
|
215
|
+
Without `--project-file`, the exporter selects repository main projects:
|
|
216
|
+
non-example project entries in the repository root, or, when none exist, the
|
|
217
|
+
shallowest configured `.dproj` entries. Recursively discovered example,
|
|
218
|
+
sample, test, benchmark, and vendor projects are not promoted to project
|
|
219
|
+
pages. A repository `.delphi-lsp.toml` can replace this heuristic with the
|
|
220
|
+
explicit monorepo selection described below. With `--project-file`, only that
|
|
221
|
+
explicit entry is selected. Project
|
|
222
|
+
dependency traversal and include loading are confined to the repository root,
|
|
223
|
+
so Delphi SDK and other external standard units are recorded as unresolved
|
|
224
|
+
dependencies instead of being parsed. If no main project can be identified,
|
|
225
|
+
the exporter falls back to the repository source inventory without inventing
|
|
226
|
+
project pages.
|
|
227
|
+
|
|
228
|
+
Every non-index concept is UTF-8 Markdown with YAML frontmatter and a non-empty
|
|
229
|
+
`type`. Readable filenames include a stable digest, so overloads and equal names
|
|
230
|
+
from different units remain distinct even on case-insensitive filesystems.
|
|
231
|
+
Output order and content are deterministic. The finished bundle replaces the
|
|
232
|
+
destination only after generation succeeds; an existing non-empty destination
|
|
233
|
+
requires `--force`, and unsafe root/ancestor/symlink targets are rejected.
|
|
234
|
+
|
|
235
|
+
Pages are streamed to disk, decoded source retention is bounded, and metrics
|
|
236
|
+
process source paths without materializing the entire source corpus. Lazy CPG
|
|
237
|
+
subgraphs are documented rather than eagerly multiplied across all possible
|
|
238
|
+
targets; a focused live `cpg` query remains the bounded way to obtain one graph.
|
|
239
|
+
The bundle structure follows the
|
|
240
|
+
[Open Knowledge Format 0.2 specification](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md).
|
|
241
|
+
|
|
242
|
+
Progress is shown on `stderr` while the final machine-readable JSON summary
|
|
243
|
+
remains the only record on `stdout`. Redirected progress is throttled to
|
|
244
|
+
milestones; pass `--quiet` to suppress it completely.
|
|
186
245
|
|
|
187
246
|
```bash
|
|
188
247
|
delphi-lsp-agent query --root PATH find TCustomer
|
|
@@ -192,9 +251,14 @@ delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
|
|
|
192
251
|
delphi-lsp-agent query --root PATH cpg TARGET_ID --graph full --direction out --depth 4
|
|
193
252
|
delphi-lsp-agent query --root PATH metrics
|
|
194
253
|
delphi-lsp-agent query --root PATH metrics UNIT_QUERY
|
|
254
|
+
delphi-lsp-agent query --root PATH metrics --target-id UNIT_TARGET_ID
|
|
195
255
|
delphi-lsp-agent cache status --root PATH --format json
|
|
196
256
|
```
|
|
197
257
|
|
|
258
|
+
A `target_v2_...` positional value for `metrics` is also recognized as a unit
|
|
259
|
+
target ID; other positional values remain case-insensitive unit-name or path
|
|
260
|
+
queries.
|
|
261
|
+
|
|
198
262
|
The repository root is sufficient even when it contains many projects:
|
|
199
263
|
|
|
200
264
|
```bash
|
|
@@ -203,7 +267,9 @@ delphi-lsp-agent query --root PATH find TCustomer
|
|
|
203
267
|
```
|
|
204
268
|
|
|
205
269
|
This prewarms one bounded repository navigation index and requires no project
|
|
206
|
-
selection. A `.dproj` is optional.
|
|
270
|
+
selection. A `.dproj` is optional. For repeatable monorepo selection, add a
|
|
271
|
+
`.delphi-lsp.toml` file as described below. Pass one project explicitly when
|
|
272
|
+
its project-specific compiler
|
|
207
273
|
settings and `MainSource` should define the index:
|
|
208
274
|
|
|
209
275
|
```bash
|
|
@@ -221,6 +287,61 @@ delphi-lsp-agent query --root PATH focus --project-id PROJECT_ID
|
|
|
221
287
|
|
|
222
288
|
Selecting a project this way also prewarms its navigation cache.
|
|
223
289
|
|
|
290
|
+
### TOML project selection for monorepos
|
|
291
|
+
|
|
292
|
+
Place `.delphi-lsp.toml` in the repository root to define which `.dpr`,
|
|
293
|
+
`.dpk`, or companion `.dproj` projects belong to the codebase:
|
|
294
|
+
|
|
295
|
+
```toml
|
|
296
|
+
[projects]
|
|
297
|
+
include = [
|
|
298
|
+
"apps/**",
|
|
299
|
+
"services/Api/ApiServer.dproj",
|
|
300
|
+
"packages/*/Runtime.dpk",
|
|
301
|
+
]
|
|
302
|
+
exclude = [
|
|
303
|
+
"**/examples/**",
|
|
304
|
+
"**/tests/**",
|
|
305
|
+
]
|
|
306
|
+
|
|
307
|
+
[workspace]
|
|
308
|
+
exclude = [
|
|
309
|
+
"vendor",
|
|
310
|
+
"generated/**",
|
|
311
|
+
"thirdparty/legacy",
|
|
312
|
+
]
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Paths are relative to the repository root, case-insensitive, and use `/` on
|
|
316
|
+
every operating system. An exact directory name covers all descendants. `*`
|
|
317
|
+
matches within one path segment, while `**` crosses directory boundaries.
|
|
318
|
+
Absolute paths and `..` traversal are rejected.
|
|
319
|
+
|
|
320
|
+
When `include` is non-empty, only matching project entries remain. Matching a
|
|
321
|
+
`.dproj` selects the `.dpr` or `.dpk` from its `MainSource`. The `exclude`
|
|
322
|
+
list is applied afterward, so `exclude` always wins. With active TOML filters,
|
|
323
|
+
all remaining matches are main projects even when they occur at different
|
|
324
|
+
directory depths; the built-in shallow-project and example-name heuristic is
|
|
325
|
+
not applied.
|
|
326
|
+
|
|
327
|
+
Use `projects.exclude` when a directory may still contain shared units but its
|
|
328
|
+
project entries must not become selectable projects. Use `workspace.exclude`
|
|
329
|
+
for a hard boundary. Matching directories are never traversed or parsed, and
|
|
330
|
+
neither is any file below them. They cannot be reintroduced by
|
|
331
|
+
`projects.include` or an explicit `--project-file`. Unit dependencies and
|
|
332
|
+
include directives resolving into those directories are reported as
|
|
333
|
+
unavailable without reading the files.
|
|
334
|
+
For complete directory pruning, an exact entry such as `"vendor"` is enough;
|
|
335
|
+
`"generated/**"` also excludes the `generated` directory itself.
|
|
336
|
+
|
|
337
|
+
The same selection is used by `cache`, `worker`, `query`, `view`, `index`,
|
|
338
|
+
wiki export, and language-server discovery. An explicit `--project-file`
|
|
339
|
+
bypasses `projects.include` and `projects.exclude` for that invocation, but
|
|
340
|
+
never bypasses `workspace.exclude`. If no project remains, the command reports
|
|
341
|
+
that the configured filters matched no Delphi projects and stops instead of
|
|
342
|
+
silently parsing every source file in the repository. Restart an already
|
|
343
|
+
running cache daemon after changing the path configuration.
|
|
344
|
+
|
|
224
345
|
`inspect` uses the currently focused target, so call `focus TARGET_ID` before
|
|
225
346
|
`inspect` unless a previous request already selected it.
|
|
226
347
|
|
|
@@ -254,7 +375,9 @@ under `.delphi-lsp/agent-cache/navigation-v1`. A restarted CLI or OpenCode cache
|
|
|
254
375
|
daemon reuses unchanged units without parsing them again. Source content,
|
|
255
376
|
conditional defines, or a shard-schema change produces a cache miss; malformed
|
|
256
377
|
or incompatible JSON is ignored and rebuilt. The disk cache contains no pickle
|
|
257
|
-
payloads and does not count against the retained-RAM budget.
|
|
378
|
+
payloads and does not count against the retained-RAM budget. Each completed
|
|
379
|
+
navigation build removes superseded shards and enforces the
|
|
380
|
+
`--max-disk-cache` byte budget, which defaults to 512 MiB.
|
|
258
381
|
|
|
259
382
|
Cache prewarming builds the navigation registry directly without constructing
|
|
260
383
|
an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
|
|
@@ -290,7 +413,8 @@ outside the root workspace.
|
|
|
290
413
|
`metrics`. For example, `delphi-lsp-agent view --layer metrics --format json`
|
|
291
414
|
returns a project summary and detailed unit metric objects; `--query` filters
|
|
292
415
|
units by name or path.
|
|
293
|
-
`index` materializes overview, projects, and problems JSON. `
|
|
416
|
+
`index` materializes overview, projects, and problems JSON. `wiki export`
|
|
417
|
+
materializes the same navigational knowledge as a linked OKF Markdown bundle. `skill install`
|
|
294
418
|
writes the skill; `opencode install` writes the package-named skill, Markdown
|
|
295
419
|
agent, and plugin. The two deprecated write flags are harmless aliases and do
|
|
296
420
|
not change user configuration.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.1.1"
|