python-delphi-lsp 3.1.0__tar.gz → 3.1.1__tar.gz

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