Browser-based interactive terminal sessions with agent CLIs via WebSocket + node-pty. Supports full TUI rendering (colors, cursor, ctrl-c) through xterm.js in the browser. Architecture: xterm.js ←WebSocket→ pty-server.js ←PTY→ agent CLI - Extract shared buildAgentEnv() from executor into agent-env.ts - Add internal /api/agents/[id]/env endpoint for PTY server - Add pty-server.js (WebSocket + node-pty, max 3 sessions, 2hr cleanup) - Add custom server.js wrapping Next.js with WebSocket upgrade - Add ChatTab component with agent selector and terminal - Wire CHAT tab into dashboard nav and render - Configure serverExternalPackages for node-pty - Update Dockerfile with build tools and custom server - Bump k8s memory limit 1Gi → 2Gi for PTY sessions
25 lines
717 B
JavaScript
25 lines
717 B
JavaScript
const { createServer } = require("http");
|
|
const { parse } = require("url");
|
|
const next = require("next");
|
|
const { attachPtyWebSocket } = require("./pty-server");
|
|
|
|
const dev = process.env.NODE_ENV !== "production";
|
|
const hostname = process.env.HOSTNAME || "0.0.0.0";
|
|
const port = parseInt(process.env.PORT || "3100", 10);
|
|
|
|
const app = next({ dev, hostname, port });
|
|
const handle = app.getRequestHandler();
|
|
|
|
app.prepare().then(() => {
|
|
const server = createServer((req, res) => {
|
|
const parsedUrl = parse(req.url || "/", true);
|
|
handle(req, res, parsedUrl);
|
|
});
|
|
|
|
attachPtyWebSocket(server);
|
|
|
|
server.listen(port, hostname, () => {
|
|
console.log(`> Harness ready on http://${hostname}:${port}`);
|
|
});
|
|
});
|