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:
@@ -93,9 +93,11 @@ pty.onExit(({ exitCode }) => {
|
||||
setTimeout(() => process.exit(exitCode), 200);
|
||||
});
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
function shutdown(): void {
|
||||
pty.kill();
|
||||
process.exit(0);
|
||||
});
|
||||
}
|
||||
process.on("SIGINT", shutdown);
|
||||
process.on("SIGTERM", shutdown);
|
||||
|
||||
connect();
|
||||
|
||||
@@ -11,8 +11,12 @@
|
||||
*/
|
||||
import http from "node:http";
|
||||
import { WebSocketServer, WebSocket } from "ws";
|
||||
import { Terminal } from "@xterm/headless";
|
||||
import { SerializeAddon } from "@xterm/addon-serialize";
|
||||
// @xterm/headless och addon-serialize är CommonJS — default-importera värdet och
|
||||
// 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 {
|
||||
DaemonHello,
|
||||
DaemonMessage,
|
||||
@@ -22,6 +26,9 @@ import type {
|
||||
} from "@agent-helm/shared";
|
||||
import { parseMessage } from "@agent-helm/shared";
|
||||
|
||||
const { Terminal } = XtermHeadless;
|
||||
const { SerializeAddon } = XtermSerialize;
|
||||
|
||||
const TOKEN = process.env.AGENT_HELM_TOKEN ?? "";
|
||||
const PORT = Number(process.env.PORT ?? 8787);
|
||||
|
||||
@@ -33,8 +40,8 @@ if (!TOKEN) {
|
||||
interface Session {
|
||||
meta: SessionMeta;
|
||||
daemon: WebSocket | null;
|
||||
term: Terminal;
|
||||
serializer: SerializeAddon;
|
||||
term: TerminalType;
|
||||
serializer: SerializeAddonType;
|
||||
subscribers: Set<WebSocket>;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user