Add the forked nwscript-ee-language-server as a git submodule and wire
it up to the editor through a WebSocket-based LSP bridge:
- Backend: lsp.service.ts spawns the language server in --stdio mode
and bridges JSON-RPC messages between WebSocket and stdin/stdout
- Backend: /ws/lsp upgrade handler in index.ts
- Frontend: LspClient class using vscode-ws-jsonrpc for JSON-RPC over
WebSocket, with Monaco providers for completions, hover, and
diagnostics
- Frontend: useLspClient/useLspDocument hooks integrated into
MonacoEditor component
Backend: editor service for directory tree reading and file CRUD,
editor routes at /api/editor with path traversal protection.
Frontend: FileExplorer tree component with expand/collapse directories,
IDELayout with sidebar + header + outlet, wired into App routing.
Editor now receives state as props from App for cross-component file loading.