Files
l0ng-ai 3c783e8b5a fix(lsp): Start jdtls on the JVM directly and report server output outside the protocol
On Windows the downloaded jdtls was started through bin/jdtls.bat, which runs
`python` and then `pause`. Without a working Python the batch file printed
pause's prompt in the console code page on stdout; the client stopped reading at
that "non-UTF-8 header", killed the process and showed only "exited with code 1".

- jdtls: build the JVM command line of the release's launcher script (Equinox
  launcher jar, per-platform shared configuration, JDK 24+ XML limits, --jvm-arg
  options, -data) and start `java` from the selected JDK directly, on every
  platform. Own wrapper scripts and other layouts keep their command.
- JSON-RPC transport: stdout lines that cannot start a message header are
  decoded, logged and handed to the stderr callback instead of ending the
  connection; stderr and these lines are decoded as UTF-8, else in the Windows
  OEM/ANSI code page, else lossily.
- A process that exits on its own is reported closed only after its remaining
  output is read, and a failed initialize waits for the exit, so the crash
  message carries the real exit code and the last lines.
- TCP-started language servers and DAP adapters read their output the same way
  (a non-UTF-8 line no longer stops the reader); stray adapter stdout goes into
  the adapter's error tail.

Fixes #90

Claude-Session: https://claude.ai/code/session_01VUYsdXA2nkF5v6zsC93dpn
2026-10-27 20:42:08 +08:00
..
2026-10-22 18:55:10 +08:00
2026-10-22 18:55:10 +08:00
2026-10-22 18:55:10 +08:00
2026-10-22 18:55:10 +08:00