python-delphi-lsp 3.0.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.0.0 → python_delphi_lsp-3.1.1}/.github/workflows/ci.yml +9 -1
  2. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/MANIFEST.in +2 -0
  3. {python_delphi_lsp-3.0.0/python_delphi_lsp.egg-info → python_delphi_lsp-3.1.1}/PKG-INFO +132 -5
  4. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/README.md +128 -4
  5. python_delphi_lsp-3.1.1/delphi_lsp/_version.py +1 -0
  6. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cache.py +128 -18
  7. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cli.py +172 -6
  8. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_context.py +164 -43
  9. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_layers.py +211 -62
  10. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_metrics.py +138 -1
  11. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_relations.py +32 -5
  12. python_delphi_lsp-3.1.1/delphi_lsp/agent_wiki.py +1435 -0
  13. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_workspace.py +72 -10
  14. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/delphiast_parser.py +89 -18
  15. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/lsp_server.py +291 -56
  16. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/metrics.py +11 -4
  17. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/navigation_cache.py +56 -0
  18. {python_delphi_lsp-3.0.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.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/project_discovery.py +226 -27
  21. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/project_indexer.py +42 -4
  22. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/semantic.py +0 -2
  23. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/semantic_builder.py +51 -14
  24. {python_delphi_lsp-3.0.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.0.0 → python_delphi_lsp-3.1.1}/pyproject.toml +8 -1
  55. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1/python_delphi_lsp.egg-info}/PKG-INFO +132 -5
  56. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/SOURCES.txt +35 -0
  57. python_delphi_lsp-3.1.1/python_delphi_lsp.egg-info/dependency_links.txt +1 -0
  58. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/requires.txt +5 -0
  59. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_cache.py +110 -0
  60. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_cli_errors.py +142 -1
  61. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_codebase.py +163 -0
  62. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_context.py +119 -0
  63. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_metrics.py +76 -0
  64. python_delphi_lsp-3.1.1/tests/test_agent_wiki.py +682 -0
  65. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_worker.py +100 -7
  66. {python_delphi_lsp-3.0.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.0.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.0.0 → python_delphi_lsp-3.1.1}/tests/test_lsp_support.py +74 -5
  71. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_metrics.py +36 -0
  72. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_navigation_cache.py +32 -0
  73. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_package_metadata.py +47 -3
  74. python_delphi_lsp-3.1.1/tests/test_project_config.py +210 -0
  75. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_project_discovery.py +318 -0
  76. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_project_indexer.py +132 -0
  77. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_semantic.py +1 -0
  78. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_workspace.py +66 -0
  79. python_delphi_lsp-3.0.0/delphi_lsp/_version.py +0 -1
  80. python_delphi_lsp-3.0.0/tests/test_delphiast_parser.py +0 -121
  81. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/LICENSE +0 -0
  82. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/__init__.py +0 -0
  83. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cpg.py +0 -0
  84. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_cpg_builder.py +0 -0
  85. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_protocol.py +0 -0
  86. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/agent_templates.py +0 -0
  87. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/binary.py +0 -0
  88. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/comment_builder.py +0 -0
  89. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/consts.py +0 -0
  90. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/delphiast_lexer.py +0 -0
  91. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/delphiast_tokens.py +0 -0
  92. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/grammar.py +0 -0
  93. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/lark_builder.py +0 -0
  94. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/lark_tokens.py +0 -0
  95. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/nodes.py +0 -0
  96. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/parallel_outline.py +0 -0
  97. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/parser_backend.py +0 -0
  98. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/preprocessor.py +0 -0
  99. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/progress.py +0 -0
  100. /python_delphi_lsp-3.0.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.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/source_reader.py +0 -0
  102. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/delphi_lsp/writer.py +0 -0
  103. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/opencode.json +0 -0
  104. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
  105. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/python_delphi_lsp.egg-info/top_level.txt +0 -0
  106. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/audit_delphi_language_features.py +0 -0
  107. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/benchmark_cpg.py +0 -0
  108. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/benchmark_github_corpus.py +0 -0
  109. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/benchmark_parallel_cache.py +0 -0
  110. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
  111. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
  112. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_opencode_test.py +0 -0
  113. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
  114. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/build_github_performance_corpus.py +0 -0
  115. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/check_ornith_cache.py +0 -0
  116. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/generate_progress_pdf.py +0 -0
  117. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/generate_release_evidence.py +0 -0
  118. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
  119. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/prepare_ornith_cache.py +0 -0
  120. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/run_opencode_lsp_probe.py +0 -0
  121. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/run_openrouter_github_e2e.py +0 -0
  122. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/start_ornith_vllm.sh +0 -0
  123. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/scripts/summarize_opencode_request_payloads.py +0 -0
  124. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/setup.cfg +0 -0
  125. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/corpora.performance.lock.json +0 -0
  126. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
  127. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
  128. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
  129. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/constset.pas +0 -0
  130. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
  131. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
  132. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
  133. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
  134. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
  135. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
  136. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
  137. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
  138. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
  139. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
  140. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
  141. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
  142. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
  143. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
  144. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
  145. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
  146. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
  147. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
  148. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
  149. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
  150. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/properties.pas +0 -0
  151. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
  152. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
  153. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
  154. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
  155. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/library_demo.dpr +0 -0
  156. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/package_demo.dpk +0 -0
  157. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/program_demo.dpr +0 -0
  158. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_advanced.pas +0 -0
  159. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_attributes.pas +0 -0
  160. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_basic.pas +0 -0
  161. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_consumer.pas +0 -0
  162. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_generics.pas +0 -0
  163. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_inheritance.pas +0 -0
  164. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_math.pas +0 -0
  165. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_properties.pas +0 -0
  166. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_sections.pas +0 -0
  167. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_statements.pas +0 -0
  168. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_types.pas +0 -0
  169. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_unresolved.pas +0 -0
  170. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/fixtures/unit_with.pas +0 -0
  171. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_cpg.py +0 -0
  172. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_protocol.py +0 -0
  173. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_agent_relations.py +0 -0
  174. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
  175. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_bootstrap_vllm_opencode.py +0 -0
  176. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_delphiast_lexer.py +0 -0
  177. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_delphiast_native_compatibility.py +0 -0
  178. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_delphiast_semantic_compatibility.py +0 -0
  179. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_diagnostics.py +0 -0
  180. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_github_performance_corpus.py +0 -0
  181. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_language_feature_matrix.py +0 -0
  182. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_legacy_snippets.py +0 -0
  183. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_opencode_config.py +0 -0
  184. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_opencode_probe.py +0 -0
  185. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_opencode_request_payloads.py +0 -0
  186. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_openrouter_github_e2e.py +0 -0
  187. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_ornith_cache_prepare.py +0 -0
  188. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_parallel_outline.py +0 -0
  189. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_parser.py +0 -0
  190. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_parser_backends.py +0 -0
  191. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_preprocessor.py +0 -0
  192. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_progress.py +0 -0
  193. {python_delphi_lsp-3.0.0 → python_delphi_lsp-3.1.1}/tests/test_release_evidence.py +0 -0
  194. {python_delphi_lsp-3.0.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.0.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.0.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,15 +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]
207
+ delphi-lsp-agent wiki export --root PATH [--project-file FILE] [--out DIRECTORY]
208
+ [--workers auto|N] [--force] [--quiet]
202
209
  delphi-lsp-agent query --root PATH ACTION [VALUE]
203
210
  [--project-id ID] [--detail summary|declaration|members|context|body|implementations]
204
211
  [--relation references|callers|callees|uses|used_by|inherits|implements]
@@ -217,12 +224,67 @@ The `cache` commands manage one daemon per canonical root. Use these:
217
224
  delphi-lsp-agent cache start --root PATH
218
225
  delphi-lsp-agent cache status --root PATH
219
226
  delphi-lsp-agent cache stop --root PATH
227
+ delphi-lsp-agent cache clear --root PATH
220
228
  ```
221
229
 
222
230
  `cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
223
231
  `cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
224
232
  `cache stop` outputs stop status JSON and may include warnings on stderr.
233
+ `cache clear` stops the daemon and removes persistent navigation shards.
225
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`.
237
+
238
+ ### Open Knowledge Format wiki export
239
+
240
+ Export the complete unique knowledge represented by the layered codebase views
241
+ as a portable Markdown wiki:
242
+
243
+ ```bash
244
+ delphi-lsp-agent wiki export --root PATH --out codebase-wiki
245
+ ```
246
+
247
+ When `--out` is relative, it is resolved below `--root`; the default is
248
+ `.delphi-lsp/wiki`. The command builds the semantic index once, deep-indexes
249
+ main projects, calculates workspace and unit metrics, and writes:
250
+
251
+ - an OKF 0.2 root `index.md`;
252
+ - linked project, unit, and symbol concepts;
253
+ - declaration and implementation source fragments;
254
+ - resolved and unresolved semantic references;
255
+ - discovery/project problems and complete metric records;
256
+ - Protocol v3, relation, CPG, cache, and layer-mapping reference concepts.
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
+
271
+ Every non-index concept is UTF-8 Markdown with YAML frontmatter and a non-empty
272
+ `type`. Readable filenames include a stable digest, so overloads and equal names
273
+ from different units remain distinct even on case-insensitive filesystems.
274
+ Output order and content are deterministic. The finished bundle replaces the
275
+ destination only after generation succeeds; an existing non-empty destination
276
+ requires `--force`, and unsafe root/ancestor/symlink targets are rejected.
277
+
278
+ Pages are streamed to disk, decoded source retention is bounded, and metrics
279
+ process source paths without materializing the entire source corpus. Lazy CPG
280
+ subgraphs are documented rather than eagerly multiplied across all possible
281
+ targets; a focused live `cpg` query remains the bounded way to obtain one graph.
282
+ The bundle structure follows the
283
+ [Open Knowledge Format 0.2 specification](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md).
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.
226
288
 
227
289
  ```bash
228
290
  delphi-lsp-agent query --root PATH find TCustomer
@@ -232,9 +294,14 @@ delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
232
294
  delphi-lsp-agent query --root PATH cpg TARGET_ID --graph full --direction out --depth 4
233
295
  delphi-lsp-agent query --root PATH metrics
234
296
  delphi-lsp-agent query --root PATH metrics UNIT_QUERY
297
+ delphi-lsp-agent query --root PATH metrics --target-id UNIT_TARGET_ID
235
298
  delphi-lsp-agent cache status --root PATH --format json
236
299
  ```
237
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
+
238
305
  The repository root is sufficient even when it contains many projects:
239
306
 
240
307
  ```bash
@@ -243,7 +310,9 @@ delphi-lsp-agent query --root PATH find TCustomer
243
310
  ```
244
311
 
245
312
  This prewarms one bounded repository navigation index and requires no project
246
- 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
247
316
  settings and `MainSource` should define the index:
248
317
 
249
318
  ```bash
@@ -261,6 +330,61 @@ delphi-lsp-agent query --root PATH focus --project-id PROJECT_ID
261
330
 
262
331
  Selecting a project this way also prewarms its navigation cache.
263
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
+
264
388
  `inspect` uses the currently focused target, so call `focus TARGET_ID` before
265
389
  `inspect` unless a previous request already selected it.
266
390
 
@@ -294,7 +418,9 @@ under `.delphi-lsp/agent-cache/navigation-v1`. A restarted CLI or OpenCode cache
294
418
  daemon reuses unchanged units without parsing them again. Source content,
295
419
  conditional defines, or a shard-schema change produces a cache miss; malformed
296
420
  or incompatible JSON is ignored and rebuilt. The disk cache contains no pickle
297
- 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.
298
424
 
299
425
  Cache prewarming builds the navigation registry directly without constructing
300
426
  an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
@@ -330,7 +456,8 @@ outside the root workspace.
330
456
  `metrics`. For example, `delphi-lsp-agent view --layer metrics --format json`
331
457
  returns a project summary and detailed unit metric objects; `--query` filters
332
458
  units by name or path.
333
- `index` materializes overview, projects, and problems JSON. `skill install`
459
+ `index` materializes overview, projects, and problems JSON. `wiki export`
460
+ materializes the same navigational knowledge as a linked OKF Markdown bundle. `skill install`
334
461
  writes the skill; `opencode install` writes the package-named skill, Markdown
335
462
  agent, and plugin. The two deprecated write flags are harmless aliases and do
336
463
  not change user configuration.
@@ -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.0.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,15 +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]
164
+ delphi-lsp-agent wiki export --root PATH [--project-file FILE] [--out DIRECTORY]
165
+ [--workers auto|N] [--force] [--quiet]
162
166
  delphi-lsp-agent query --root PATH ACTION [VALUE]
163
167
  [--project-id ID] [--detail summary|declaration|members|context|body|implementations]
164
168
  [--relation references|callers|callees|uses|used_by|inherits|implements]
@@ -177,12 +181,67 @@ The `cache` commands manage one daemon per canonical root. Use these:
177
181
  delphi-lsp-agent cache start --root PATH
178
182
  delphi-lsp-agent cache status --root PATH
179
183
  delphi-lsp-agent cache stop --root PATH
184
+ delphi-lsp-agent cache clear --root PATH
180
185
  ```
181
186
 
182
187
  `cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
183
188
  `cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
184
189
  `cache stop` outputs stop status JSON and may include warnings on stderr.
190
+ `cache clear` stops the daemon and removes persistent navigation shards.
185
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`.
194
+
195
+ ### Open Knowledge Format wiki export
196
+
197
+ Export the complete unique knowledge represented by the layered codebase views
198
+ as a portable Markdown wiki:
199
+
200
+ ```bash
201
+ delphi-lsp-agent wiki export --root PATH --out codebase-wiki
202
+ ```
203
+
204
+ When `--out` is relative, it is resolved below `--root`; the default is
205
+ `.delphi-lsp/wiki`. The command builds the semantic index once, deep-indexes
206
+ main projects, calculates workspace and unit metrics, and writes:
207
+
208
+ - an OKF 0.2 root `index.md`;
209
+ - linked project, unit, and symbol concepts;
210
+ - declaration and implementation source fragments;
211
+ - resolved and unresolved semantic references;
212
+ - discovery/project problems and complete metric records;
213
+ - Protocol v3, relation, CPG, cache, and layer-mapping reference concepts.
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
+
228
+ Every non-index concept is UTF-8 Markdown with YAML frontmatter and a non-empty
229
+ `type`. Readable filenames include a stable digest, so overloads and equal names
230
+ from different units remain distinct even on case-insensitive filesystems.
231
+ Output order and content are deterministic. The finished bundle replaces the
232
+ destination only after generation succeeds; an existing non-empty destination
233
+ requires `--force`, and unsafe root/ancestor/symlink targets are rejected.
234
+
235
+ Pages are streamed to disk, decoded source retention is bounded, and metrics
236
+ process source paths without materializing the entire source corpus. Lazy CPG
237
+ subgraphs are documented rather than eagerly multiplied across all possible
238
+ targets; a focused live `cpg` query remains the bounded way to obtain one graph.
239
+ The bundle structure follows the
240
+ [Open Knowledge Format 0.2 specification](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md).
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.
186
245
 
187
246
  ```bash
188
247
  delphi-lsp-agent query --root PATH find TCustomer
@@ -192,9 +251,14 @@ delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
192
251
  delphi-lsp-agent query --root PATH cpg TARGET_ID --graph full --direction out --depth 4
193
252
  delphi-lsp-agent query --root PATH metrics
194
253
  delphi-lsp-agent query --root PATH metrics UNIT_QUERY
254
+ delphi-lsp-agent query --root PATH metrics --target-id UNIT_TARGET_ID
195
255
  delphi-lsp-agent cache status --root PATH --format json
196
256
  ```
197
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
+
198
262
  The repository root is sufficient even when it contains many projects:
199
263
 
200
264
  ```bash
@@ -203,7 +267,9 @@ delphi-lsp-agent query --root PATH find TCustomer
203
267
  ```
204
268
 
205
269
  This prewarms one bounded repository navigation index and requires no project
206
- 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
207
273
  settings and `MainSource` should define the index:
208
274
 
209
275
  ```bash
@@ -221,6 +287,61 @@ delphi-lsp-agent query --root PATH focus --project-id PROJECT_ID
221
287
 
222
288
  Selecting a project this way also prewarms its navigation cache.
223
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
+
224
345
  `inspect` uses the currently focused target, so call `focus TARGET_ID` before
225
346
  `inspect` unless a previous request already selected it.
226
347
 
@@ -254,7 +375,9 @@ under `.delphi-lsp/agent-cache/navigation-v1`. A restarted CLI or OpenCode cache
254
375
  daemon reuses unchanged units without parsing them again. Source content,
255
376
  conditional defines, or a shard-schema change produces a cache miss; malformed
256
377
  or incompatible JSON is ignored and rebuilt. The disk cache contains no pickle
257
- 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.
258
381
 
259
382
  Cache prewarming builds the navigation registry directly without constructing
260
383
  an empty-query result, symbol cards, pagination, or JSON payloads. Up to sixteen
@@ -290,7 +413,8 @@ outside the root workspace.
290
413
  `metrics`. For example, `delphi-lsp-agent view --layer metrics --format json`
291
414
  returns a project summary and detailed unit metric objects; `--query` filters
292
415
  units by name or path.
293
- `index` materializes overview, projects, and problems JSON. `skill install`
416
+ `index` materializes overview, projects, and problems JSON. `wiki export`
417
+ materializes the same navigational knowledge as a linked OKF Markdown bundle. `skill install`
294
418
  writes the skill; `opencode install` writes the package-named skill, Markdown
295
419
  agent, and plugin. The two deprecated write flags are harmless aliases and do
296
420
  not change user configuration.
@@ -0,0 +1 @@
1
+ __version__ = "3.1.1"