python-delphi-lsp 3.3.0__tar.gz → 3.4.0__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.3.0 → python_delphi_lsp-3.4.0}/MANIFEST.in +1 -0
- {python_delphi_lsp-3.3.0/python_delphi_lsp.egg-info → python_delphi_lsp-3.4.0}/PKG-INFO +17 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/README.md +16 -1
- python_delphi_lsp-3.4.0/delphi_lsp/_version.py +1 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cache.py +110 -55
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cli.py +117 -23
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_context.py +668 -72
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_layers.py +218 -29
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_metrics.py +227 -15
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_relations.py +475 -50
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_wiki.py +16 -7
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_workspace.py +18 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/delphiast_lexer.py +156 -39
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/delphiast_parser.py +336 -48
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/delphiast_tokens.py +4 -4
- python_delphi_lsp-3.4.0/delphi_lsp/incremental.py +1139 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/lark_builder.py +6 -3
- python_delphi_lsp-3.4.0/delphi_lsp/lsp_server.py +6693 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/metrics.py +654 -75
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/navigation_cache.py +2 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/nodes.py +93 -2
- python_delphi_lsp-3.4.0/delphi_lsp/parallel_outline.py +621 -0
- python_delphi_lsp-3.4.0/delphi_lsp/parse_artifacts.py +969 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/parser.py +21 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/parser_backend.py +13 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/preprocessor.py +28 -14
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/project_config.py +22 -4
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/project_indexer.py +31 -7
- python_delphi_lsp-3.4.0/delphi_lsp/response_cache.py +465 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/semantic.py +4 -1
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/semantic_builder.py +746 -21
- python_delphi_lsp-3.4.0/docs/release-3.4.0.md +97 -0
- python_delphi_lsp-3.4.0/docs/superpowers/plans/2026-08-04-release-performance-unblock.md +384 -0
- python_delphi_lsp-3.4.0/docs/superpowers/specs/2026-08-04-release-performance-unblock-design.md +190 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/pyproject.toml +1 -1
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0/python_delphi_lsp.egg-info}/PKG-INFO +17 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/SOURCES.txt +16 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/audit_delphi_language_features.py +1 -1
- python_delphi_lsp-3.4.0/scripts/benchmark_response_cache.py +222 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/outline_gap_detector.py +199 -21
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cache.py +402 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cli_content.py +67 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_codebase.py +208 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_context.py +735 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_metrics.py +219 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_relations.py +1238 -44
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_wiki.py +43 -1
- python_delphi_lsp-3.4.0/tests/test_artifact_cache_cpu_smoke.py +116 -0
- python_delphi_lsp-3.4.0/tests/test_artifact_cache_integration.py +315 -0
- python_delphi_lsp-3.4.0/tests/test_delphiast_lexer.py +284 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphiast_native_compatibility.py +54 -1
- python_delphi_lsp-3.4.0/tests/test_delphiast_parser_linearity.py +255 -0
- python_delphi_lsp-3.4.0/tests/test_incremental.py +296 -0
- python_delphi_lsp-3.4.0/tests/test_incremental_performance.py +58 -0
- python_delphi_lsp-3.4.0/tests/test_incremental_property.py +560 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_lsp_features.py +415 -0
- python_delphi_lsp-3.4.0/tests/test_lsp_server.py +4005 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_lsp_support.py +62 -10
- python_delphi_lsp-3.4.0/tests/test_metrics.py +604 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_navigation_cache.py +5 -0
- python_delphi_lsp-3.4.0/tests/test_outline_gap_detector.py +469 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_package_metadata.py +22 -3
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_parallel_outline.py +127 -2
- python_delphi_lsp-3.4.0/tests/test_parse_artifacts.py +230 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_parser_backends.py +2 -2
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_preprocessor.py +40 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_project_indexer.py +75 -0
- python_delphi_lsp-3.4.0/tests/test_response_cache.py +329 -0
- python_delphi_lsp-3.4.0/tests/test_response_cache_benchmark.py +53 -0
- python_delphi_lsp-3.4.0/tests/test_semantic.py +987 -0
- python_delphi_lsp-3.3.0/delphi_lsp/_version.py +0 -1
- python_delphi_lsp-3.3.0/delphi_lsp/lsp_server.py +0 -2855
- python_delphi_lsp-3.3.0/delphi_lsp/parallel_outline.py +0 -316
- python_delphi_lsp-3.3.0/tests/test_delphiast_lexer.py +0 -122
- python_delphi_lsp-3.3.0/tests/test_lsp_server.py +0 -901
- python_delphi_lsp-3.3.0/tests/test_metrics.py +0 -275
- python_delphi_lsp-3.3.0/tests/test_outline_gap_detector.py +0 -156
- python_delphi_lsp-3.3.0/tests/test_semantic.py +0 -283
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/.github/workflows/ci.yml +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/LICENSE +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/__init__.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cpg.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cpg_builder.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_protocol.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_templates.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/binary.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/comment_builder.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/grammar.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/lark_tokens.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/lexical_scanner.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/progress.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/project_discovery.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/py.typed +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/workspace.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/performance-delphi.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/performance-fpc.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-2.3.0.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-2.3.3.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.0.0.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.1.0.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.1.1.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.1.2.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.2.0.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.2.1.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.2.2.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.3.0.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-2.3-performance.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-bounded-cli-cache-daemon.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-27-project-path-configuration.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-17-large-codebase-performance-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-22-conditional-outline-ranges-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-23-2.3-performance-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-23-bounded-cli-cache-daemon-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-23-delphiast-python-backend-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-23-parallel-cache-prewarming-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-24-repository-default-navigation-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-27-okf-memory-progress-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-27-okf-wiki-export-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-27-project-path-configuration-design.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/opencode.json +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/requires.txt +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_cpg.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_fpc_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_parallel_cache.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/prepare_delphi_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/prepare_fpc_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/run_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/setup.cfg +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.AssertFailureCompare.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.EqualityAsserts.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.General.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.UITest.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_2010.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Berlin.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Rio.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Seattle.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Sydney.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Tokyo.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D11Alexandria.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D12Athens.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D13.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE2.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE3.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE4.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE5.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE6.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE7.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE8.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Berlin.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Seattle.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Tokyo.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE5.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE6.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE7.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE8.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Berlin.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Seattle.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE7.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/NonNamespacedExample.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/ProviderExample.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewProject.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewTestProject.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewTestUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.NewUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.SourceFile.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.CodeGen.Templates.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Forms.NewProjectWizard.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Forms.NewUnitWizard.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizard.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizardEx.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizard.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizardEx.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Registration.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_2010.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Berlin.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Rio.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Seattle.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D10Tokyo.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D11Alexandria.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D12Athens.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_D13Florence.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_Sydney.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE2.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE3.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE4.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE5.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE6.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE7.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX_IDE_Expert_XE8.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/LICENSE.txt +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.GUIX.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.MobileGUI.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.Ex.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Attributes.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.AutoDetect.Console.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Banner.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CategoryExpression.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.OptionDef.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Options.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Parser.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Csv.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Xml.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ConsoleWriter.Base.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Constants.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.DUnitCompatibility.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Exceptions.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Extensibility.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FilterBuilder.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Filters.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureBuilder.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureProvider.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureResult.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Generics.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Helpers.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Init.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalDataProvider.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalInterfaces.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Linux.Console.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Console.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.GUI.VCL.RichEdit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.GUI.VCL.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Null.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Text.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.JUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.NUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.XML.xUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MacOS.Console.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.Default.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM4.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM5.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeaks.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.OptionsDefinition.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ResStrs.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.RunResults.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ServiceLocator.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.EurekaLog7.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.JCL.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept3.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept4.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept5.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Stacktrace.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Test.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestDataProvider.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFixture.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFramework.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestNameParser.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestResult.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestRunner.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Timeout.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Types.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.XML.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.WeakReference.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Windows.Console.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Options.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.SingleNameSpace.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Stacktrace.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Assert.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CategoryParser.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CommandLineParser.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.ConsoleWriter.Base.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.DUnitCompatibility.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Example.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Framework.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IgnoreFixture.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Inheritance.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IoC.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Loggers.XML.JUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Loggers.XML.NUnit.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.MemoryLeaks.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestDataProvider.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestFixture.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestNameParser.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.XML.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.WeakReference.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXGuiTest.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXTestProject.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_D2010.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_XE.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.1/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.2/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.3/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 10.4/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 11.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 12.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio 13.0/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE2/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE3/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE4/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE5/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE6/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE7/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/packages/RAD Studio XE8/VSoft.DUnitXWinR.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/mORMot2/LICENCE.md +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/mORMot2/src/mormot.defines.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/mORMot2/src/ui/mormot.ui.pdf.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/corpora.performance.lock.json +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fpc_parse_quality.baseline.json +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cli_errors.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cpg.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_protocol.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_worker.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_workspace.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_bootstrap_vllm_opencode.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphi_performance_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphiast_parser.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphiast_semantic_compatibility.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_diagnostics.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_fpc_performance_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_github_performance_corpus.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_language_feature_matrix.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_legacy_snippets.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_opencode_config.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_opencode_probe.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_ornith_cache_prepare.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_parser.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_progress.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_project_config.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_project_discovery.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_release_evidence.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_throughput_scaling.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_vllm_start_script.py +0 -0
- {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_workspace.py +0 -0
|
@@ -12,6 +12,7 @@ include scripts/benchmark_fpc_corpus.py
|
|
|
12
12
|
include scripts/prepare_delphi_corpus.py
|
|
13
13
|
include scripts/benchmark_cpg.py
|
|
14
14
|
include scripts/benchmark_parallel_cache.py
|
|
15
|
+
include scripts/benchmark_response_cache.py
|
|
15
16
|
include scripts/bootstrap_vllm_opencode_test.py
|
|
16
17
|
include scripts/bootstrap_vllm_codebase_skill_test.py
|
|
17
18
|
include scripts/bootstrap_vllm_opencode_test.ps1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-delphi-lsp
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.4.0
|
|
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
|
|
@@ -45,7 +45,7 @@ Dynamic: license-file
|
|
|
45
45
|
|
|
46
46
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
47
47
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
48
|
-
Version 3.
|
|
48
|
+
Version 3.4.0 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
49
49
|
|
|
50
50
|
## Install and quick start
|
|
51
51
|
|
|
@@ -417,6 +417,21 @@ task, CPU, and eight-worker caps without the cache-budget term. An explicit valu
|
|
|
417
417
|
from 1 through 32 overrides the automatic CPU and memory caps but is still
|
|
418
418
|
limited by the number of tasks.
|
|
419
419
|
|
|
420
|
+
Standalone `view` and `index` commands cache their exact completed response
|
|
421
|
+
bytes under `.delphi-lsp/response-cache`. A strong content revision covers the
|
|
422
|
+
selected source, include, project, and configuration files, so any relevant
|
|
423
|
+
content change produces a miss. Records are content-addressed, owner-only,
|
|
424
|
+
atomically replaced, size-bounded, and never use pickle. Batch commands bypass
|
|
425
|
+
the older per-unit artifact shards; an unchanged request can therefore return
|
|
426
|
+
the validated response without rebuilding semantic models. To reproduce the
|
|
427
|
+
large-corpus cold/warm gate, run:
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
python scripts/benchmark_response_cache.py \
|
|
431
|
+
--fpc-root /path/to/fpc-corpus \
|
|
432
|
+
--delphi-root /path/to/delphi-corpus
|
|
433
|
+
```
|
|
434
|
+
|
|
420
435
|
Worker processes build compact, detached navigation shards and exit before
|
|
421
436
|
retained-cache accounting. Full semantic object graphs and source text are not
|
|
422
437
|
retained in the parent. Tokenized source documents are loaded only for source
|
|
@@ -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.4.0 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
6
6
|
|
|
7
7
|
## Install and quick start
|
|
8
8
|
|
|
@@ -374,6 +374,21 @@ task, CPU, and eight-worker caps without the cache-budget term. An explicit valu
|
|
|
374
374
|
from 1 through 32 overrides the automatic CPU and memory caps but is still
|
|
375
375
|
limited by the number of tasks.
|
|
376
376
|
|
|
377
|
+
Standalone `view` and `index` commands cache their exact completed response
|
|
378
|
+
bytes under `.delphi-lsp/response-cache`. A strong content revision covers the
|
|
379
|
+
selected source, include, project, and configuration files, so any relevant
|
|
380
|
+
content change produces a miss. Records are content-addressed, owner-only,
|
|
381
|
+
atomically replaced, size-bounded, and never use pickle. Batch commands bypass
|
|
382
|
+
the older per-unit artifact shards; an unchanged request can therefore return
|
|
383
|
+
the validated response without rebuilding semantic models. To reproduce the
|
|
384
|
+
large-corpus cold/warm gate, run:
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
python scripts/benchmark_response_cache.py \
|
|
388
|
+
--fpc-root /path/to/fpc-corpus \
|
|
389
|
+
--delphi-root /path/to/delphi-corpus
|
|
390
|
+
```
|
|
391
|
+
|
|
377
392
|
Worker processes build compact, detached navigation shards and exit before
|
|
378
393
|
retained-cache accounting. Full semantic object graphs and source text are not
|
|
379
394
|
retained in the parent. Tokenized source documents are loaded only for source
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.4.0"
|
|
@@ -54,6 +54,7 @@ _WATCHER_READY_TIMEOUT_SECONDS = 1.0
|
|
|
54
54
|
_WATCHER_READY_POLL_MILLISECONDS = 50
|
|
55
55
|
_STOP_TIMEOUT_SECONDS = 15.0
|
|
56
56
|
_STOP_SIGNAL_DELAY_SECONDS = 3.0
|
|
57
|
+
_STOP_FORCE_TIMEOUT_SECONDS = 2.0
|
|
57
58
|
_WATCHED_SUFFIXES = frozenset(
|
|
58
59
|
{".pas", ".pp", ".inc", ".dpr", ".dpk", ".dproj", ".cfg"}
|
|
59
60
|
)
|
|
@@ -365,9 +366,12 @@ class _RequestGuard:
|
|
|
365
366
|
self,
|
|
366
367
|
service: _CacheService,
|
|
367
368
|
connection: socket.socket,
|
|
369
|
+
*,
|
|
370
|
+
enforce_rss_budget: bool = True,
|
|
368
371
|
) -> None:
|
|
369
372
|
self._service = service
|
|
370
373
|
self._connection = connection
|
|
374
|
+
self._enforce_rss_budget = enforce_rss_budget
|
|
371
375
|
|
|
372
376
|
def check(self) -> None:
|
|
373
377
|
if self._service.shutdown.is_set():
|
|
@@ -394,14 +398,14 @@ class _RequestGuard:
|
|
|
394
398
|
"client_disconnected",
|
|
395
399
|
"Cache client disconnected.",
|
|
396
400
|
) from error
|
|
397
|
-
rss_bytes = current_process_rss_bytes()
|
|
398
401
|
if (
|
|
399
|
-
|
|
400
|
-
and
|
|
402
|
+
self._enforce_rss_budget
|
|
403
|
+
and self._service._measure_retained_bytes()
|
|
404
|
+
> self._service.metadata.max_memory_bytes
|
|
401
405
|
):
|
|
402
406
|
raise CacheClientError(
|
|
403
407
|
"memory_budget_exceeded",
|
|
404
|
-
"Cache request exceeded the configured
|
|
408
|
+
"Cache request exceeded the configured retained-memory budget.",
|
|
405
409
|
)
|
|
406
410
|
|
|
407
411
|
|
|
@@ -854,11 +858,15 @@ class _CacheService:
|
|
|
854
858
|
context = self._initialize_context()
|
|
855
859
|
try:
|
|
856
860
|
self.last_revision = context.prewarm_navigation()
|
|
857
|
-
self.cache_state = "warm"
|
|
858
861
|
except AgentProtocolError as error:
|
|
859
862
|
if error.code != "project_required":
|
|
860
863
|
raise
|
|
861
|
-
|
|
864
|
+
prewarm_rss = current_process_rss_bytes()
|
|
865
|
+
if prewarm_rss > 0:
|
|
866
|
+
# Parsing can leave a high allocator RSS watermark even though the
|
|
867
|
+
# retained navigation data is already covered by its own estimate.
|
|
868
|
+
# Track only subsequent, otherwise unaccounted-for RSS growth.
|
|
869
|
+
self._rss_baseline_bytes = prewarm_rss
|
|
862
870
|
self._enforce_budget()
|
|
863
871
|
self.prewarm_seconds = time.monotonic() - started
|
|
864
872
|
self.stats.parallel_fallbacks = context.parallel_stats.fallbacks
|
|
@@ -921,58 +929,86 @@ class _CacheService:
|
|
|
921
929
|
self.context.invalidate_revision_cache()
|
|
922
930
|
with self._request_state_lock:
|
|
923
931
|
self._active_requests += 1
|
|
932
|
+
lock_acquired = False
|
|
924
933
|
try:
|
|
925
|
-
|
|
926
|
-
self.
|
|
927
|
-
|
|
928
|
-
|
|
934
|
+
while not self.lock.acquire(timeout=0.05):
|
|
935
|
+
if self.shutdown.is_set():
|
|
936
|
+
raise CacheClientError(
|
|
937
|
+
"request_cancelled",
|
|
938
|
+
"Cache request was cancelled.",
|
|
939
|
+
)
|
|
940
|
+
if cancel_check is not None:
|
|
941
|
+
cancel_check()
|
|
942
|
+
lock_acquired = True
|
|
943
|
+
if self.shutdown.is_set():
|
|
944
|
+
raise CacheClientError(
|
|
945
|
+
"request_cancelled",
|
|
946
|
+
"Cache request was cancelled.",
|
|
947
|
+
)
|
|
948
|
+
if cancel_check is not None:
|
|
949
|
+
cancel_check()
|
|
950
|
+
self.last_activity = time.monotonic()
|
|
951
|
+
before = self.last_revision
|
|
952
|
+
was_warm = self.context.navigation_cache_is_warm
|
|
953
|
+
request_aborted = False
|
|
954
|
+
try:
|
|
929
955
|
try:
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
cancel_check=cancel_check,
|
|
937
|
-
)
|
|
956
|
+
handled = (
|
|
957
|
+
self.context.handle(request)
|
|
958
|
+
if cancel_check is None
|
|
959
|
+
else self.context.handle(
|
|
960
|
+
request,
|
|
961
|
+
cancel_check=cancel_check,
|
|
938
962
|
)
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
raise
|
|
942
|
-
except AgentProtocolError as error:
|
|
943
|
-
raise CacheClientError(
|
|
944
|
-
error.code,
|
|
945
|
-
error.message,
|
|
946
|
-
) from None
|
|
947
|
-
except (OSError, UnicodeError):
|
|
948
|
-
raise CacheClientError(
|
|
949
|
-
"source_unavailable",
|
|
950
|
-
"Source is unavailable.",
|
|
951
|
-
) from None
|
|
952
|
-
except Exception:
|
|
963
|
+
)
|
|
964
|
+
if self.shutdown.is_set():
|
|
953
965
|
raise CacheClientError(
|
|
954
|
-
"
|
|
955
|
-
"
|
|
956
|
-
)
|
|
957
|
-
|
|
966
|
+
"request_cancelled",
|
|
967
|
+
"Cache request was cancelled.",
|
|
968
|
+
)
|
|
969
|
+
if cancel_check is not None:
|
|
970
|
+
cancel_check()
|
|
971
|
+
response = handled.to_mapping()
|
|
972
|
+
except CacheClientError:
|
|
973
|
+
request_aborted = True
|
|
974
|
+
raise
|
|
975
|
+
except AgentProtocolError as error:
|
|
976
|
+
raise CacheClientError(
|
|
977
|
+
error.code,
|
|
978
|
+
error.message,
|
|
979
|
+
) from None
|
|
980
|
+
except (OSError, UnicodeError):
|
|
981
|
+
raise CacheClientError(
|
|
982
|
+
"source_unavailable",
|
|
983
|
+
"Source is unavailable.",
|
|
984
|
+
) from None
|
|
985
|
+
except Exception:
|
|
986
|
+
raise CacheClientError(
|
|
987
|
+
"internal_error",
|
|
988
|
+
"Internal cache error.",
|
|
989
|
+
) from None
|
|
990
|
+
finally:
|
|
991
|
+
if not request_aborted and not self.shutdown.is_set():
|
|
958
992
|
self._enforce_budget()
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
)
|
|
969
|
-
if before != after:
|
|
970
|
-
self.stats.invalidations += 1
|
|
971
|
-
return CacheClientResponse(
|
|
972
|
-
response,
|
|
973
|
-
self._consume_warning(),
|
|
993
|
+
after = str(response["workspace_revision"])
|
|
994
|
+
self.last_revision = after
|
|
995
|
+
self.stats.requests += 1
|
|
996
|
+
if was_warm:
|
|
997
|
+
self.stats.warm_hits += 1
|
|
998
|
+
else:
|
|
999
|
+
self.stats.rebuilds += 1
|
|
1000
|
+
self.stats.parallel_fallbacks += (
|
|
1001
|
+
self.context.parallel_stats.fallbacks
|
|
974
1002
|
)
|
|
1003
|
+
if before != after:
|
|
1004
|
+
self.stats.invalidations += 1
|
|
1005
|
+
return CacheClientResponse(
|
|
1006
|
+
response,
|
|
1007
|
+
self._consume_warning(),
|
|
1008
|
+
)
|
|
975
1009
|
finally:
|
|
1010
|
+
if lock_acquired:
|
|
1011
|
+
self.lock.release()
|
|
976
1012
|
with self._request_state_lock:
|
|
977
1013
|
self._active_requests -= 1
|
|
978
1014
|
|
|
@@ -1142,10 +1178,11 @@ def _serve_connection(connection: socket.socket, service: _CacheService) -> None
|
|
|
1142
1178
|
response: dict[str, object] = {"error": {"code": "authentication_failed", "message": "authentication failed"}}
|
|
1143
1179
|
else:
|
|
1144
1180
|
try:
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1181
|
+
action = request.get("action")
|
|
1182
|
+
guard = None if action in {"status", "stop"} else _RequestGuard(
|
|
1183
|
+
service,
|
|
1184
|
+
connection,
|
|
1185
|
+
enforce_rss_budget=action in {"trace", "cpg"},
|
|
1149
1186
|
)
|
|
1150
1187
|
result = service.request(
|
|
1151
1188
|
request,
|
|
@@ -1476,6 +1513,24 @@ def stop_cache(root: str | Path) -> None:
|
|
|
1476
1513
|
os.kill(metadata.pid, signal.SIGTERM)
|
|
1477
1514
|
signal_sent = True
|
|
1478
1515
|
time.sleep(0.05)
|
|
1516
|
+
if not stopped and _pid_alive(metadata.pid):
|
|
1517
|
+
current = _read_metadata(root)
|
|
1518
|
+
if current == metadata:
|
|
1519
|
+
force_signal = (
|
|
1520
|
+
signal.SIGKILL
|
|
1521
|
+
if os.name != "nt" and hasattr(signal, "SIGKILL")
|
|
1522
|
+
else signal.SIGTERM
|
|
1523
|
+
)
|
|
1524
|
+
with contextlib.suppress(OSError):
|
|
1525
|
+
os.kill(metadata.pid, force_signal)
|
|
1526
|
+
force_deadline = time.monotonic() + _STOP_FORCE_TIMEOUT_SECONDS
|
|
1527
|
+
while time.monotonic() < force_deadline:
|
|
1528
|
+
if _reap_child_if_exited(metadata.pid) or not _pid_alive(
|
|
1529
|
+
metadata.pid
|
|
1530
|
+
):
|
|
1531
|
+
stopped = True
|
|
1532
|
+
break
|
|
1533
|
+
time.sleep(0.05)
|
|
1479
1534
|
if not stopped and _pid_alive(metadata.pid):
|
|
1480
1535
|
raise CacheClientError("stop_failed", "Cache daemon did not stop.")
|
|
1481
1536
|
_remove_metadata_if_owned(metadata)
|
|
@@ -27,6 +27,7 @@ from .agent_cache import (
|
|
|
27
27
|
from .agent_context import AgentContext
|
|
28
28
|
from .agent_layers import (
|
|
29
29
|
build_codebase_index,
|
|
30
|
+
build_metrics_payload,
|
|
30
31
|
build_references_payload,
|
|
31
32
|
layer_payload,
|
|
32
33
|
render_layer,
|
|
@@ -45,6 +46,12 @@ from .agent_templates import install_opencode_support, install_skill
|
|
|
45
46
|
from .agent_wiki import WikiExportError, WikiProgressEvent, export_okf_wiki
|
|
46
47
|
from .parallel_outline import ParallelOutlineError, parse_worker_setting
|
|
47
48
|
from .project_config import ProjectConfigError
|
|
49
|
+
from .response_cache import (
|
|
50
|
+
ResponseCacheKey,
|
|
51
|
+
ResponseCacheStore,
|
|
52
|
+
WorkspaceContentSnapshot,
|
|
53
|
+
workspace_content_snapshot,
|
|
54
|
+
)
|
|
48
55
|
|
|
49
56
|
_MAX_WORKER_RECORD_BYTES = 1024 * 1024
|
|
50
57
|
_INVALID_JSON_MESSAGE = "Invalid JSON request."
|
|
@@ -323,6 +330,17 @@ def _discard_broken_stdout() -> None:
|
|
|
323
330
|
def _view(args: argparse.Namespace) -> None:
|
|
324
331
|
args.root = _workspace_root(args.root)
|
|
325
332
|
args.project_file = _project_file(args.root, args.project_file)
|
|
333
|
+
store, cache_key, snapshot = _batch_response_cache(
|
|
334
|
+
args,
|
|
335
|
+
command="view",
|
|
336
|
+
layer=args.layer,
|
|
337
|
+
query=args.query,
|
|
338
|
+
output_format=args.format,
|
|
339
|
+
)
|
|
340
|
+
cached = store.load(cache_key)
|
|
341
|
+
if cached is not None:
|
|
342
|
+
sys.stdout.write(cached.decode("utf-8"))
|
|
343
|
+
return
|
|
326
344
|
if args.layer == "references":
|
|
327
345
|
payload = build_references_payload(
|
|
328
346
|
args.root,
|
|
@@ -330,40 +348,112 @@ def _view(args: argparse.Namespace) -> None:
|
|
|
330
348
|
project_file=args.project_file,
|
|
331
349
|
workers=args.workers,
|
|
332
350
|
)
|
|
333
|
-
|
|
334
|
-
|
|
351
|
+
rendered = render_payload(payload, output_format=args.format)
|
|
352
|
+
elif args.layer == "metrics":
|
|
353
|
+
payload = build_metrics_payload(
|
|
354
|
+
args.root,
|
|
355
|
+
query=args.query,
|
|
356
|
+
project_file=args.project_file,
|
|
357
|
+
workers=args.workers,
|
|
358
|
+
discovery=snapshot.discovery,
|
|
335
359
|
)
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
360
|
+
if args.format == "json":
|
|
361
|
+
rendered = _json_text(payload)
|
|
362
|
+
else:
|
|
363
|
+
rendered = render_payload(payload, output_format=args.format)
|
|
364
|
+
else:
|
|
365
|
+
index = build_codebase_index(
|
|
366
|
+
args.root,
|
|
367
|
+
project_file=args.project_file,
|
|
368
|
+
index_projects=args.deep_projects,
|
|
369
|
+
workers=args.workers,
|
|
370
|
+
use_artifact_cache=False,
|
|
371
|
+
discovery=snapshot.discovery,
|
|
372
|
+
)
|
|
373
|
+
rendered = render_layer(
|
|
374
|
+
index,
|
|
375
|
+
args.layer,
|
|
376
|
+
query=args.query,
|
|
377
|
+
output_format=args.format,
|
|
378
|
+
)
|
|
379
|
+
encoded = rendered.encode("utf-8")
|
|
380
|
+
_store_batch_response(store, cache_key, encoded)
|
|
381
|
+
sys.stdout.write(rendered)
|
|
344
382
|
|
|
345
383
|
|
|
346
384
|
def _index(args: argparse.Namespace) -> None:
|
|
347
385
|
args.root = _workspace_root(args.root)
|
|
348
386
|
args.project_file = _project_file(args.root, args.project_file)
|
|
349
387
|
output = _resolve_output_path(args.root, args.out)
|
|
350
|
-
|
|
351
|
-
args
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
388
|
+
store, cache_key, snapshot = _batch_response_cache(
|
|
389
|
+
args,
|
|
390
|
+
command="index",
|
|
391
|
+
layer="",
|
|
392
|
+
query="",
|
|
393
|
+
output_format="json",
|
|
355
394
|
)
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
395
|
+
encoded = store.load(cache_key)
|
|
396
|
+
if encoded is None:
|
|
397
|
+
index = build_codebase_index(
|
|
398
|
+
args.root,
|
|
399
|
+
project_file=args.project_file,
|
|
400
|
+
index_projects=args.deep_projects,
|
|
401
|
+
workers=args.workers,
|
|
402
|
+
use_artifact_cache=False,
|
|
403
|
+
discovery=snapshot.discovery,
|
|
404
|
+
)
|
|
405
|
+
payload = {
|
|
406
|
+
"deep_projects": bool(args.deep_projects),
|
|
407
|
+
"overview": layer_payload(index, "overview"),
|
|
408
|
+
"projects": layer_payload(index, "projects"),
|
|
409
|
+
"problems": layer_payload(index, "problems"),
|
|
410
|
+
}
|
|
411
|
+
encoded = (json.dumps(payload, indent=2, sort_keys=True) + "\n").encode(
|
|
412
|
+
"utf-8"
|
|
413
|
+
)
|
|
414
|
+
_store_batch_response(store, cache_key, encoded)
|
|
362
415
|
output.parent.mkdir(parents=True, exist_ok=True)
|
|
363
|
-
output.
|
|
416
|
+
output.write_bytes(encoded)
|
|
364
417
|
print(output)
|
|
365
418
|
|
|
366
419
|
|
|
420
|
+
def _batch_response_cache(
|
|
421
|
+
args: argparse.Namespace,
|
|
422
|
+
*,
|
|
423
|
+
command: str,
|
|
424
|
+
layer: str,
|
|
425
|
+
query: str,
|
|
426
|
+
output_format: str,
|
|
427
|
+
) -> tuple[ResponseCacheStore, ResponseCacheKey, WorkspaceContentSnapshot]:
|
|
428
|
+
snapshot = workspace_content_snapshot(
|
|
429
|
+
args.root,
|
|
430
|
+
project_file=args.project_file,
|
|
431
|
+
)
|
|
432
|
+
return (
|
|
433
|
+
ResponseCacheStore(args.root / ".delphi-lsp" / "response-cache"),
|
|
434
|
+
ResponseCacheKey(
|
|
435
|
+
workspace_revision=snapshot.revision,
|
|
436
|
+
command=command,
|
|
437
|
+
layer=layer,
|
|
438
|
+
query=query,
|
|
439
|
+
output_format=output_format,
|
|
440
|
+
deep_projects=bool(args.deep_projects),
|
|
441
|
+
),
|
|
442
|
+
snapshot,
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
def _store_batch_response(
|
|
447
|
+
store: ResponseCacheStore,
|
|
448
|
+
key: ResponseCacheKey,
|
|
449
|
+
payload: bytes,
|
|
450
|
+
) -> None:
|
|
451
|
+
try:
|
|
452
|
+
store.store(key, payload)
|
|
453
|
+
except (OSError, ValueError):
|
|
454
|
+
pass
|
|
455
|
+
|
|
456
|
+
|
|
367
457
|
def _wiki_export(args: argparse.Namespace) -> None:
|
|
368
458
|
args.root = _workspace_root(args.root)
|
|
369
459
|
args.project_file = _project_file(args.root, args.project_file)
|
|
@@ -518,7 +608,11 @@ def _open_worker_context(
|
|
|
518
608
|
|
|
519
609
|
|
|
520
610
|
def _write_json(payload: object) -> None:
|
|
521
|
-
sys.stdout.write(
|
|
611
|
+
sys.stdout.write(_json_text(payload))
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
def _json_text(payload: object) -> str:
|
|
615
|
+
return json.dumps(payload, sort_keys=True, separators=(",", ":")) + "\n"
|
|
522
616
|
|
|
523
617
|
|
|
524
618
|
def _write_warning(warning: str) -> None:
|