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