29 Commits

Author SHA1 Message Date
plenarius f851d8b8f2 Layonara Forge — NWN Development IDE
Electron desktop application for Neverwinter Nights module development.
Clone, edit, build, and run a complete Layonara NWNX server with only
Docker required.

- React 19 + Vite frontend with Monaco editor and NWScript LSP
- Node.js + Express backend managing Docker sibling containers
- Electron shell with Docker availability check and auto-setup
- Builder image auto-builds on first use from bundled Dockerfile
- Cross-platform: Windows (.exe), macOS (.dmg), Linux (.AppImage)
- Gitea Actions CI for automated release builds
2026-04-21 12:14:38 -04:00
plenarius f39f1d818b feat: integrate monaco-languageclient v10 with NWScript LSP
Replace hand-rolled LSP client (lspClient.ts, useLspClient.ts) with
monaco-languageclient v10 extended mode using @typefox/monaco-editor-react.
NWScript TextMate grammar from the LSP submodule provides syntax highlighting.
Full LSP features: completion, hover, diagnostics, go-to-definition, signature
help — all wired through WebSocket to the nwscript-language-server.

LSP server patches: fix workspaceFolders null assertion crash, handle missing
workspace/configuration gracefully, derive rootPath from rootUri when null,
guard tokenizer getRawTokenContent against undefined tokens.

Backend fixes: WebSocket routing changed to noServer mode so /ws, /ws/lsp,
and /ws/terminal/* don't conflict. TLK index loaded at startup (41,927 entries
from nwn-haks/layonara.tlk.json). Workspace routes get proper try/catch.
writeConfig creates parent directories. setupClone ensures workspace structure.

Frontend: GffEditor and AreaEditor rewritten with inline styles and TLK
resolution for CExoLocString fields. EditorTabs rewritten with lucide icons.
Tab content hydrates from API on refresh. Setup wizard gets friendly error
messages. SimpleEditor/SimpleDiffEditor for non-LSP editor uses. Vite config
updated for monaco-vscode-api compatibility.
2026-04-21 05:23:52 -04:00
plenarius a8fa85416d fix: resolve TypeScript errors in editor routes and git service imports 2026-04-21 00:08:10 -04:00
plenarius b85f70dc95 refactor: replace GitHub API with Gitea-compatible git provider service 2026-04-20 23:05:38 -04:00
plenarius b224ebc927 feat: add upstream repo polling every 15 minutes 2026-04-20 21:55:52 -04:00
plenarius 3784d9f13a feat: add conventional commit message validation 2026-04-20 21:55:23 -04:00
plenarius 7f848aad5d feat: add Git service for clone, pull, commit, push operations 2026-04-20 21:54:56 -04:00
plenarius f54816a622 feat: add GitHub service for PAT validation, forking, and PR management 2026-04-20 21:54:09 -04:00
plenarius c7f5646e62 feat: add GFF type schema definitions for visual editors 2026-04-20 20:07:48 -04:00
plenarius 269ce1178c feat: add Toolset service for temp0/ watching and GFF change detection 2026-04-20 20:00:17 -04:00
plenarius e8cce96557 feat: add SQL console endpoint for local MariaDB queries 2026-04-20 19:56:22 -04:00
plenarius 695c5d4fb7 feat: add real-time server log streaming via WebSocket 2026-04-20 19:55:58 -04:00
plenarius dc45098cd1 feat: add NWN server stack management service 2026-04-20 19:55:31 -04:00
plenarius 0e31277eec feat: add NWNX C++ build pipeline 2026-04-20 19:51:34 -04:00
plenarius 6d18386473 feat: add hak build pipeline 2026-04-20 19:51:05 -04:00
plenarius 5c840e324b feat: add script hot-reload and compile-on-save 2026-04-20 19:50:39 -04:00
plenarius 59909a7b48 feat: add module build service with nasher compile and pack 2026-04-20 19:50:07 -04:00
plenarius b7177a8fd7 feat: connect NWScript language server to Monaco via WebSocket
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
2026-04-20 19:41:05 -04:00
plenarius 64908098cd feat: add integrated terminal with xterm.js and shell sessions 2026-04-20 19:32:02 -04:00
plenarius b36391b520 feat: add global workspace search with regex and file filtering 2026-04-20 19:30:42 -04:00
plenarius 03b762e239 feat: add 2DA intellisense parser and lookup for NWScript editor 2026-04-20 19:12:03 -04:00
plenarius 99d0c4f1e9 feat: add TLK string preview lookup for NWScript editor 2026-04-20 19:11:32 -04:00
plenarius 1b8293627d feat: add resref auto-lookup index for NWScript editor 2026-04-20 19:11:10 -04:00
plenarius 02ca134743 feat: add file explorer with tree view and IDE layout
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.
2026-04-20 19:09:19 -04:00
plenarius c7de3c13a7 feat: add NWN server .env template generator 2026-04-20 18:36:05 -04:00
plenarius ec8aaf64a3 feat: add Docker service for container management and image pulls 2026-04-20 18:29:09 -04:00
plenarius ee7a0783ea feat: add workspace service and route for directory management 2026-04-20 18:26:51 -04:00
plenarius 421d591c1e feat: add Express + WebSocket server entry point 2026-04-20 18:25:10 -04:00
plenarius 76f211af6c feat: initialize monorepo with backend and frontend packages 2026-04-20 18:18:16 -04:00