Fixa native builds + CJS-interop; lås beroenden; verifierad slice

- pnpm-workspace.yaml: allowBuilds för esbuild + node-pty (pnpm 11 ersätter
  onlyBuiltDependencies-listan)
- pnpm-lock.yaml: committa låsfilen
- server: @xterm/headless + @xterm/addon-serialize är CommonJS — default-
  importera värdet och ta typen via 'import type' (annars ESM-named-export-fel
  i runtime trots att typecheck passerar)
- daemon: städa pty-processen även vid SIGTERM

Verifierat lokalt: alla paket typecheckar, web bundlar (vite), och rök-test av
server<->daemon<->klient passerar (token-auth, registrering, snapshot,
input->pty->output).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-28 14:42:01 +02:00
parent c58f73626e
commit 8af5fd9972
4 changed files with 1409 additions and 11 deletions

View File

@@ -93,9 +93,11 @@ pty.onExit(({ exitCode }) => {
setTimeout(() => process.exit(exitCode), 200); setTimeout(() => process.exit(exitCode), 200);
}); });
process.on("SIGINT", () => { function shutdown(): void {
pty.kill(); pty.kill();
process.exit(0); process.exit(0);
}); }
process.on("SIGINT", shutdown);
process.on("SIGTERM", shutdown);
connect(); connect();

View File

@@ -11,8 +11,12 @@
*/ */
import http from "node:http"; import http from "node:http";
import { WebSocketServer, WebSocket } from "ws"; import { WebSocketServer, WebSocket } from "ws";
import { Terminal } from "@xterm/headless"; // @xterm/headless och addon-serialize är CommonJS — default-importera värdet och
import { SerializeAddon } from "@xterm/addon-serialize"; // destrukturera; ta typen via `import type` (raderas i runtime).
import XtermHeadless from "@xterm/headless";
import type { Terminal as TerminalType } from "@xterm/headless";
import XtermSerialize from "@xterm/addon-serialize";
import type { SerializeAddon as SerializeAddonType } from "@xterm/addon-serialize";
import type { import type {
DaemonHello, DaemonHello,
DaemonMessage, DaemonMessage,
@@ -22,6 +26,9 @@ import type {
} from "@agent-helm/shared"; } from "@agent-helm/shared";
import { parseMessage } from "@agent-helm/shared"; import { parseMessage } from "@agent-helm/shared";
const { Terminal } = XtermHeadless;
const { SerializeAddon } = XtermSerialize;
const TOKEN = process.env.AGENT_HELM_TOKEN ?? ""; const TOKEN = process.env.AGENT_HELM_TOKEN ?? "";
const PORT = Number(process.env.PORT ?? 8787); const PORT = Number(process.env.PORT ?? 8787);
@@ -33,8 +40,8 @@ if (!TOKEN) {
interface Session { interface Session {
meta: SessionMeta; meta: SessionMeta;
daemon: WebSocket | null; daemon: WebSocket | null;
term: Terminal; term: TerminalType;
serializer: SerializeAddon; serializer: SerializeAddonType;
subscribers: Set<WebSocket>; subscribers: Set<WebSocket>;
} }

1389
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
packages: packages:
- "packages/*" - "packages/*"
# pnpm 10+ blockar native build-scripts som standard. Tillåt dem vi behöver: # pnpm 11 blockar native build-scripts som standard. node-pty kompilerar sin
# node-pty kompilerar sin binär, esbuild hämtar sin plattformsbinär (vite/tsx). # binär och esbuild hämtar sin plattformsbinär (krävs av vite/tsx) — tillåt dem.
onlyBuiltDependencies: allowBuilds:
- esbuild esbuild: true
- node-pty node-pty: true