python-delphi-lsp 2.0.4__tar.gz → 2.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/.github/workflows/ci.yml +1 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/MANIFEST.in +1 -0
- {python_delphi_lsp-2.0.4/python_delphi_lsp.egg-info → python_delphi_lsp-2.1.0}/PKG-INFO +87 -4
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/README.md +86 -3
- python_delphi_lsp-2.1.0/delphi_lsp/_version.py +1 -0
- python_delphi_lsp-2.1.0/delphi_lsp/agent_cache.py +889 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_cli.py +187 -6
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_context.py +96 -29
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_layers.py +32 -21
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_relations.py +0 -1
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_workspace.py +7 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/binary.py +0 -1
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/lsp_server.py +0 -2
- python_delphi_lsp-2.1.0/delphi_lsp/parallel_outline.py +278 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/semantic.py +1 -1
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/pyproject.toml +1 -1
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0/python_delphi_lsp.egg-info}/PKG-INFO +87 -4
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/python_delphi_lsp.egg-info/SOURCES.txt +5 -0
- python_delphi_lsp-2.1.0/scripts/benchmark_parallel_cache.py +71 -0
- python_delphi_lsp-2.1.0/tests/test_agent_cache.py +797 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_codebase.py +52 -1
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_context.py +47 -24
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_relations.py +15 -14
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_worker.py +221 -2
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_lsp_features.py +0 -2
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_lsp_support.py +15 -10
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_package_metadata.py +4 -3
- python_delphi_lsp-2.1.0/tests/test_parallel_outline.py +422 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_progress.py +48 -5
- python_delphi_lsp-2.0.4/delphi_lsp/_version.py +0 -1
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/LICENSE +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/__init__.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_metrics.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_protocol.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/agent_templates.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/comment_builder.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/consts.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/grammar.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/lark_builder.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/lark_tokens.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/metrics.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/nodes.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/parser.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/preprocessor.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/progress.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/project_discovery.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/project_indexer.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/semantic_builder.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/source_reader.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/workspace.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/delphi_lsp/writer.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/opencode.json +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/python_delphi_lsp.egg-info/dependency_links.txt +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/python_delphi_lsp.egg-info/entry_points.txt +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/python_delphi_lsp.egg-info/requires.txt +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/python_delphi_lsp.egg-info/top_level.txt +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/audit_delphi_language_features.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/benchmark_github_corpus.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/bootstrap_vllm_codebase_skill_test.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/bootstrap_vllm_opencode_test.ps1 +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/bootstrap_vllm_opencode_test.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/bootstrap_vllm_opencode_test.sh +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/build_github_performance_corpus.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/check_ornith_cache.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/generate_progress_pdf.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/generate_release_evidence.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/ollama/ornith-lspctx.Modelfile +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/prepare_ornith_cache.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/run_opencode_lsp_probe.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/run_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/start_ornith_vllm.sh +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/scripts/summarize_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/setup.cfg +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/corpora.performance.lock.json +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/DeprecatedOnConst.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/VariantRecordFieldAttributes.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/alignedrecords.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/constset.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/deprecatedtype.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/dottedtypes.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/endtoken.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/experimentals.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/externalfunction.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/finalizationinitializationexports.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/forwardoverloaded.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/forwardwithoutsemicolon.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/genericconstraints.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/genericinterfacemethoddelegation.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/implementsgenerictype.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/include file2.inc +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/includefile.inc +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/includefile.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/managedrecords.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/messagemethod.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/multiline.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/nonalignedrecords.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/numbers.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/pointerchars.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/properties.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/strictvisibility.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/tryexcept.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/umlauts.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/legacy_snippets/whitespacearoundifdefcondition.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/library_demo.dpr +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/package_demo.dpk +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/program_demo.dpr +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_advanced.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_attributes.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_basic.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_consumer.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_generics.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_inheritance.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_math.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_properties.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_sections.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_statements.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_types.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_unresolved.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/fixtures/unit_with.pas +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_metrics.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_protocol.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_agent_workspace.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_bootstrap_vllm_codebase_skill.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_bootstrap_vllm_opencode.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_diagnostics.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_github_performance_corpus.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_language_feature_matrix.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_legacy_snippets.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_metrics.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_opencode_config.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_opencode_probe.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_opencode_request_payloads.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_openrouter_github_e2e.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_ornith_cache_prepare.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_parser.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_preprocessor.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_project_discovery.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_project_indexer.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_release_evidence.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_semantic.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_vllm_start_script.py +0 -0
- {python_delphi_lsp-2.0.4 → python_delphi_lsp-2.1.0}/tests/test_workspace.py +0 -0
|
@@ -6,6 +6,7 @@ include scripts/check_ornith_cache.py
|
|
|
6
6
|
include scripts/audit_delphi_language_features.py
|
|
7
7
|
include scripts/build_github_performance_corpus.py
|
|
8
8
|
include scripts/benchmark_github_corpus.py
|
|
9
|
+
include scripts/benchmark_parallel_cache.py
|
|
9
10
|
include scripts/bootstrap_vllm_opencode_test.py
|
|
10
11
|
include scripts/bootstrap_vllm_codebase_skill_test.py
|
|
11
12
|
include scripts/bootstrap_vllm_opencode_test.ps1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-delphi-lsp
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Python Delphi/Object Pascal parser, semantic indexer, and language server.
|
|
5
5
|
Author: Dark Light
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -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
|
|
44
|
+
Version 2.1.0 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
45
45
|
|
|
46
46
|
## Install and quick start
|
|
47
47
|
|
|
@@ -185,15 +185,93 @@ problems; paths are not guessed.
|
|
|
185
185
|
`delphi-lsp-agent` has these subcommands and options:
|
|
186
186
|
|
|
187
187
|
```text
|
|
188
|
+
delphi-lsp-agent cache start --root PATH [--project-file FILE] [--max-memory 512M]
|
|
189
|
+
[--workers auto|N] [--startup-timeout 120]
|
|
190
|
+
[--idle-timeout 1800]
|
|
191
|
+
delphi-lsp-agent cache status --root PATH [--format text|json]
|
|
192
|
+
delphi-lsp-agent cache stop --root PATH
|
|
188
193
|
delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
|
|
189
194
|
[--query TEXT] [--format markdown|json] [--deep-projects]
|
|
195
|
+
[--workers auto|N]
|
|
190
196
|
delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
|
|
197
|
+
[--workers auto|N]
|
|
198
|
+
delphi-lsp-agent query --root PATH ACTION [VALUE]
|
|
199
|
+
[--project-id FILE] [--detail summary|declaration|members|context|body|implementations]
|
|
200
|
+
[--relation references|callers|callees|uses|used_by|inherits|implements]
|
|
201
|
+
[--cursor TEXT] [--max-items INT] [--max-chars INT]
|
|
191
202
|
delphi-lsp-agent skill install [--target PATH] [--force]
|
|
192
203
|
delphi-lsp-agent opencode install [--target PATH] [--python PYTHON]
|
|
193
204
|
[--force] [--write-agent|--write-config]
|
|
194
|
-
delphi-lsp-agent worker --root PATH [--project-file FILE]
|
|
205
|
+
delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
|
|
195
206
|
```
|
|
196
207
|
|
|
208
|
+
The `cache` commands manage one daemon per canonical root. Use these:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
delphi-lsp-agent cache start --root PATH
|
|
212
|
+
delphi-lsp-agent cache status --root PATH
|
|
213
|
+
delphi-lsp-agent cache stop --root PATH
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
|
|
217
|
+
`cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
|
|
218
|
+
`cache stop` outputs stop status JSON and may include warnings on stderr.
|
|
219
|
+
`query` outputs Protocol v2 JSON responses and writes warnings to stderr.
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
delphi-lsp-agent query --root PATH find TCustomer
|
|
223
|
+
delphi-lsp-agent query --root PATH focus TARGET_ID
|
|
224
|
+
delphi-lsp-agent query --root PATH inspect
|
|
225
|
+
delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
|
|
226
|
+
delphi-lsp-agent query --root PATH metrics
|
|
227
|
+
delphi-lsp-agent query --root PATH metrics UNIT_QUERY
|
|
228
|
+
delphi-lsp-agent cache status --root PATH --format json
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
`inspect` uses the currently focused target, so call `focus TARGET_ID` before
|
|
232
|
+
`inspect` unless a previous request already selected it.
|
|
233
|
+
|
|
234
|
+
The cache daemon prewarms the navigation cache at startup so first `find` requests are
|
|
235
|
+
fast. The cache retained-cache budget is `512 MiB` by default and tracks retained
|
|
236
|
+
cache usage only, not a hard RSS/parse peak. Warnings are emitted on stderr at or
|
|
237
|
+
above 80 percent.
|
|
238
|
+
|
|
239
|
+
Cold builds parse independent source units in short-lived processes created with
|
|
240
|
+
the cross-platform `spawn` method. `--workers auto|N` defaults to `auto`.
|
|
241
|
+
Automatic selection uses at most four worker processes, leaves one detected CPU
|
|
242
|
+
free, never exceeds the source task count, and—for the cache daemon—allows one
|
|
243
|
+
worker per `128 MiB` of retained-cache budget. `view` and `index` use the same
|
|
244
|
+
task, CPU, and four-worker caps without the cache-budget term. An explicit value
|
|
245
|
+
from 1 through 32 overrides the automatic CPU and memory caps but is still
|
|
246
|
+
limited by the number of tasks.
|
|
247
|
+
|
|
248
|
+
Worker processes exit before retained-cache accounting. Their models and source
|
|
249
|
+
text are streamed into the parent, so transient worker memory is separate from
|
|
250
|
+
the retained navigation structures and the existing 80-percent warning. If an
|
|
251
|
+
automatic pool fails before accepting a result, one automatic serial fallback
|
|
252
|
+
is attempted; explicit worker counts fail instead of silently changing the
|
|
253
|
+
requested configuration.
|
|
254
|
+
|
|
255
|
+
`cache start` waits up to `--startup-timeout 120` seconds by default for a large
|
|
256
|
+
workspace to prewarm. The timeout belongs to the starting client and does not
|
|
257
|
+
change daemon compatibility or idle shutdown. Starting a live root with a
|
|
258
|
+
different worker configuration reports a configuration conflict.
|
|
259
|
+
|
|
260
|
+
Eviction is ordered: auxiliary caches are evicted first, navigation caches second.
|
|
261
|
+
If compaction removes navigable data, the daemon rebuilds the navigation state on demand
|
|
262
|
+
while preserving focus state for the next request.
|
|
263
|
+
|
|
264
|
+
The daemon tracks a 30-minute idle timeout; idle state shows in JSON status (`cache status`).
|
|
265
|
+
`source revision` changes on source edits and invalidate reused request caches.
|
|
266
|
+
Workspace state appears in status as `requests`, `warm_hits`, `rebuilds`, `invalidations`,
|
|
267
|
+
`evictions`, and `cache_state`. Parallel prewarm status adds
|
|
268
|
+
`workers_configured`, `workers_effective`, `parallel_files_completed`,
|
|
269
|
+
`prewarm_seconds`, `parallel_seconds`, and `parallel_fallbacks`.
|
|
270
|
+
|
|
271
|
+
Metadata is stored in `.delphi-lsp/agent-cache/daemon.json` with owner-only token and
|
|
272
|
+
permissions (`daemon.json` mode 600 and parent 700). Do not copy or share this token
|
|
273
|
+
outside the root workspace.
|
|
274
|
+
|
|
197
275
|
`view --layer` accepts `overview`, `projects`, `units`, `unit`,
|
|
198
276
|
`symbols`, `symbol`, `implementation`, `references`, `problems`, and
|
|
199
277
|
`metrics`. For example, `delphi-lsp-agent view --layer metrics --format json`
|
|
@@ -227,7 +305,7 @@ Focus preserves the selected project, unit, or target. Cursors bind a workspace
|
|
|
227
305
|
revision and request fingerprint, so source changes and cross-target or
|
|
228
306
|
cross-detail reuse invalidate them. `max_items` and `max_chars` bound each
|
|
229
307
|
response. A `sound_partial` relation is sound but incomplete: unresolved and
|
|
230
|
-
ambiguous relations are never fabricated.
|
|
308
|
+
ambiguous relations are never fabricated. Unsupported relations are rejected.
|
|
231
309
|
|
|
232
310
|
For every source size the navigator builds an outline first, loads source detail
|
|
233
311
|
lazily for a selected target, and returns only selected fragments. Typed source
|
|
@@ -262,6 +340,11 @@ The plugin maintains one worker per session/root, reusing focus and indexes.
|
|
|
262
340
|
During compaction it restores the focus and summary into the new context.
|
|
263
341
|
Transport failure, session deletion, and plugin disposal clean up the worker.
|
|
264
342
|
|
|
343
|
+
OpenCode history: 1.1.0 and 1.1.1 used a spawned view per call model.
|
|
344
|
+
Persistent session/root worker support first shipped in 2.0.0.
|
|
345
|
+
This is the same persistent session/root worker boundary.
|
|
346
|
+
The OpenCode worker stays separate from CLI daemon, and current plugin behavior is unchanged.
|
|
347
|
+
|
|
265
348
|
A generated OpenCode agent starts with this Markdown frontmatter:
|
|
266
349
|
|
|
267
350
|
```markdown
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`python-delphi-lsp` parses Delphi/Object Pascal, builds semantic and project
|
|
4
4
|
indexes, serves LSP, and provides bounded codebase navigation for agents.
|
|
5
|
-
Version 2.0
|
|
5
|
+
Version 2.1.0 is authored by Dark Light and supports Windows, macOS, and Linux.
|
|
6
6
|
|
|
7
7
|
## Install and quick start
|
|
8
8
|
|
|
@@ -146,15 +146,93 @@ problems; paths are not guessed.
|
|
|
146
146
|
`delphi-lsp-agent` has these subcommands and options:
|
|
147
147
|
|
|
148
148
|
```text
|
|
149
|
+
delphi-lsp-agent cache start --root PATH [--project-file FILE] [--max-memory 512M]
|
|
150
|
+
[--workers auto|N] [--startup-timeout 120]
|
|
151
|
+
[--idle-timeout 1800]
|
|
152
|
+
delphi-lsp-agent cache status --root PATH [--format text|json]
|
|
153
|
+
delphi-lsp-agent cache stop --root PATH
|
|
149
154
|
delphi-lsp-agent view --root PATH [--project-file FILE] --layer LAYER
|
|
150
155
|
[--query TEXT] [--format markdown|json] [--deep-projects]
|
|
156
|
+
[--workers auto|N]
|
|
151
157
|
delphi-lsp-agent index --root PATH [--project-file FILE] [--out FILE]
|
|
158
|
+
[--workers auto|N]
|
|
159
|
+
delphi-lsp-agent query --root PATH ACTION [VALUE]
|
|
160
|
+
[--project-id FILE] [--detail summary|declaration|members|context|body|implementations]
|
|
161
|
+
[--relation references|callers|callees|uses|used_by|inherits|implements]
|
|
162
|
+
[--cursor TEXT] [--max-items INT] [--max-chars INT]
|
|
152
163
|
delphi-lsp-agent skill install [--target PATH] [--force]
|
|
153
164
|
delphi-lsp-agent opencode install [--target PATH] [--python PYTHON]
|
|
154
165
|
[--force] [--write-agent|--write-config]
|
|
155
|
-
delphi-lsp-agent worker --root PATH [--project-file FILE]
|
|
166
|
+
delphi-lsp-agent worker --root PATH [--project-file FILE] [--workers auto|N]
|
|
156
167
|
```
|
|
157
168
|
|
|
169
|
+
The `cache` commands manage one daemon per canonical root. Use these:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
delphi-lsp-agent cache start --root PATH
|
|
173
|
+
delphi-lsp-agent cache status --root PATH
|
|
174
|
+
delphi-lsp-agent cache stop --root PATH
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`cache start` outputs cache lifecycle JSON; runtime warnings are still on stderr.
|
|
178
|
+
`cache status --format json` outputs status JSON to stdout and the same warning stream on stderr.
|
|
179
|
+
`cache stop` outputs stop status JSON and may include warnings on stderr.
|
|
180
|
+
`query` outputs Protocol v2 JSON responses and writes warnings to stderr.
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
delphi-lsp-agent query --root PATH find TCustomer
|
|
184
|
+
delphi-lsp-agent query --root PATH focus TARGET_ID
|
|
185
|
+
delphi-lsp-agent query --root PATH inspect
|
|
186
|
+
delphi-lsp-agent query --root PATH trace TARGET_ID --relation callers
|
|
187
|
+
delphi-lsp-agent query --root PATH metrics
|
|
188
|
+
delphi-lsp-agent query --root PATH metrics UNIT_QUERY
|
|
189
|
+
delphi-lsp-agent cache status --root PATH --format json
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`inspect` uses the currently focused target, so call `focus TARGET_ID` before
|
|
193
|
+
`inspect` unless a previous request already selected it.
|
|
194
|
+
|
|
195
|
+
The cache daemon prewarms the navigation cache at startup so first `find` requests are
|
|
196
|
+
fast. The cache retained-cache budget is `512 MiB` by default and tracks retained
|
|
197
|
+
cache usage only, not a hard RSS/parse peak. Warnings are emitted on stderr at or
|
|
198
|
+
above 80 percent.
|
|
199
|
+
|
|
200
|
+
Cold builds parse independent source units in short-lived processes created with
|
|
201
|
+
the cross-platform `spawn` method. `--workers auto|N` defaults to `auto`.
|
|
202
|
+
Automatic selection uses at most four worker processes, leaves one detected CPU
|
|
203
|
+
free, never exceeds the source task count, and—for the cache daemon—allows one
|
|
204
|
+
worker per `128 MiB` of retained-cache budget. `view` and `index` use the same
|
|
205
|
+
task, CPU, and four-worker caps without the cache-budget term. An explicit value
|
|
206
|
+
from 1 through 32 overrides the automatic CPU and memory caps but is still
|
|
207
|
+
limited by the number of tasks.
|
|
208
|
+
|
|
209
|
+
Worker processes exit before retained-cache accounting. Their models and source
|
|
210
|
+
text are streamed into the parent, so transient worker memory is separate from
|
|
211
|
+
the retained navigation structures and the existing 80-percent warning. If an
|
|
212
|
+
automatic pool fails before accepting a result, one automatic serial fallback
|
|
213
|
+
is attempted; explicit worker counts fail instead of silently changing the
|
|
214
|
+
requested configuration.
|
|
215
|
+
|
|
216
|
+
`cache start` waits up to `--startup-timeout 120` seconds by default for a large
|
|
217
|
+
workspace to prewarm. The timeout belongs to the starting client and does not
|
|
218
|
+
change daemon compatibility or idle shutdown. Starting a live root with a
|
|
219
|
+
different worker configuration reports a configuration conflict.
|
|
220
|
+
|
|
221
|
+
Eviction is ordered: auxiliary caches are evicted first, navigation caches second.
|
|
222
|
+
If compaction removes navigable data, the daemon rebuilds the navigation state on demand
|
|
223
|
+
while preserving focus state for the next request.
|
|
224
|
+
|
|
225
|
+
The daemon tracks a 30-minute idle timeout; idle state shows in JSON status (`cache status`).
|
|
226
|
+
`source revision` changes on source edits and invalidate reused request caches.
|
|
227
|
+
Workspace state appears in status as `requests`, `warm_hits`, `rebuilds`, `invalidations`,
|
|
228
|
+
`evictions`, and `cache_state`. Parallel prewarm status adds
|
|
229
|
+
`workers_configured`, `workers_effective`, `parallel_files_completed`,
|
|
230
|
+
`prewarm_seconds`, `parallel_seconds`, and `parallel_fallbacks`.
|
|
231
|
+
|
|
232
|
+
Metadata is stored in `.delphi-lsp/agent-cache/daemon.json` with owner-only token and
|
|
233
|
+
permissions (`daemon.json` mode 600 and parent 700). Do not copy or share this token
|
|
234
|
+
outside the root workspace.
|
|
235
|
+
|
|
158
236
|
`view --layer` accepts `overview`, `projects`, `units`, `unit`,
|
|
159
237
|
`symbols`, `symbol`, `implementation`, `references`, `problems`, and
|
|
160
238
|
`metrics`. For example, `delphi-lsp-agent view --layer metrics --format json`
|
|
@@ -188,7 +266,7 @@ Focus preserves the selected project, unit, or target. Cursors bind a workspace
|
|
|
188
266
|
revision and request fingerprint, so source changes and cross-target or
|
|
189
267
|
cross-detail reuse invalidate them. `max_items` and `max_chars` bound each
|
|
190
268
|
response. A `sound_partial` relation is sound but incomplete: unresolved and
|
|
191
|
-
ambiguous relations are never fabricated.
|
|
269
|
+
ambiguous relations are never fabricated. Unsupported relations are rejected.
|
|
192
270
|
|
|
193
271
|
For every source size the navigator builds an outline first, loads source detail
|
|
194
272
|
lazily for a selected target, and returns only selected fragments. Typed source
|
|
@@ -223,6 +301,11 @@ The plugin maintains one worker per session/root, reusing focus and indexes.
|
|
|
223
301
|
During compaction it restores the focus and summary into the new context.
|
|
224
302
|
Transport failure, session deletion, and plugin disposal clean up the worker.
|
|
225
303
|
|
|
304
|
+
OpenCode history: 1.1.0 and 1.1.1 used a spawned view per call model.
|
|
305
|
+
Persistent session/root worker support first shipped in 2.0.0.
|
|
306
|
+
This is the same persistent session/root worker boundary.
|
|
307
|
+
The OpenCode worker stays separate from CLI daemon, and current plugin behavior is unchanged.
|
|
308
|
+
|
|
226
309
|
A generated OpenCode agent starts with this Markdown frontmatter:
|
|
227
310
|
|
|
228
311
|
```markdown
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.1.0"
|