summaryrefslogtreecommitdiffhomepage
path: root/packages/kernel/src
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-24 13:01:18 +0900
committerAdam Malczewski <[email protected]>2026-06-24 13:01:18 +0900
commit5630bf177c1f45d8e35ddbe35bf7d5136dc4f244 (patch)
tree7603569ef855fe3aa531f7c8bd125dff477eaf79 /packages/kernel/src
parent1eb25dcace8c3cb0b3a3871a74d0dd3eaf169eb7 (diff)
downloaddispatch-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')
0 files changed, 0 insertions, 0 deletions