python-delphi-lsp 2.0.5__tar.gz → 2.2.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 (151) hide show
  1. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/.github/workflows/ci.yml +1 -0
  2. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/MANIFEST.in +1 -0
  3. {python_delphi_lsp-2.0.5/python_delphi_lsp.egg-info → python_delphi_lsp-2.2.0}/PKG-INFO +40 -4
  4. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/README.md +38 -3
  5. python_delphi_lsp-2.2.0/delphi_lsp/_version.py +1 -0
  6. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_cache.py +257 -38
  7. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_cli.py +44 -5
  8. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_context.py +385 -50
  9. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_layers.py +32 -21
  10. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_relations.py +28 -3
  11. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_workspace.py +35 -0
  12. python_delphi_lsp-2.2.0/delphi_lsp/delphiast_lexer.py +284 -0
  13. python_delphi_lsp-2.2.0/delphi_lsp/delphiast_parser.py +1498 -0
  14. python_delphi_lsp-2.2.0/delphi_lsp/delphiast_tokens.py +41 -0
  15. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/metrics.py +35 -1
  16. python_delphi_lsp-2.2.0/delphi_lsp/parallel_outline.py +317 -0
  17. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/parser.py +54 -4
  18. python_delphi_lsp-2.2.0/delphi_lsp/parser_backend.py +57 -0
  19. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/project_indexer.py +32 -1
  20. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/pyproject.toml +2 -1
  21. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0/python_delphi_lsp.egg-info}/PKG-INFO +40 -4
  22. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/python_delphi_lsp.egg-info/SOURCES.txt +12 -0
  23. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/python_delphi_lsp.egg-info/requires.txt +1 -0
  24. python_delphi_lsp-2.2.0/scripts/benchmark_parallel_cache.py +71 -0
  25. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_cache.py +285 -11
  26. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_codebase.py +27 -1
  27. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_context.py +184 -25
  28. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_worker.py +48 -3
  29. python_delphi_lsp-2.2.0/tests/test_delphiast_lexer.py +97 -0
  30. python_delphi_lsp-2.2.0/tests/test_delphiast_native_compatibility.py +364 -0
  31. python_delphi_lsp-2.2.0/tests/test_delphiast_parser.py +121 -0
  32. python_delphi_lsp-2.2.0/tests/test_delphiast_semantic_compatibility.py +74 -0
  33. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_lsp_support.py +15 -10
  34. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_package_metadata.py +4 -3
  35. python_delphi_lsp-2.2.0/tests/test_parallel_outline.py +450 -0
  36. python_delphi_lsp-2.2.0/tests/test_parser_backends.py +135 -0
  37. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_progress.py +48 -3
  38. python_delphi_lsp-2.0.5/delphi_lsp/_version.py +0 -1
  39. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/LICENSE +0 -0
  40. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/__init__.py +0 -0
  41. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_metrics.py +0 -0
  42. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_protocol.py +0 -0
  43. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/agent_templates.py +0 -0
  44. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/binary.py +0 -0
  45. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/comment_builder.py +0 -0
  46. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/consts.py +0 -0
  47. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/grammar.py +0 -0
  48. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/lark_builder.py +0 -0
  49. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/lark_tokens.py +0 -0
  50. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/lsp_server.py +0 -0
  51. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/nodes.py +0 -0
  52. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/preprocessor.py +0 -0
  53. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/progress.py +0 -0
  54. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/project_discovery.py +0 -0
  55. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/semantic.py +0 -0
  56. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/semantic_builder.py +0 -0
  57. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/source_reader.py +0 -0
  58. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/workspace.py +0 -0
  59. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/delphi_lsp/writer.py +0 -0
  60. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/opencode.json +0 -0
  61. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
  62. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
  63. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/python_delphi_lsp.egg-info/top_level.txt +0 -0
  64. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/audit_delphi_language_features.py +0 -0
  65. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/benchmark_github_corpus.py +0 -0
  66. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
  67. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
  68. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/bootstrap_vllm_opencode_test.py +0 -0
  69. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
  70. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/build_github_performance_corpus.py +0 -0
  71. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/check_ornith_cache.py +0 -0
  72. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/generate_progress_pdf.py +0 -0
  73. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/generate_release_evidence.py +0 -0
  74. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
  75. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/prepare_ornith_cache.py +0 -0
  76. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/run_opencode_lsp_probe.py +0 -0
  77. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/run_openrouter_github_e2e.py +0 -0
  78. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/start_ornith_vllm.sh +0 -0
  79. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/scripts/summarize_opencode_request_payloads.py +0 -0
  80. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/setup.cfg +0 -0
  81. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/corpora.performance.lock.json +0 -0
  82. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
  83. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
  84. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
  85. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/constset.pas +0 -0
  86. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
  87. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
  88. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
  89. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
  90. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
  91. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
  92. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
  93. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
  94. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
  95. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
  96. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
  97. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
  98. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
  99. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
  100. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
  101. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
  102. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
  103. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
  104. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
  105. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
  106. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/properties.pas +0 -0
  107. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
  108. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
  109. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
  110. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
  111. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/library_demo.dpr +0 -0
  112. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/package_demo.dpk +0 -0
  113. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/program_demo.dpr +0 -0
  114. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_advanced.pas +0 -0
  115. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_attributes.pas +0 -0
  116. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_basic.pas +0 -0
  117. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_consumer.pas +0 -0
  118. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_generics.pas +0 -0
  119. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_inheritance.pas +0 -0
  120. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_math.pas +0 -0
  121. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_properties.pas +0 -0
  122. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_sections.pas +0 -0
  123. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_statements.pas +0 -0
  124. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_types.pas +0 -0
  125. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_unresolved.pas +0 -0
  126. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/fixtures/unit_with.pas +0 -0
  127. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_metrics.py +0 -0
  128. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_protocol.py +0 -0
  129. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_relations.py +0 -0
  130. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_agent_workspace.py +0 -0
  131. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
  132. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_bootstrap_vllm_opencode.py +0 -0
  133. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_diagnostics.py +0 -0
  134. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_github_performance_corpus.py +0 -0
  135. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_language_feature_matrix.py +0 -0
  136. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_legacy_snippets.py +0 -0
  137. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_lsp_features.py +0 -0
  138. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_metrics.py +0 -0
  139. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_opencode_config.py +0 -0
  140. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_opencode_probe.py +0 -0
  141. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_opencode_request_payloads.py +0 -0
  142. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_openrouter_github_e2e.py +0 -0
  143. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_ornith_cache_prepare.py +0 -0
  144. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_parser.py +0 -0
  145. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_preprocessor.py +0 -0
  146. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_project_discovery.py +0 -0
  147. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_project_indexer.py +0 -0
  148. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_release_evidence.py +0 -0
  149. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_semantic.py +0 -0
  150. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_vllm_start_script.py +0 -0
  151. {python_delphi_lsp-2.0.5 → python_delphi_lsp-2.2.0}/tests/test_workspace.py +0 -0
@@ -2,6 +2,7 @@ name: CI
2
2
 
3
3
  on:
4
4
  push:
5
+ branches: [main]
5
6
  pull_request:
6
7
 
7
8
  jobs:
@@ -6,6 +6,7 @@ include scripts/check_ornith_cache.py
6
6
  include scripts/audit_delphi_language_features.py
7
7
  include scripts/build_github_performance_corpus.py
8
8
  include scripts/benchmark_github_corpus.py
9
+ include scripts/benchmark_parallel_cache.py
9
10
  include scripts/bootstrap_vllm_opencode_test.py
10
11
  include scripts/bootstrap_vllm_codebase_skill_test.py
11
12
  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: 2.0.5
3
+ Version: 2.2.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
@@ -24,6 +24,7 @@ License-File: LICENSE
24
24
  Requires-Dist: lark>=1.1.9
25
25
  Requires-Dist: pygls<2.0,>=1.3.0
26
26
  Requires-Dist: lsprotocol>=2023.0.1
27
+ Requires-Dist: watchfiles<2.0,>=1.2
27
28
  Provides-Extra: lsp
28
29
  Requires-Dist: pygls<2.0,>=1.3.0; extra == "lsp"
29
30
  Requires-Dist: lsprotocol>=2023.0.1; extra == "lsp"
@@ -41,7 +42,7 @@ Dynamic: license-file
41
42
 
42
43
  `python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
43
44
  indexes, serves LSP, and provides bounded codebase navigation for agents.
44
- Version 2.0.5 is authored by Dark Light and supports Windows, macOS, and Linux.
45
+ Version 2.2.0 is authored by Dark Light and supports Windows, macOS, and Linux.
45
46
 
46
47
  ## Install and quick start
47
48
 
@@ -186,12 +187,15 @@ problems; paths are not guessed.
186
187
 
187
188
  ```text
188
189
  delphi-lsp-agent cache start --root PATH [--project-file FILE] [--max-memory 512M]
190
+ [--workers auto|N] [--startup-timeout 120]
189
191
  [--idle-timeout 1800]
190
192
  delphi-lsp-agent cache status --root PATH [--format text|json]
191
193
  delphi-lsp-agent cache stop --root PATH
192
194
  delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
193
195
  [--query TEXT] [--format markdown|json] [--deep-projects]
196
+ [--workers auto|N]
194
197
  delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
198
+ [--workers auto|N]
195
199
  delphi-lsp-agent query --root PATH ACTION [VALUE]
196
200
  [--project-id FILE] [--detail summary|declaration|members|context|body|implementations]
197
201
  [--relation references|callers|callees|uses|used_by|inherits|implements]
@@ -199,7 +203,7 @@ delphi-lsp-agent query --root PATH ACTION [VALUE]
199
203
  delphi-lsp-agent skill install [--target PATH] [--force]
200
204
  delphi-lsp-agent opencode install [--target PATH] [--python PYTHON]
201
205
  [--force] [--write-agent|--write-config]
202
- delphi-lsp-agent worker --root PATH [--project-file FILE]
206
+ delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
203
207
  ```
204
208
 
205
209
  The `cache` commands manage one daemon per canonical root. Use these:
@@ -233,6 +237,36 @@ fast. The cache retained-cache budget is `512 MiB` by default and tracks retaine
233
237
  cache usage only, not a hard RSS/parse peak. Warnings are emitted on stderr at or
234
238
  above 80 percent.
235
239
 
240
+ Cold builds parse independent source units in short-lived processes created with
241
+ the cross-platform `spawn` method. `--workers auto|N` defaults to `auto`.
242
+ Automatic selection uses at most eight worker processes, leaves one detected CPU
243
+ free, never exceeds the source task count, and—for the cache daemon—allows one
244
+ worker per `64 MiB` of retained-cache budget. `view` and `index` use the same
245
+ task, CPU, and eight-worker caps without the cache-budget term. An explicit value
246
+ from 1 through 32 overrides the automatic CPU and memory caps but is still
247
+ limited by the number of tasks.
248
+
249
+ Worker processes build compact, detached navigation shards and exit before
250
+ retained-cache accounting. Full semantic object graphs and source text are not
251
+ retained in the parent. Tokenized source documents are loaded only for source
252
+ evidence requests such as `inspect`, and a byte-bounded LRU evicts older
253
+ documents. The transient worker memory remains separate from retained navigation
254
+ structures and the existing 80-percent warning. Retained bytes are maintained
255
+ incrementally; requests never traverse the complete cache object graph merely
256
+ to measure it. If an automatic pool fails before accepting a result, one
257
+ automatic serial fallback is attempted; explicit worker counts fail instead of
258
+ silently changing the requested configuration.
259
+
260
+ Cache prewarming builds the navigation registry directly without constructing
261
+ an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
262
+ recent ranked queries are retained in a small LRU so alternating CLI and
263
+ OpenCode searches remain warm.
264
+
265
+ `cache start` waits up to `--startup-timeout 120` seconds by default for a large
266
+ workspace to prewarm. The timeout belongs to the starting client and does not
267
+ change daemon compatibility or idle shutdown. Starting a live root with a
268
+ different worker configuration reports a configuration conflict.
269
+
236
270
  Eviction is ordered: auxiliary caches are evicted first, navigation caches second.
237
271
  If compaction removes navigable data, the daemon rebuilds the navigation state on demand
238
272
  while preserving focus state for the next request.
@@ -240,7 +274,9 @@ while preserving focus state for the next request.
240
274
  The daemon tracks a 30-minute idle timeout; idle state shows in JSON status (`cache status`).
241
275
  `source revision` changes on source edits and invalidate reused request caches.
242
276
  Workspace state appears in status as `requests`, `warm_hits`, `rebuilds`, `invalidations`,
243
- `evictions`, and `cache_state`.
277
+ `evictions`, and `cache_state`. Parallel prewarm status adds
278
+ `workers_configured`, `workers_effective`, `parallel_files_completed`,
279
+ `prewarm_seconds`, `parallel_seconds`, and `parallel_fallbacks`.
244
280
 
245
281
  Metadata is stored in `.delphi-lsp/agent-cache/daemon.json` with owner-only token and
246
282
  permissions (`daemon.json` mode 600 and parent 700). Do not copy or share this token
@@ -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 2.0.5 is authored by Dark Light and supports Windows, macOS, and Linux.
5
+ Version 2.2.0 is authored by Dark Light and supports Windows, macOS, and Linux.
6
6
 
7
7
  ## Install and quick start
8
8
 
@@ -147,12 +147,15 @@ problems; paths are not guessed.
147
147
 
148
148
  ```text
149
149
  delphi-lsp-agent cache start --root PATH [--project-file FILE] [--max-memory 512M]
150
+ [--workers auto|N] [--startup-timeout 120]
150
151
  [--idle-timeout 1800]
151
152
  delphi-lsp-agent cache status --root PATH [--format text|json]
152
153
  delphi-lsp-agent cache stop --root PATH
153
154
  delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
154
155
  [--query TEXT] [--format markdown|json] [--deep-projects]
156
+ [--workers auto|N]
155
157
  delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
158
+ [--workers auto|N]
156
159
  delphi-lsp-agent query --root PATH ACTION [VALUE]
157
160
  [--project-id FILE] [--detail summary|declaration|members|context|body|implementations]
158
161
  [--relation references|callers|callees|uses|used_by|inherits|implements]
@@ -160,7 +163,7 @@ delphi-lsp-agent query --root PATH ACTION [VALUE]
160
163
  delphi-lsp-agent skill install [--target PATH] [--force]
161
164
  delphi-lsp-agent opencode install [--target PATH] [--python PYTHON]
162
165
  [--force] [--write-agent|--write-config]
163
- delphi-lsp-agent worker --root PATH [--project-file FILE]
166
+ delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
164
167
  ```
165
168
 
166
169
  The `cache` commands manage one daemon per canonical root. Use these:
@@ -194,6 +197,36 @@ fast. The cache retained-cache budget is `512 MiB` by default and tracks retaine
194
197
  cache usage only, not a hard RSS/parse peak. Warnings are emitted on stderr at or
195
198
  above 80 percent.
196
199
 
200
+ Cold builds parse independent source units in short-lived processes created with
201
+ the cross-platform `spawn` method. `--workers auto|N` defaults to `auto`.
202
+ Automatic selection uses at most eight worker processes, leaves one detected CPU
203
+ free, never exceeds the source task count, and—for the cache daemon—allows one
204
+ worker per `64 MiB` of retained-cache budget. `view` and `index` use the same
205
+ task, CPU, and eight-worker caps without the cache-budget term. An explicit value
206
+ from 1 through 32 overrides the automatic CPU and memory caps but is still
207
+ limited by the number of tasks.
208
+
209
+ Worker processes build compact, detached navigation shards and exit before
210
+ retained-cache accounting. Full semantic object graphs and source text are not
211
+ retained in the parent. Tokenized source documents are loaded only for source
212
+ evidence requests such as `inspect`, and a byte-bounded LRU evicts older
213
+ documents. The transient worker memory remains separate from retained navigation
214
+ structures and the existing 80-percent warning. Retained bytes are maintained
215
+ incrementally; requests never traverse the complete cache object graph merely
216
+ to measure it. If an automatic pool fails before accepting a result, one
217
+ automatic serial fallback is attempted; explicit worker counts fail instead of
218
+ silently changing the requested configuration.
219
+
220
+ Cache prewarming builds the navigation registry directly without constructing
221
+ an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
222
+ recent ranked queries are retained in a small LRU so alternating CLI and
223
+ OpenCode searches remain warm.
224
+
225
+ `cache start` waits up to `--startup-timeout 120` seconds by default for a large
226
+ workspace to prewarm. The timeout belongs to the starting client and does not
227
+ change daemon compatibility or idle shutdown. Starting a live root with a
228
+ different worker configuration reports a configuration conflict.
229
+
197
230
  Eviction is ordered: auxiliary caches are evicted first, navigation caches second.
198
231
  If compaction removes navigable data, the daemon rebuilds the navigation state on demand
199
232
  while preserving focus state for the next request.
@@ -201,7 +234,9 @@ while preserving focus state for the next request.
201
234
  The daemon tracks a 30-minute idle timeout; idle state shows in JSON status (`cache status`).
202
235
  `source revision` changes on source edits and invalidate reused request caches.
203
236
  Workspace state appears in status as `requests`, `warm_hits`, `rebuilds`, `invalidations`,
204
- `evictions`, and `cache_state`.
237
+ `evictions`, and `cache_state`. Parallel prewarm status adds
238
+ `workers_configured`, `workers_effective`, `parallel_files_completed`,
239
+ `prewarm_seconds`, `parallel_seconds`, and `parallel_fallbacks`.
205
240
 
206
241
  Metadata is stored in `.delphi-lsp/agent-cache/daemon.json` with owner-only token and
207
242
  permissions (`daemon.json` mode 600 and parent 700). Do not copy or share this token
@@ -0,0 +1 @@
1
+ __version__ = "2.2.0"