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.
Files changed (410) hide show
  1. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/MANIFEST.in +1 -0
  2. {python_delphi_lsp-3.3.0/python_delphi_lsp.egg-info → python_delphi_lsp-3.4.0}/PKG-INFO +17 -2
  3. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/README.md +16 -1
  4. python_delphi_lsp-3.4.0/delphi_lsp/_version.py +1 -0
  5. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cache.py +110 -55
  6. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cli.py +117 -23
  7. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_context.py +668 -72
  8. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_layers.py +218 -29
  9. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_metrics.py +227 -15
  10. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_relations.py +475 -50
  11. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_wiki.py +16 -7
  12. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_workspace.py +18 -0
  13. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/delphiast_lexer.py +156 -39
  14. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/delphiast_parser.py +336 -48
  15. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/delphiast_tokens.py +4 -4
  16. python_delphi_lsp-3.4.0/delphi_lsp/incremental.py +1139 -0
  17. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/lark_builder.py +6 -3
  18. python_delphi_lsp-3.4.0/delphi_lsp/lsp_server.py +6693 -0
  19. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/metrics.py +654 -75
  20. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/navigation_cache.py +2 -2
  21. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/nodes.py +93 -2
  22. python_delphi_lsp-3.4.0/delphi_lsp/parallel_outline.py +621 -0
  23. python_delphi_lsp-3.4.0/delphi_lsp/parse_artifacts.py +969 -0
  24. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/parser.py +21 -2
  25. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/parser_backend.py +13 -2
  26. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/preprocessor.py +28 -14
  27. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/project_config.py +22 -4
  28. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/project_indexer.py +31 -7
  29. python_delphi_lsp-3.4.0/delphi_lsp/response_cache.py +465 -0
  30. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/semantic.py +4 -1
  31. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/semantic_builder.py +746 -21
  32. python_delphi_lsp-3.4.0/docs/release-3.4.0.md +97 -0
  33. python_delphi_lsp-3.4.0/docs/superpowers/plans/2026-08-04-release-performance-unblock.md +384 -0
  34. python_delphi_lsp-3.4.0/docs/superpowers/specs/2026-08-04-release-performance-unblock-design.md +190 -0
  35. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/pyproject.toml +1 -1
  36. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0/python_delphi_lsp.egg-info}/PKG-INFO +17 -2
  37. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/SOURCES.txt +16 -0
  38. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/audit_delphi_language_features.py +1 -1
  39. python_delphi_lsp-3.4.0/scripts/benchmark_response_cache.py +222 -0
  40. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/outline_gap_detector.py +199 -21
  41. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cache.py +402 -2
  42. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cli_content.py +67 -0
  43. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_codebase.py +208 -0
  44. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_context.py +735 -0
  45. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_metrics.py +219 -0
  46. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_relations.py +1238 -44
  47. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_wiki.py +43 -1
  48. python_delphi_lsp-3.4.0/tests/test_artifact_cache_cpu_smoke.py +116 -0
  49. python_delphi_lsp-3.4.0/tests/test_artifact_cache_integration.py +315 -0
  50. python_delphi_lsp-3.4.0/tests/test_delphiast_lexer.py +284 -0
  51. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphiast_native_compatibility.py +54 -1
  52. python_delphi_lsp-3.4.0/tests/test_delphiast_parser_linearity.py +255 -0
  53. python_delphi_lsp-3.4.0/tests/test_incremental.py +296 -0
  54. python_delphi_lsp-3.4.0/tests/test_incremental_performance.py +58 -0
  55. python_delphi_lsp-3.4.0/tests/test_incremental_property.py +560 -0
  56. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_lsp_features.py +415 -0
  57. python_delphi_lsp-3.4.0/tests/test_lsp_server.py +4005 -0
  58. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_lsp_support.py +62 -10
  59. python_delphi_lsp-3.4.0/tests/test_metrics.py +604 -0
  60. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_navigation_cache.py +5 -0
  61. python_delphi_lsp-3.4.0/tests/test_outline_gap_detector.py +469 -0
  62. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_package_metadata.py +22 -3
  63. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_parallel_outline.py +127 -2
  64. python_delphi_lsp-3.4.0/tests/test_parse_artifacts.py +230 -0
  65. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_parser_backends.py +2 -2
  66. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_preprocessor.py +40 -0
  67. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_project_indexer.py +75 -0
  68. python_delphi_lsp-3.4.0/tests/test_response_cache.py +329 -0
  69. python_delphi_lsp-3.4.0/tests/test_response_cache_benchmark.py +53 -0
  70. python_delphi_lsp-3.4.0/tests/test_semantic.py +987 -0
  71. python_delphi_lsp-3.3.0/delphi_lsp/_version.py +0 -1
  72. python_delphi_lsp-3.3.0/delphi_lsp/lsp_server.py +0 -2855
  73. python_delphi_lsp-3.3.0/delphi_lsp/parallel_outline.py +0 -316
  74. python_delphi_lsp-3.3.0/tests/test_delphiast_lexer.py +0 -122
  75. python_delphi_lsp-3.3.0/tests/test_lsp_server.py +0 -901
  76. python_delphi_lsp-3.3.0/tests/test_metrics.py +0 -275
  77. python_delphi_lsp-3.3.0/tests/test_outline_gap_detector.py +0 -156
  78. python_delphi_lsp-3.3.0/tests/test_semantic.py +0 -283
  79. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/.github/workflows/ci.yml +0 -0
  80. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/LICENSE +0 -0
  81. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/__init__.py +0 -0
  82. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cpg.py +0 -0
  83. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_cpg_builder.py +0 -0
  84. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_protocol.py +0 -0
  85. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/agent_templates.py +0 -0
  86. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/binary.py +0 -0
  87. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/comment_builder.py +0 -0
  88. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/consts.py +0 -0
  89. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/grammar.py +0 -0
  90. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/lark_tokens.py +0 -0
  91. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/lexical_scanner.py +0 -0
  92. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/progress.py +0 -0
  93. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/project_discovery.py +0 -0
  94. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/py.typed +0 -0
  95. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/source_reader.py +0 -0
  96. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/workspace.py +0 -0
  97. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/delphi_lsp/writer.py +0 -0
  98. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/performance-delphi.md +0 -0
  99. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/performance-fpc.md +0 -0
  100. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-2.3.0.md +0 -0
  101. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-2.3.3.md +0 -0
  102. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.0.0.md +0 -0
  103. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.1.0.md +0 -0
  104. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.1.1.md +0 -0
  105. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.1.2.md +0 -0
  106. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.2.0.md +0 -0
  107. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.2.1.md +0 -0
  108. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.2.2.md +0 -0
  109. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/release-3.3.0.md +0 -0
  110. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-16-architecture-metrics-implementation.md +0 -0
  111. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-17-large-codebase-performance.md +0 -0
  112. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-22-conditional-outline-ranges.md +0 -0
  113. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-2.3-performance.md +0 -0
  114. {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
  115. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-delphiast-python-backend.md +0 -0
  116. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-23-parallel-cache-prewarming.md +0 -0
  117. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-24-hybrid-cpg.md +0 -0
  118. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-24-repository-default-navigation.md +0 -0
  119. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-27-okf-memory-progress.md +0 -0
  120. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-27-okf-wiki-export.md +0 -0
  121. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/plans/2026-07-27-project-path-configuration.md +0 -0
  122. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-16-architecture-metrics-design.md +0 -0
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/docs/superpowers/specs/2026-07-24-hybrid-cpg-design.md +0 -0
  130. {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
  131. {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
  132. {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
  133. {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
  134. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/opencode.json +0 -0
  135. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
  136. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
  137. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/requires.txt +0 -0
  138. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/python_delphi_lsp.egg-info/top_level.txt +0 -0
  139. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_cpg.py +0 -0
  140. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_fpc_corpus.py +0 -0
  141. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_github_corpus.py +0 -0
  142. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/benchmark_parallel_cache.py +0 -0
  143. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
  144. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
  145. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_opencode_test.py +0 -0
  146. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
  147. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/build_github_performance_corpus.py +0 -0
  148. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/check_ornith_cache.py +0 -0
  149. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/generate_progress_pdf.py +0 -0
  150. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/generate_release_evidence.py +0 -0
  151. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
  152. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/prepare_delphi_corpus.py +0 -0
  153. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/prepare_fpc_corpus.py +0 -0
  154. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/prepare_ornith_cache.py +0 -0
  155. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/run_opencode_lsp_probe.py +0 -0
  156. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/run_openrouter_github_e2e.py +0 -0
  157. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/start_ornith_vllm.sh +0 -0
  158. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/scripts/summarize_opencode_request_payloads.py +0 -0
  159. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/setup.cfg +0 -0
  160. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.AssertFailureCompare.pas +0 -0
  161. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.EqualityAsserts.pas +0 -0
  162. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.General.pas +0 -0
  163. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitX.Examples.UITest.pas +0 -0
  164. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_2010.dpr +0 -0
  165. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Berlin.dpr +0 -0
  166. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Rio.dpr +0 -0
  167. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Seattle.dpr +0 -0
  168. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Sydney.dpr +0 -0
  169. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D10Tokyo.dpr +0 -0
  170. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D11Alexandria.dpr +0 -0
  171. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D12Athens.dpr +0 -0
  172. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_D13.dpr +0 -0
  173. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE.dpr +0 -0
  174. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE2.dpr +0 -0
  175. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE3.dpr +0 -0
  176. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE4.dpr +0 -0
  177. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE5.dpr +0 -0
  178. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE6.dpr +0 -0
  179. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE7.dpr +0 -0
  180. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXExamples_XE8.dpr +0 -0
  181. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Berlin.dpr +0 -0
  182. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Seattle.dpr +0 -0
  183. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_D10Tokyo.dpr +0 -0
  184. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE5.dpr +0 -0
  185. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE6.dpr +0 -0
  186. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE7.dpr +0 -0
  187. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXFiremonkeyGUI_XE8.dpr +0 -0
  188. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Berlin.dpr +0 -0
  189. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_D10Seattle.dpr +0 -0
  190. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE.dpr +0 -0
  191. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/DUnitXVCLGUI_XE7.dpr +0 -0
  192. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/NonNamespacedExample.pas +0 -0
  193. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Examples/ProviderExample.pas +0 -0
  194. {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
  195. {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
  196. {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
  197. {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
  198. {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
  199. {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
  200. {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
  201. {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
  202. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizard.pas +0 -0
  203. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.NewUnitWizardEx.pas +0 -0
  204. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizard.pas +0 -0
  205. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.ProjectWizardEx.pas +0 -0
  206. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Expert/DUnitX.Expert.Registration.pas +0 -0
  207. {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
  208. {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
  209. {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
  210. {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
  211. {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
  212. {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
  213. {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
  214. {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
  215. {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
  216. {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
  217. {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
  218. {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
  219. {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
  220. {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
  221. {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
  222. {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
  223. {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
  224. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/LICENSE.txt +0 -0
  225. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.GUIX.pas +0 -0
  226. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUNitX.Loggers.MobileGUI.pas +0 -0
  227. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.Ex.pas +0 -0
  228. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Assert.pas +0 -0
  229. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Attributes.pas +0 -0
  230. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.AutoDetect.Console.pas +0 -0
  231. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Banner.pas +0 -0
  232. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CategoryExpression.pas +0 -0
  233. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.OptionDef.pas +0 -0
  234. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Options.pas +0 -0
  235. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.CommandLine.Parser.pas +0 -0
  236. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Csv.pas +0 -0
  237. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.Xml.pas +0 -0
  238. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ComparableFormat.pas +0 -0
  239. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ConsoleWriter.Base.pas +0 -0
  240. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Constants.pas +0 -0
  241. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.DUnitCompatibility.pas +0 -0
  242. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Exceptions.pas +0 -0
  243. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Extensibility.pas +0 -0
  244. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FilterBuilder.pas +0 -0
  245. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Filters.pas +0 -0
  246. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureBuilder.pas +0 -0
  247. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureProvider.pas +0 -0
  248. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.FixtureResult.pas +0 -0
  249. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Generics.pas +0 -0
  250. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Helpers.pas +0 -0
  251. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Init.pas +0 -0
  252. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalDataProvider.pas +0 -0
  253. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.InternalInterfaces.pas +0 -0
  254. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Linux.Console.pas +0 -0
  255. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Console.pas +0 -0
  256. {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
  257. {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
  258. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Null.pas +0 -0
  259. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Loggers.Text.pas +0 -0
  260. {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
  261. {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
  262. {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
  263. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MacOS.Console.pas +0 -0
  264. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.Default.pas +0 -0
  265. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM4.pas +0 -0
  266. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeakMonitor.FastMM5.pas +0 -0
  267. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.MemoryLeaks.inc +0 -0
  268. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.OptionsDefinition.pas +0 -0
  269. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ResStrs.pas +0 -0
  270. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.RunResults.pas +0 -0
  271. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.ServiceLocator.pas +0 -0
  272. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.EurekaLog7.pas +0 -0
  273. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.JCL.pas +0 -0
  274. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept3.pas +0 -0
  275. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept4.pas +0 -0
  276. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.StackTrace.MadExcept5.pas +0 -0
  277. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Stacktrace.inc +0 -0
  278. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Test.pas +0 -0
  279. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestDataProvider.pas +0 -0
  280. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFixture.pas +0 -0
  281. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestFramework.pas +0 -0
  282. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestNameParser.pas +0 -0
  283. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestResult.pas +0 -0
  284. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.TestRunner.pas +0 -0
  285. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Timeout.pas +0 -0
  286. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Types.pas +0 -0
  287. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.XML.pas +0 -0
  288. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Utils.pas +0 -0
  289. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.WeakReference.pas +0 -0
  290. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.Windows.Console.pas +0 -0
  291. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Source/DUnitX.inc +0 -0
  292. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Options.pas +0 -0
  293. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.SingleNameSpace.pas +0 -0
  294. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Stacktrace.inc +0 -0
  295. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Assert.pas +0 -0
  296. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CategoryParser.pas +0 -0
  297. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.CommandLineParser.pas +0 -0
  298. {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
  299. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.DUnitCompatibility.pas +0 -0
  300. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Example.pas +0 -0
  301. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Framework.pas +0 -0
  302. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IgnoreFixture.pas +0 -0
  303. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Inheritance.pas +0 -0
  304. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.IoC.pas +0 -0
  305. {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
  306. {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
  307. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.MemoryLeaks.pas +0 -0
  308. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestDataProvider.pas +0 -0
  309. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestFixture.pas +0 -0
  310. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.TestNameParser.pas +0 -0
  311. {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
  312. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.Utils.pas +0 -0
  313. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitX.Tests.WeakReference.pas +0 -0
  314. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXGuiTest.dpr +0 -0
  315. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXTestProject.dpr +0 -0
  316. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_D2010.dpr +0 -0
  317. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/DUnitX/Tests/DUnitXTest_XE.dpr +0 -0
  318. {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
  319. {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
  320. {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
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {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
  330. {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
  331. {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
  332. {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
  333. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/mORMot2/LICENCE.md +0 -0
  334. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/test_projects/github_repos/mORMot2/src/mormot.defines.inc +0 -0
  335. {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
  336. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/corpora.performance.lock.json +0 -0
  337. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
  338. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
  339. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
  340. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/constset.pas +0 -0
  341. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
  342. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
  343. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
  344. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
  345. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
  346. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
  347. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
  348. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
  349. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
  350. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
  351. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
  352. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
  353. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
  354. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
  355. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
  356. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
  357. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
  358. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
  359. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
  360. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
  361. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/properties.pas +0 -0
  362. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
  363. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
  364. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
  365. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
  366. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/library_demo.dpr +0 -0
  367. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/package_demo.dpk +0 -0
  368. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/program_demo.dpr +0 -0
  369. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_advanced.pas +0 -0
  370. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_attributes.pas +0 -0
  371. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_basic.pas +0 -0
  372. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_consumer.pas +0 -0
  373. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_generics.pas +0 -0
  374. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_inheritance.pas +0 -0
  375. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_math.pas +0 -0
  376. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_properties.pas +0 -0
  377. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_sections.pas +0 -0
  378. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_statements.pas +0 -0
  379. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_types.pas +0 -0
  380. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_unresolved.pas +0 -0
  381. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fixtures/unit_with.pas +0 -0
  382. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/fpc_parse_quality.baseline.json +0 -0
  383. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cli_errors.py +0 -0
  384. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_cpg.py +0 -0
  385. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_protocol.py +0 -0
  386. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_worker.py +0 -0
  387. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_agent_workspace.py +0 -0
  388. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
  389. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_bootstrap_vllm_opencode.py +0 -0
  390. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphi_performance_corpus.py +0 -0
  391. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphiast_parser.py +0 -0
  392. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_delphiast_semantic_compatibility.py +0 -0
  393. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_diagnostics.py +0 -0
  394. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_fpc_performance_corpus.py +0 -0
  395. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_github_performance_corpus.py +0 -0
  396. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_language_feature_matrix.py +0 -0
  397. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_legacy_snippets.py +0 -0
  398. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_opencode_config.py +0 -0
  399. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_opencode_probe.py +0 -0
  400. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_opencode_request_payloads.py +0 -0
  401. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_openrouter_github_e2e.py +0 -0
  402. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_ornith_cache_prepare.py +0 -0
  403. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_parser.py +0 -0
  404. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_progress.py +0 -0
  405. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_project_config.py +0 -0
  406. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_project_discovery.py +0 -0
  407. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_release_evidence.py +0 -0
  408. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_throughput_scaling.py +0 -0
  409. {python_delphi_lsp-3.3.0 → python_delphi_lsp-3.4.0}/tests/test_vllm_start_script.py +0 -0
  410. {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.0
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.3.0 is authored by Dark Light and supports Windows, macOS, and Linux.
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.3.0 is authored by Dark Light and supports Windows, macOS, and Linux.
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
- rss_bytes > 0
400
- and rss_bytes > self._service.metadata.max_memory_bytes
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 RSS memory budget.",
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
- self.cache_state = "ready"
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
- with self.lock:
926
- self.last_activity = time.monotonic()
927
- before = self.last_revision
928
- was_warm = self.context.navigation_cache_is_warm
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
- try:
931
- handled = (
932
- self.context.handle(request)
933
- if cancel_check is None
934
- else self.context.handle(
935
- request,
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
- response = handled.to_mapping()
940
- except CacheClientError:
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
- "internal_error",
955
- "Internal cache error.",
956
- ) from None
957
- finally:
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
- after = str(response["workspace_revision"])
960
- self.last_revision = after
961
- self.stats.requests += 1
962
- if was_warm:
963
- self.stats.warm_hits += 1
964
- else:
965
- self.stats.rebuilds += 1
966
- self.stats.parallel_fallbacks += (
967
- self.context.parallel_stats.fallbacks
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
- guard = (
1146
- _RequestGuard(service, connection)
1147
- if request.get("action") in {"trace", "cpg"}
1148
- else None
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
- sys.stdout.write(
334
- render_payload(payload, output_format=args.format)
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
- return
337
- index = build_codebase_index(
338
- args.root,
339
- project_file=args.project_file,
340
- index_projects=args.deep_projects,
341
- workers=args.workers,
342
- )
343
- sys.stdout.write(render_layer(index, args.layer, query=args.query, output_format=args.format))
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
- index = build_codebase_index(
351
- args.root,
352
- project_file=args.project_file,
353
- index_projects=args.deep_projects,
354
- workers=args.workers,
388
+ store, cache_key, snapshot = _batch_response_cache(
389
+ args,
390
+ command="index",
391
+ layer="",
392
+ query="",
393
+ output_format="json",
355
394
  )
356
- payload = {
357
- "deep_projects": bool(args.deep_projects),
358
- "overview": layer_payload(index, "overview"),
359
- "projects": layer_payload(index, "projects"),
360
- "problems": layer_payload(index, "problems"),
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.write_text(json.dumps(payload, indent=2, sort_keys=True) + "\n", encoding="utf-8")
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(json.dumps(payload, ensure_ascii=False, sort_keys=True, separators=(",", ":")) + "\n")
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: