From 3ff1b9f3fae0f1c18a120ce6e0817b070b38a923 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath <2+defunkt@users.noreply.github.com> Date: Sat, 20 Sep 2025 18:12:41 -0700 Subject: [PATCH] wip --- src/css/main.css | 4 ++++ src/js/scrollback.ts | 2 +- src/server.tsx | 23 ++++++++++++++++------- src/shell.ts | 11 +++++++++++ 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 src/shell.ts diff --git a/src/css/main.css b/src/css/main.css index 978b269..329d72d 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -58,6 +58,10 @@ color: var(--magenta); } +.dark-blue { + color: var(--c64-dark-blue); +} + :fullscreen::backdrop { background: var(--background-color); } diff --git a/src/js/scrollback.ts b/src/js/scrollback.ts index 19aa871..acb6a16 100644 --- a/src/js/scrollback.ts +++ b/src/js/scrollback.ts @@ -24,7 +24,7 @@ export function setStatus(id: string, status: InputStatus) { switch (status) { case "waiting": - statusEl.classList.add("yellow") + statusEl.classList.add("dark-blue") break case "streaming": statusEl.classList.add("purple") diff --git a/src/server.tsx b/src/server.tsx index 5d9eb22..dc871b1 100644 --- a/src/server.tsx +++ b/src/server.tsx @@ -6,6 +6,8 @@ import color from "kleur" import { NOSE_ICON, NOSE_DIR, NOSE_BIN, NOSE_WWW } from "./config" import { transpile, isFile, tilde } from "./utils" import { apps, serveApp, publishDNS } from "./webapp" +import { runCommand } from "./shell" +import type { Message } from "./shared/message" import { Layout } from "./components/layout" import { Terminal } from "./components/terminal" @@ -54,15 +56,22 @@ app.get("/ws", upgradeWebSocket((c) => { return { onMessage(event, ws) { console.log(`Message from client: ${event.data}`) - const data = JSON.parse(event.data.toString()) - ws.send(JSON.stringify({ id: data.id, data: "Hi there!" })) - }, - onClose: () => { - console.log('Connection closed') + let data: Message | undefined + + try { + data = JSON.parse(event.data.toString()) + } catch (e) { + console.error("JSON parsing error", e) + } + + if (!data) return + + const result = runCommand(data.data) + ws.send(JSON.stringify({ id: data.id, data: result })) }, + onClose: () => console.log('Connection closed'), } -}) -) +})) // // app routes diff --git a/src/shell.ts b/src/shell.ts new file mode 100644 index 0000000..6af23ab --- /dev/null +++ b/src/shell.ts @@ -0,0 +1,11 @@ +//// +// runs commands and such. + +type CommandResult = { + type: "ok" | "error" + data: any +} + +export function runCommand(input: string): CommandResult { + return { type: "ok", data: "command: " + input } +} \ No newline at end of file