python-delphi-lsp 3.1.0__tar.gz → 3.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/.github/workflows/ci.yml +9 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/MANIFEST.in +9 -0
- {python_delphi_lsp-3.1.0/python_delphi_lsp.egg-info → python_delphi_lsp-3.1.2}/PKG-INFO +102 -6
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/README.md +98 -5
- python_delphi_lsp-3.1.2/delphi_lsp/_version.py +1 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_cache.py +128 -18
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_cli.py +144 -10
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_context.py +164 -43
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_layers.py +210 -61
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_metrics.py +29 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_relations.py +32 -5
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_wiki.py +516 -165
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_workspace.py +72 -10
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/delphiast_parser.py +89 -18
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/lsp_server.py +291 -56
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/metrics.py +11 -4
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/navigation_cache.py +56 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/parser.py +8 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/preprocessor.py +6 -0
- python_delphi_lsp-3.1.2/delphi_lsp/project_config.py +266 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/project_discovery.py +226 -27
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/project_indexer.py +42 -4
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/semantic.py +0 -2
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/semantic_builder.py +51 -14
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/workspace.py +20 -4
- python_delphi_lsp-3.1.2/docs/performance-delphi.md +161 -0
- python_delphi_lsp-3.1.2/docs/performance-fpc.md +239 -0
- python_delphi_lsp-3.1.2/docs/release-2.3.0.md +47 -0
- python_delphi_lsp-3.1.2/docs/release-2.3.3.md +13 -0
- python_delphi_lsp-3.1.2/docs/release-3.0.0.md +64 -0
- python_delphi_lsp-3.1.2/docs/release-3.1.0.md +70 -0
- python_delphi_lsp-3.1.2/docs/release-3.1.1.md +46 -0
- python_delphi_lsp-3.1.2/docs/release-3.1.2.md +39 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +360 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +152 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +48 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-23-2.3-performance.md +385 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-23-bounded-cli-cache-daemon.md +921 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +102 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +539 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +480 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +53 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +58 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +16 -0
- python_delphi_lsp-3.1.2/docs/superpowers/plans/2026-07-27-project-path-configuration.md +96 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +213 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-17-large-codebase-performance-design.md +47 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-22-conditional-outline-ranges-design.md +61 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-23-2.3-performance-design.md +180 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-23-bounded-cli-cache-daemon-design.md +230 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-23-delphiast-python-backend-design.md +125 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-23-parallel-cache-prewarming-design.md +231 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +197 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-24-repository-default-navigation-design.md +44 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-27-okf-memory-progress-design.md +87 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-27-okf-wiki-export-design.md +65 -0
- python_delphi_lsp-3.1.2/docs/superpowers/specs/2026-07-27-project-path-configuration-design.md +91 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/pyproject.toml +11 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2/python_delphi_lsp.egg-info}/PKG-INFO +102 -6
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/python_delphi_lsp.egg-info/SOURCES.txt +42 -0
- python_delphi_lsp-3.1.2/python_delphi_lsp.egg-info/dependency_links.txt +1 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/python_delphi_lsp.egg-info/requires.txt +5 -0
- python_delphi_lsp-3.1.2/scripts/benchmark_fpc_corpus.py +2056 -0
- python_delphi_lsp-3.1.2/scripts/prepare_delphi_corpus.py +213 -0
- python_delphi_lsp-3.1.2/scripts/prepare_fpc_corpus.py +171 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/corpora.performance.lock.json +6 -1
- python_delphi_lsp-3.1.2/tests/fpc_parse_quality.baseline.json +10266 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_cache.py +110 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_cli_errors.py +142 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_codebase.py +132 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_context.py +119 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_metrics.py +44 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_wiki.py +336 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_worker.py +100 -7
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_workspace.py +23 -0
- python_delphi_lsp-3.1.2/tests/test_delphi_performance_corpus.py +210 -0
- python_delphi_lsp-3.1.2/tests/test_delphiast_parser.py +332 -0
- python_delphi_lsp-3.1.2/tests/test_fpc_performance_corpus.py +521 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_github_performance_corpus.py +1 -1
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_lsp_features.py +45 -1
- python_delphi_lsp-3.1.2/tests/test_lsp_server.py +309 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_lsp_support.py +74 -5
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_metrics.py +36 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_navigation_cache.py +32 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_package_metadata.py +45 -3
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_preprocessor.py +139 -0
- python_delphi_lsp-3.1.2/tests/test_project_config.py +210 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_project_discovery.py +318 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_project_indexer.py +132 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_semantic.py +1 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_workspace.py +66 -0
- python_delphi_lsp-3.1.0/delphi_lsp/_version.py +0 -1
- python_delphi_lsp-3.1.0/tests/test_delphiast_parser.py +0 -121
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/LICENSE +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/__init__.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_cpg.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_cpg_builder.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_protocol.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/agent_templates.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/binary.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/comment_builder.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/delphiast_lexer.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/delphiast_tokens.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/grammar.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/lark_builder.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/lark_tokens.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/nodes.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/parallel_outline.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/parser_backend.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/progress.py +0 -0
- /python_delphi_lsp-3.1.0/python_delphi_lsp.egg-info/dependency_links.txt → /python_delphi_lsp-3.1.2/delphi_lsp/py.typed +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/opencode.json +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/audit_delphi_language_features.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/benchmark_cpg.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/benchmark_parallel_cache.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/run_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/setup.cfg +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_cpg.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_protocol.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_agent_relations.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_bootstrap_vllm_opencode.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_delphiast_lexer.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_delphiast_native_compatibility.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_delphiast_semantic_compatibility.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_diagnostics.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_language_feature_matrix.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_legacy_snippets.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_opencode_config.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_opencode_probe.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_ornith_cache_prepare.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_parallel_outline.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_parser.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_parser_backends.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_progress.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/tests/test_release_evidence.py +0 -0
- {python_delphi_lsp-3.1.0 → python_delphi_lsp-3.1.2}/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,11 +1,15 @@
|
|
|
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
|
|
6
7
|
include scripts/audit_delphi_language_features.py
|
|
7
8
|
include scripts/build_github_performance_corpus.py
|
|
8
9
|
include scripts/benchmark_github_corpus.py
|
|
10
|
+
include scripts/prepare_fpc_corpus.py
|
|
11
|
+
include scripts/benchmark_fpc_corpus.py
|
|
12
|
+
include scripts/prepare_delphi_corpus.py
|
|
9
13
|
include scripts/benchmark_cpg.py
|
|
10
14
|
include scripts/benchmark_parallel_cache.py
|
|
11
15
|
include scripts/bootstrap_vllm_opencode_test.py
|
|
@@ -21,4 +25,9 @@ include scripts/start_ornith_vllm.sh
|
|
|
21
25
|
include scripts/summarize_opencode_request_payloads.py
|
|
22
26
|
include scripts/ollama/ornith-lspctx.Modelfile
|
|
23
27
|
include tests/corpora.performance.lock.json
|
|
28
|
+
include tests/fpc_parse_quality.baseline.json
|
|
29
|
+
include tests/test_fpc_performance_corpus.py
|
|
30
|
+
include tests/test_delphi_performance_corpus.py
|
|
31
|
+
include docs/performance-delphi.md
|
|
32
|
+
recursive-include docs *.md
|
|
24
33
|
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.1.
|
|
3
|
+
Version: 3.1.2
|
|
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.1.
|
|
48
|
+
Version 3.1.2 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
46
49
|
|
|
47
50
|
## Install and quick start
|
|
48
51
|
|
|
@@ -190,17 +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]
|
|
202
207
|
delphi-lsp-agent wiki export --root PATH [--project-file FILE] [--out DIRECTORY]
|
|
203
|
-
[--workers auto|N] [--force]
|
|
208
|
+
[--workers auto|N] [--force] [--quiet]
|
|
204
209
|
delphi-lsp-agent query --root PATH ACTION [VALUE]
|
|
205
210
|
[--project-id ID] [--detail summary|declaration|members|context|body|implementations]
|
|
206
211
|
[--relation references|callers|callees|uses|used_by|inherits|implements]
|
|
@@ -219,12 +224,16 @@ The `cache` commands manage one daemon per canonical root. Use these:
|
|
|
219
224
|
delphi-lsp-agent cache start --root PATH
|
|
220
225
|
delphi-lsp-agent cache status --root PATH
|
|
221
226
|
delphi-lsp-agent cache stop --root PATH
|
|
227
|
+
delphi-lsp-agent cache clear --root PATH
|
|
222
228
|
```
|
|
223
229
|
|
|
224
230
|
`cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
|
|
225
231
|
`cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
|
|
226
232
|
`cache stop` outputs stop status JSON and may include warnings on stderr.
|
|
233
|
+
`cache clear` stops the daemon and removes persistent navigation shards.
|
|
227
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`.
|
|
228
237
|
|
|
229
238
|
### Open Knowledge Format wiki export
|
|
230
239
|
|
|
@@ -237,7 +246,7 @@ delphi-lsp-agent wiki export --root PATH --out codebase-wiki
|
|
|
237
246
|
|
|
238
247
|
When `--out` is relative, it is resolved below `--root`; the default is
|
|
239
248
|
`.delphi-lsp/wiki`. The command builds the semantic index once, deep-indexes
|
|
240
|
-
|
|
249
|
+
main projects, calculates workspace and unit metrics, and writes:
|
|
241
250
|
|
|
242
251
|
- an OKF 0.2 root `index.md`;
|
|
243
252
|
- linked project, unit, and symbol concepts;
|
|
@@ -246,6 +255,19 @@ discovered projects, calculates workspace and unit metrics, and writes:
|
|
|
246
255
|
- discovery/project problems and complete metric records;
|
|
247
256
|
- Protocol v3, relation, CPG, cache, and layer-mapping reference concepts.
|
|
248
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
|
+
|
|
249
271
|
Every non-index concept is UTF-8 Markdown with YAML frontmatter and a non-empty
|
|
250
272
|
`type`. Readable filenames include a stable digest, so overloads and equal names
|
|
251
273
|
from different units remain distinct even on case-insensitive filesystems.
|
|
@@ -260,6 +282,10 @@ targets; a focused live `cpg` query remains the bounded way to obtain one graph.
|
|
|
260
282
|
The bundle structure follows the
|
|
261
283
|
[Open Knowledge Format 0.2 specification](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md).
|
|
262
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.
|
|
288
|
+
|
|
263
289
|
```bash
|
|
264
290
|
delphi-lsp-agent query --root PATH find TCustomer
|
|
265
291
|
delphi-lsp-agent query --root PATH focus TARGET_ID
|
|
@@ -268,9 +294,14 @@ delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
|
|
|
268
294
|
delphi-lsp-agent query --root PATH cpg TARGET_ID --graph full --direction out --depth 4
|
|
269
295
|
delphi-lsp-agent query --root PATH metrics
|
|
270
296
|
delphi-lsp-agent query --root PATH metrics UNIT_QUERY
|
|
297
|
+
delphi-lsp-agent query --root PATH metrics --target-id UNIT_TARGET_ID
|
|
271
298
|
delphi-lsp-agent cache status --root PATH --format json
|
|
272
299
|
```
|
|
273
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
|
+
|
|
274
305
|
The repository root is sufficient even when it contains many projects:
|
|
275
306
|
|
|
276
307
|
```bash
|
|
@@ -279,7 +310,9 @@ delphi-lsp-agent query --root PATH find TCustomer
|
|
|
279
310
|
```
|
|
280
311
|
|
|
281
312
|
This prewarms one bounded repository navigation index and requires no project
|
|
282
|
-
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
|
|
283
316
|
settings and `MainSource` should define the index:
|
|
284
317
|
|
|
285
318
|
```bash
|
|
@@ -297,6 +330,61 @@ delphi-lsp-agent query --root PATH focus --project-id PROJECT_ID
|
|
|
297
330
|
|
|
298
331
|
Selecting a project this way also prewarms its navigation cache.
|
|
299
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
|
+
|
|
300
388
|
`inspect` uses the currently focused target, so call `focus TARGET_ID` before
|
|
301
389
|
`inspect` unless a previous request already selected it.
|
|
302
390
|
|
|
@@ -330,7 +418,9 @@ under `.delphi-lsp/agent-cache/navigation-v1`. A restarted CLI or OpenCode cache
|
|
|
330
418
|
daemon reuses unchanged units without parsing them again. Source content,
|
|
331
419
|
conditional defines, or a shard-schema change produces a cache miss; malformed
|
|
332
420
|
or incompatible JSON is ignored and rebuilt. The disk cache contains no pickle
|
|
333
|
-
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.
|
|
334
424
|
|
|
335
425
|
Cache prewarming builds the navigation registry directly without constructing
|
|
336
426
|
an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
|
|
@@ -431,6 +521,12 @@ source was parsed for CPG. Legacy navigation retained 98.43 percent of its
|
|
|
431
521
|
in-run control throughput, above the 95-percent release floor. Reproduce it
|
|
432
522
|
with `python scripts/benchmark_cpg.py --root CORPUS --query Run --workers 8`.
|
|
433
523
|
|
|
524
|
+
Separate reproducible performance profiles cover the coherent FPC compiler
|
|
525
|
+
tree and a project-file-dense Delphi corpus. The Delphi profile can add a
|
|
526
|
+
deterministic `__history`/recovery/build/search-path overlay without changing
|
|
527
|
+
the pinned base corpus. See [the FPC benchmark](docs/performance-fpc.md) and
|
|
528
|
+
[the Delphi discovery benchmark](docs/performance-delphi.md).
|
|
529
|
+
|
|
434
530
|
For every source size the navigator builds an outline first, loads source detail
|
|
435
531
|
lazily for a selected target, and returns only selected fragments. Typed source
|
|
436
532
|
chunks are at most 6000 characters and also respect the response budget. This
|
|
@@ -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.1.
|
|
5
|
+
Version 3.1.2 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
6
6
|
|
|
7
7
|
## Install and quick start
|
|
8
8
|
|
|
@@ -150,17 +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]
|
|
162
164
|
delphi-lsp-agent wiki export --root PATH [--project-file FILE] [--out DIRECTORY]
|
|
163
|
-
[--workers auto|N] [--force]
|
|
165
|
+
[--workers auto|N] [--force] [--quiet]
|
|
164
166
|
delphi-lsp-agent query --root PATH ACTION [VALUE]
|
|
165
167
|
[--project-id ID] [--detail summary|declaration|members|context|body|implementations]
|
|
166
168
|
[--relation references|callers|callees|uses|used_by|inherits|implements]
|
|
@@ -179,12 +181,16 @@ The `cache` commands manage one daemon per canonical root. Use these:
|
|
|
179
181
|
delphi-lsp-agent cache start --root PATH
|
|
180
182
|
delphi-lsp-agent cache status --root PATH
|
|
181
183
|
delphi-lsp-agent cache stop --root PATH
|
|
184
|
+
delphi-lsp-agent cache clear --root PATH
|
|
182
185
|
```
|
|
183
186
|
|
|
184
187
|
`cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
|
|
185
188
|
`cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
|
|
186
189
|
`cache stop` outputs stop status JSON and may include warnings on stderr.
|
|
190
|
+
`cache clear` stops the daemon and removes persistent navigation shards.
|
|
187
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`.
|
|
188
194
|
|
|
189
195
|
### Open Knowledge Format wiki export
|
|
190
196
|
|
|
@@ -197,7 +203,7 @@ delphi-lsp-agent wiki export --root PATH --out codebase-wiki
|
|
|
197
203
|
|
|
198
204
|
When `--out` is relative, it is resolved below `--root`; the default is
|
|
199
205
|
`.delphi-lsp/wiki`. The command builds the semantic index once, deep-indexes
|
|
200
|
-
|
|
206
|
+
main projects, calculates workspace and unit metrics, and writes:
|
|
201
207
|
|
|
202
208
|
- an OKF 0.2 root `index.md`;
|
|
203
209
|
- linked project, unit, and symbol concepts;
|
|
@@ -206,6 +212,19 @@ discovered projects, calculates workspace and unit metrics, and writes:
|
|
|
206
212
|
- discovery/project problems and complete metric records;
|
|
207
213
|
- Protocol v3, relation, CPG, cache, and layer-mapping reference concepts.
|
|
208
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
|
+
|
|
209
228
|
Every non-index concept is UTF-8 Markdown with YAML frontmatter and a non-empty
|
|
210
229
|
`type`. Readable filenames include a stable digest, so overloads and equal names
|
|
211
230
|
from different units remain distinct even on case-insensitive filesystems.
|
|
@@ -220,6 +239,10 @@ targets; a focused live `cpg` query remains the bounded way to obtain one graph.
|
|
|
220
239
|
The bundle structure follows the
|
|
221
240
|
[Open Knowledge Format 0.2 specification](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md).
|
|
222
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.
|
|
245
|
+
|
|
223
246
|
```bash
|
|
224
247
|
delphi-lsp-agent query --root PATH find TCustomer
|
|
225
248
|
delphi-lsp-agent query --root PATH focus TARGET_ID
|
|
@@ -228,9 +251,14 @@ delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
|
|
|
228
251
|
delphi-lsp-agent query --root PATH cpg TARGET_ID --graph full --direction out --depth 4
|
|
229
252
|
delphi-lsp-agent query --root PATH metrics
|
|
230
253
|
delphi-lsp-agent query --root PATH metrics UNIT_QUERY
|
|
254
|
+
delphi-lsp-agent query --root PATH metrics --target-id UNIT_TARGET_ID
|
|
231
255
|
delphi-lsp-agent cache status --root PATH --format json
|
|
232
256
|
```
|
|
233
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
|
+
|
|
234
262
|
The repository root is sufficient even when it contains many projects:
|
|
235
263
|
|
|
236
264
|
```bash
|
|
@@ -239,7 +267,9 @@ delphi-lsp-agent query --root PATH find TCustomer
|
|
|
239
267
|
```
|
|
240
268
|
|
|
241
269
|
This prewarms one bounded repository navigation index and requires no project
|
|
242
|
-
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
|
|
243
273
|
settings and `MainSource` should define the index:
|
|
244
274
|
|
|
245
275
|
```bash
|
|
@@ -257,6 +287,61 @@ delphi-lsp-agent query --root PATH focus --project-id PROJECT_ID
|
|
|
257
287
|
|
|
258
288
|
Selecting a project this way also prewarms its navigation cache.
|
|
259
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
|
+
|
|
260
345
|
`inspect` uses the currently focused target, so call `focus TARGET_ID` before
|
|
261
346
|
`inspect` unless a previous request already selected it.
|
|
262
347
|
|
|
@@ -290,7 +375,9 @@ under `.delphi-lsp/agent-cache/navigation-v1`. A restarted CLI or OpenCode cache
|
|
|
290
375
|
daemon reuses unchanged units without parsing them again. Source content,
|
|
291
376
|
conditional defines, or a shard-schema change produces a cache miss; malformed
|
|
292
377
|
or incompatible JSON is ignored and rebuilt. The disk cache contains no pickle
|
|
293
|
-
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.
|
|
294
381
|
|
|
295
382
|
Cache prewarming builds the navigation registry directly without constructing
|
|
296
383
|
an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
|
|
@@ -391,6 +478,12 @@ source was parsed for CPG. Legacy navigation retained 98.43 percent of its
|
|
|
391
478
|
in-run control throughput, above the 95-percent release floor. Reproduce it
|
|
392
479
|
with `python scripts/benchmark_cpg.py --root CORPUS --query Run --workers 8`.
|
|
393
480
|
|
|
481
|
+
Separate reproducible performance profiles cover the coherent FPC compiler
|
|
482
|
+
tree and a project-file-dense Delphi corpus. The Delphi profile can add a
|
|
483
|
+
deterministic `__history`/recovery/build/search-path overlay without changing
|
|
484
|
+
the pinned base corpus. See [the FPC benchmark](docs/performance-fpc.md) and
|
|
485
|
+
[the Delphi discovery benchmark](docs/performance-delphi.md).
|
|
486
|
+
|
|
394
487
|
For every source size the navigator builds an outline first, loads source detail
|
|
395
488
|
lazily for a selected target, and returns only selected fragments. Typed source
|
|
396
489
|
chunks are at most 6000 characters and also respect the response budget. This
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.1.2"
|