diff options
| author | Adam Malczewski <[email protected]> | 2026-06-24 13:01:18 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-24 13:01:18 +0900 |
| commit | 5630bf177c1f45d8e35ddbe35bf7d5136dc4f244 (patch) | |
| tree | 7603569ef855fe3aa531f7c8bd125dff477eaf79 /packages/kernel/src/runtime | |
| parent | 1eb25dcace8c3cb0b3a3871a74d0dd3eaf169eb7 (diff) | |
| download | dispatch-5630bf177c1f45d8e35ddbe35bf7d5136dc4f244.tar.gz dispatch-5630bf177c1f45d8e35ddbe35bf7d5136dc4f244.zip | |
fix(lsp): broken-server recovery + config source attribution
Two issues found by decompiling the running dispatch-server binary
(handoff from a ruby-lsp setup in raylib-jamstack):
Issue 2 (blocker): a failed LSP server was "broken" FOREVER — the
manager's broken set was cleared only in shutdownAll(), so a server
that failed (bad env, missing binary, or a since-fixed config) stayed
state:"error" for the whole process. For an agent running *inside*
dispatch the only recovery (server restart) kills its own session.
Now a broken server self-heals when its resolved config changes since
it was marked broken (discrete event → no retry storm), with a bounded
backoff for transient failures.
Issue 1: .dispatch/lsp.json silently shadowed opencode.json's lsp key
with no warning and no source attribution. Now: shadow warning via
host.logger when both declare lsp; configSource populated on status
(.dispatch/lsp.json / opencode.json / built-in); spawn-failure error
strings name the config source.
Contract: additive configSource?: string on LspServerInfo
(@dispatch/transport-contract 0.20.0→0.21.0). transport-http passes it
through to the wire (was a field-by-field map that dropped it — CR
resolved by the transport-http owner).
tsc -b EXIT 0, biome clean, 1443 vitest pass.
Diffstat (limited to 'packages/kernel/src/runtime')
0 files changed, 0 insertions, 0 deletions
