python-delphi-lsp 2.0.1__tar.gz → 2.0.3__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 (136) hide show
  1. python_delphi_lsp-2.0.3/.github/workflows/ci.yml +42 -0
  2. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/MANIFEST.in +6 -0
  3. {python_delphi_lsp-2.0.1/python_delphi_lsp.egg-info → python_delphi_lsp-2.0.3}/PKG-INFO +46 -31
  4. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/README.md +45 -30
  5. python_delphi_lsp-2.0.3/delphi_lsp/_version.py +1 -0
  6. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_cli.py +12 -5
  7. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_context.py +163 -62
  8. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_templates.py +92 -64
  9. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_workspace.py +7 -2
  10. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/pyproject.toml +1 -1
  11. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3/python_delphi_lsp.egg-info}/PKG-INFO +46 -31
  12. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/python_delphi_lsp.egg-info/SOURCES.txt +8 -0
  13. python_delphi_lsp-2.0.3/scripts/benchmark_github_corpus.py +256 -0
  14. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/bootstrap_vllm_codebase_skill_test.py +5 -6
  15. python_delphi_lsp-2.0.3/scripts/build_github_performance_corpus.py +521 -0
  16. python_delphi_lsp-2.0.3/scripts/generate_progress_pdf.py +518 -0
  17. python_delphi_lsp-2.0.3/scripts/run_opencode_lsp_probe.py +816 -0
  18. python_delphi_lsp-2.0.3/scripts/run_openrouter_github_e2e.py +1393 -0
  19. python_delphi_lsp-2.0.3/tests/corpora.performance.lock.json +66 -0
  20. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_codebase.py +185 -61
  21. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_context.py +176 -0
  22. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_bootstrap_vllm_codebase_skill.py +7 -16
  23. python_delphi_lsp-2.0.3/tests/test_github_performance_corpus.py +240 -0
  24. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_opencode_probe.py +476 -26
  25. python_delphi_lsp-2.0.3/tests/test_openrouter_github_e2e.py +1817 -0
  26. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_package_metadata.py +11 -4
  27. python_delphi_lsp-2.0.1/delphi_lsp/_version.py +0 -1
  28. python_delphi_lsp-2.0.1/scripts/run_opencode_lsp_probe.py +0 -389
  29. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/LICENSE +0 -0
  30. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/__init__.py +0 -0
  31. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_layers.py +0 -0
  32. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_metrics.py +0 -0
  33. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_protocol.py +0 -0
  34. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/agent_relations.py +0 -0
  35. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/binary.py +0 -0
  36. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/comment_builder.py +0 -0
  37. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/consts.py +0 -0
  38. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/grammar.py +0 -0
  39. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/lark_builder.py +0 -0
  40. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/lark_tokens.py +0 -0
  41. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/lsp_server.py +0 -0
  42. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/metrics.py +0 -0
  43. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/nodes.py +0 -0
  44. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/parser.py +0 -0
  45. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/preprocessor.py +0 -0
  46. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/project_discovery.py +0 -0
  47. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/project_indexer.py +0 -0
  48. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/semantic.py +0 -0
  49. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/semantic_builder.py +0 -0
  50. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/source_reader.py +0 -0
  51. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/workspace.py +0 -0
  52. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/delphi_lsp/writer.py +0 -0
  53. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/opencode.json +0 -0
  54. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
  55. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
  56. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/python_delphi_lsp.egg-info/requires.txt +0 -0
  57. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/python_delphi_lsp.egg-info/top_level.txt +0 -0
  58. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/audit_delphi_language_features.py +0 -0
  59. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
  60. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/bootstrap_vllm_opencode_test.py +0 -0
  61. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
  62. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/check_ornith_cache.py +0 -0
  63. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/generate_release_evidence.py +0 -0
  64. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
  65. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/prepare_ornith_cache.py +0 -0
  66. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/start_ornith_vllm.sh +0 -0
  67. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/scripts/summarize_opencode_request_payloads.py +0 -0
  68. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/setup.cfg +0 -0
  69. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
  70. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
  71. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
  72. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/constset.pas +0 -0
  73. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
  74. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
  75. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
  76. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
  77. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
  78. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
  79. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
  80. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
  81. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
  82. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
  83. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
  84. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
  85. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
  86. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
  87. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
  88. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
  89. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
  90. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
  91. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
  92. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
  93. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/properties.pas +0 -0
  94. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
  95. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
  96. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
  97. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
  98. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/library_demo.dpr +0 -0
  99. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/package_demo.dpk +0 -0
  100. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/program_demo.dpr +0 -0
  101. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_advanced.pas +0 -0
  102. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_attributes.pas +0 -0
  103. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_basic.pas +0 -0
  104. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_consumer.pas +0 -0
  105. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_generics.pas +0 -0
  106. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_inheritance.pas +0 -0
  107. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_math.pas +0 -0
  108. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_properties.pas +0 -0
  109. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_sections.pas +0 -0
  110. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_statements.pas +0 -0
  111. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_types.pas +0 -0
  112. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_unresolved.pas +0 -0
  113. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/fixtures/unit_with.pas +0 -0
  114. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_metrics.py +0 -0
  115. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_protocol.py +0 -0
  116. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_relations.py +0 -0
  117. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_worker.py +0 -0
  118. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_agent_workspace.py +0 -0
  119. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_bootstrap_vllm_opencode.py +0 -0
  120. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_diagnostics.py +0 -0
  121. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_language_feature_matrix.py +0 -0
  122. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_legacy_snippets.py +0 -0
  123. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_lsp_features.py +0 -0
  124. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_lsp_support.py +0 -0
  125. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_metrics.py +0 -0
  126. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_opencode_config.py +0 -0
  127. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_opencode_request_payloads.py +0 -0
  128. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_ornith_cache_prepare.py +0 -0
  129. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_parser.py +0 -0
  130. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_preprocessor.py +0 -0
  131. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_project_discovery.py +0 -0
  132. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_project_indexer.py +0 -0
  133. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_release_evidence.py +0 -0
  134. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_semantic.py +0 -0
  135. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_vllm_start_script.py +0 -0
  136. {python_delphi_lsp-2.0.1 → python_delphi_lsp-2.0.3}/tests/test_workspace.py +0 -0
@@ -0,0 +1,42 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ test:
9
+ name: ${{ matrix.os }} / Python ${{ matrix.python }}
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, macos-latest, windows-latest]
15
+ python: ["3.10", "3.14"]
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-python@v5
19
+ with:
20
+ python-version: ${{ matrix.python }}
21
+ cache: pip
22
+ cache-dependency-path: pyproject.toml
23
+ - run: python -m pip install --upgrade pip
24
+ - run: pip install .[test]
25
+ - run: pytest
26
+
27
+ package:
28
+ name: Build and validate distributions
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v4
32
+ - uses: actions/setup-python@v5
33
+ with:
34
+ python-version: "3.14"
35
+ cache: pip
36
+ cache-dependency-path: pyproject.toml
37
+ - run: python -m pip install --upgrade pip build twine
38
+ - run: python -m build
39
+ - run: python -m twine check dist/*
40
+ - run: python -m venv smoke-venv
41
+ - run: smoke-venv/bin/python -m pip install dist/*.whl
42
+ - run: smoke-venv/bin/python -c "import delphi_lsp; print(delphi_lsp.__name__)"
@@ -1,16 +1,22 @@
1
1
  include LICENSE
2
2
  include README.md
3
3
  include opencode.json
4
+ include .github/workflows/ci.yml
4
5
  include scripts/check_ornith_cache.py
5
6
  include scripts/audit_delphi_language_features.py
7
+ include scripts/build_github_performance_corpus.py
8
+ include scripts/benchmark_github_corpus.py
6
9
  include scripts/bootstrap_vllm_opencode_test.py
7
10
  include scripts/bootstrap_vllm_codebase_skill_test.py
8
11
  include scripts/bootstrap_vllm_opencode_test.ps1
9
12
  include scripts/bootstrap_vllm_opencode_test.sh
10
13
  include scripts/generate_release_evidence.py
14
+ include scripts/generate_progress_pdf.py
11
15
  include scripts/prepare_ornith_cache.py
12
16
  include scripts/run_opencode_lsp_probe.py
17
+ include scripts/run_openrouter_github_e2e.py
13
18
  include scripts/start_ornith_vllm.sh
14
19
  include scripts/summarize_opencode_request_payloads.py
15
20
  include scripts/ollama/ornith-lspctx.Modelfile
21
+ include tests/corpora.performance.lock.json
16
22
  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: 2.0.1
3
+ Version: 2.0.3
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
@@ -41,7 +41,7 @@ Dynamic: license-file
41
41
 
42
42
  `python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
43
43
  indexes, serves LSP, and provides bounded codebase navigation for agents.
44
- Version 2.0.1 is authored by Dark Light and supports Windows, macOS, and Linux.
44
+ Version 2.0.3 is authored by Dark Light and supports Windows, macOS, and Linux.
45
45
 
46
46
  ## Install and quick start
47
47
 
@@ -177,7 +177,7 @@ delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
177
177
  delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
178
178
  delphi-lsp-agent skill install [--target PATH] [--force]
179
179
  delphi-lsp-agent opencode install [--target PATH] [--python PYTHON]
180
- [--force] [--write-config]
180
+ [--force] [--write-agent|--write-config]
181
181
  delphi-lsp-agent worker --root PATH [--project-file FILE]
182
182
  ```
183
183
 
@@ -187,8 +187,9 @@ delphi-lsp-agent worker --root PATH [--project-file FILE]
187
187
  returns a project summary and detailed unit metric objects; `--query` filters
188
188
  units by name or path.
189
189
  `index` materializes overview, projects, and problems JSON. `skill install`
190
- writes the skill; `opencode install` writes both integration files, while
191
- `--write-config` additionally writes the restricted agent configuration.
190
+ writes the skill; `opencode install` writes the package-named skill, Markdown
191
+ agent, and plugin. The two deprecated write flags are harmless aliases and do
192
+ not change user configuration.
192
193
  `worker` serves NDJSON over standard input/output.
193
194
 
194
195
  Protocol v2 actions are `open`, `find`, `inspect`, `trace`, `focus`,
@@ -225,49 +226,63 @@ optimization does not remove LSP functionality.
225
226
  Install the generated integration in a worktree:
226
227
 
227
228
  ```bash
228
- delphi-lsp-agent opencode install --target . --write-config
229
+ delphi-lsp-agent opencode install --target .
229
230
  ```
230
231
 
231
232
  It writes:
232
233
 
233
234
  ```text
234
- .agents/skills/delphi-codebase-navigator/SKILL.md
235
+ .agents/skills/python-delphi-lsp/SKILL.md
235
236
  .opencode/plugins/delphi_codebase.ts
237
+ .opencode/agents/python-delphi-lsp.md
236
238
  ```
237
239
 
238
- The generated configuration enables only the named
239
- `delphi-codebase-navigator` skill and `delphi_codebase`. It denies
240
+ The package-named Markdown agent enables only the
241
+ `python-delphi-lsp` skill and `delphi_codebase`. It denies
240
242
  `bash`, `read`, `glob`, `grep`, and `lsp`, along with edit/write and
241
243
  other raw source tools. The skill is enabled. The installer does not use the
242
- retired `.opencode/tools` path.
244
+ retired `.opencode/tools` path and never reads or changes `opencode.json`; that
245
+ file remains entirely user-owned. The deprecated `--write-config` and
246
+ `--write-agent` options are accepted harmlessly for compatibility.
243
247
 
244
248
  The plugin maintains one worker per session/root, reusing focus and indexes.
245
249
  During compaction it restores the focus and summary into the new context.
246
250
  Transport failure, session deletion, and plugin disposal clean up the worker.
247
251
 
248
- A generated OpenCode agent looks like this; providers and unrelated agents stay
249
- unchanged:
250
-
251
- ```json
252
- {
253
- "agent": {
254
- "vllm-delphi-codebase": {
255
- "tools": {
256
- "delphi_codebase": true, "skill": true, "lsp": false,
257
- "bash": false, "read": false, "glob": false, "grep": false
258
- },
259
- "permission": {
260
- "delphi_codebase": "allow",
261
- "skill": {"*": "deny", "delphi-codebase-navigator": "allow"},
262
- "lsp": "deny"
263
- }
264
- }
265
- }
266
- }
252
+ A generated OpenCode agent starts with this Markdown frontmatter:
253
+
254
+ ```markdown
255
+ ---
256
+ description: Inspect Delphi and Object Pascal codebases through python-delphi-lsp.
257
+ mode: all
258
+ temperature: 0
259
+ permission:
260
+ delphi_codebase: allow
261
+ skill:
262
+ "*": deny
263
+ python-delphi-lsp: allow
264
+ lsp: deny
265
+ bash: deny
266
+ read: deny
267
+ glob: deny
268
+ grep: deny
269
+ list: deny
270
+ edit: deny
271
+ write: deny
272
+ patch: deny
273
+ task: deny
274
+ webfetch: deny
275
+ websearch: deny
276
+ question: deny
277
+ todowrite: deny
278
+ todoread: deny
279
+ codebase_map: deny
280
+ code_guidelines: deny
281
+ ---
267
282
  ```
268
283
 
269
- Select `vllm-delphi-codebase`, ask it to load
270
- `delphi-codebase-navigator`, then use `delphi_codebase` actions such as
284
+ Select `python-delphi-lsp`, ask it to load the `python-delphi-lsp` skill, then
285
+ use `delphi_codebase` actions such as
271
286
  `open`, `find`, `focus`, and `inspect`. Use semantic tool calls, not raw
272
287
  source tools.
273
288
 
@@ -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.1 is authored by Dark Light and supports Windows, macOS, and Linux.
5
+ Version 2.0.3 is authored by Dark Light and supports Windows, macOS, and Linux.
6
6
 
7
7
  ## Install and quick start
8
8
 
@@ -138,7 +138,7 @@ delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
138
138
  delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
139
139
  delphi-lsp-agent skill install [--target PATH] [--force]
140
140
  delphi-lsp-agent opencode install [--target PATH] [--python PYTHON]
141
- [--force] [--write-config]
141
+ [--force] [--write-agent|--write-config]
142
142
  delphi-lsp-agent worker --root PATH [--project-file FILE]
143
143
  ```
144
144
 
@@ -148,8 +148,9 @@ delphi-lsp-agent worker --root PATH [--project-file FILE]
148
148
  returns a project summary and detailed unit metric objects; `--query` filters
149
149
  units by name or path.
150
150
  `index` materializes overview, projects, and problems JSON. `skill install`
151
- writes the skill; `opencode install` writes both integration files, while
152
- `--write-config` additionally writes the restricted agent configuration.
151
+ writes the skill; `opencode install` writes the package-named skill, Markdown
152
+ agent, and plugin. The two deprecated write flags are harmless aliases and do
153
+ not change user configuration.
153
154
  `worker` serves NDJSON over standard input/output.
154
155
 
155
156
  Protocol v2 actions are `open`, `find`, `inspect`, `trace`, `focus`,
@@ -186,49 +187,63 @@ optimization does not remove LSP functionality.
186
187
  Install the generated integration in a worktree:
187
188
 
188
189
  ```bash
189
- delphi-lsp-agent opencode install --target . --write-config
190
+ delphi-lsp-agent opencode install --target .
190
191
  ```
191
192
 
192
193
  It writes:
193
194
 
194
195
  ```text
195
- .agents/skills/delphi-codebase-navigator/SKILL.md
196
+ .agents/skills/python-delphi-lsp/SKILL.md
196
197
  .opencode/plugins/delphi_codebase.ts
198
+ .opencode/agents/python-delphi-lsp.md
197
199
  ```
198
200
 
199
- The generated configuration enables only the named
200
- `delphi-codebase-navigator` skill and `delphi_codebase`. It denies
201
+ The package-named Markdown agent enables only the
202
+ `python-delphi-lsp` skill and `delphi_codebase`. It denies
201
203
  `bash`, `read`, `glob`, `grep`, and `lsp`, along with edit/write and
202
204
  other raw source tools. The skill is enabled. The installer does not use the
203
- retired `.opencode/tools` path.
205
+ retired `.opencode/tools` path and never reads or changes `opencode.json`; that
206
+ file remains entirely user-owned. The deprecated `--write-config` and
207
+ `--write-agent` options are accepted harmlessly for compatibility.
204
208
 
205
209
  The plugin maintains one worker per session/root, reusing focus and indexes.
206
210
  During compaction it restores the focus and summary into the new context.
207
211
  Transport failure, session deletion, and plugin disposal clean up the worker.
208
212
 
209
- A generated OpenCode agent looks like this; providers and unrelated agents stay
210
- unchanged:
211
-
212
- ```json
213
- {
214
- "agent": {
215
- "vllm-delphi-codebase": {
216
- "tools": {
217
- "delphi_codebase": true, "skill": true, "lsp": false,
218
- "bash": false, "read": false, "glob": false, "grep": false
219
- },
220
- "permission": {
221
- "delphi_codebase": "allow",
222
- "skill": {"*": "deny", "delphi-codebase-navigator": "allow"},
223
- "lsp": "deny"
224
- }
225
- }
226
- }
227
- }
213
+ A generated OpenCode agent starts with this Markdown frontmatter:
214
+
215
+ ```markdown
216
+ ---
217
+ description: Inspect Delphi and Object Pascal codebases through python-delphi-lsp.
218
+ mode: all
219
+ temperature: 0
220
+ permission:
221
+ delphi_codebase: allow
222
+ skill:
223
+ "*": deny
224
+ python-delphi-lsp: allow
225
+ lsp: deny
226
+ bash: deny
227
+ read: deny
228
+ glob: deny
229
+ grep: deny
230
+ list: deny
231
+ edit: deny
232
+ write: deny
233
+ patch: deny
234
+ task: deny
235
+ webfetch: deny
236
+ websearch: deny
237
+ question: deny
238
+ todowrite: deny
239
+ todoread: deny
240
+ codebase_map: deny
241
+ code_guidelines: deny
242
+ ---
228
243
  ```
229
244
 
230
- Select `vllm-delphi-codebase`, ask it to load
231
- `delphi-codebase-navigator`, then use `delphi_codebase` actions such as
245
+ Select `python-delphi-lsp`, ask it to load the `python-delphi-lsp` skill, then
246
+ use `delphi_codebase` actions such as
232
247
  `open`, `find`, `focus`, and `inspect`. Use semantic tool calls, not raw
233
248
  source tools.
234
249
 
@@ -0,0 +1 @@
1
+ __version__ = "2.0.3"
@@ -67,11 +67,19 @@ def build_parser() -> argparse.ArgumentParser:
67
67
 
68
68
  opencode = subcommands.add_parser("opencode", help="Install opencode integration.")
69
69
  opencode_commands = opencode.add_subparsers(dest="opencode_command", required=True)
70
- opencode_install = opencode_commands.add_parser("install", help="Install .agents skill and opencode plugin.")
70
+ opencode_install = opencode_commands.add_parser(
71
+ "install", help="Install the package-named skill, Markdown agent, and OpenCode plugin."
72
+ )
71
73
  opencode_install.add_argument("--target", type=Path, default=Path("."))
72
74
  opencode_install.add_argument("--python", default=sys.executable)
73
75
  opencode_install.add_argument("--force", action="store_true")
74
- opencode_install.add_argument("--write-config", action="store_true")
76
+ opencode_install.add_argument(
77
+ "--write-agent",
78
+ "--write-config",
79
+ dest="write_config",
80
+ action="store_true",
81
+ help="Deprecated compatibility option; the Markdown agent is always installed and opencode.json is never touched.",
82
+ )
75
83
  opencode_install.set_defaults(func=_opencode_install)
76
84
 
77
85
  worker = subcommands.add_parser("worker", help="Serve Protocol v2 NDJSON requests.")
@@ -139,7 +147,7 @@ def _skill_install(args: argparse.Namespace) -> None:
139
147
 
140
148
 
141
149
  def _opencode_install(args: argparse.Namespace) -> None:
142
- skill_path, plugin_path, config_path = install_opencode_support(
150
+ skill_path, plugin_path, agent_path = install_opencode_support(
143
151
  args.target,
144
152
  python_executable=args.python,
145
153
  force=args.force,
@@ -147,8 +155,7 @@ def _opencode_install(args: argparse.Namespace) -> None:
147
155
  )
148
156
  print(skill_path)
149
157
  print(plugin_path)
150
- if config_path is not None:
151
- print(config_path)
158
+ print(agent_path)
152
159
 
153
160
 
154
161
  def _worker(args: argparse.Namespace) -> None: