# 🐸 Toad ACP - Minimal
FROM fedora:latest

RUN dnf install -y nodejs npm python3 python3-pip curl openssh-server wireguard-tools && \
    npm install -g nbb && \
    pip3 install --break-system-packages textual rich duckdb && \
    curl -fsSL "https://github.com/openai/codex/releases/download/rust-v0.75.0/codex-x86_64-unknown-linux-gnu.tar.gz" | tar -xzf - -C /usr/local/bin && \
    chmod +x /usr/local/bin/codex-x86_64-unknown-linux-gnu && \
    mv /usr/local/bin/codex-x86_64-unknown-linux-gnu /usr/local/bin/codex && \
    ssh-keygen -A

WORKDIR /app
COPY --chmod=755 <<'TOAD' /app/toad.cljs
(ns toad (:require ["http" :as http] ["readline" :as rl]))
(def BANNER "\n🐸 TOAD ACP Server\n🦆 The duck inhabits the toad\n")
(defn start []
  (println BANNER)
  (println (str "ACP: http://0.0.0.0:9000"))
  (.listen (.createServer http (fn [_ res] (.end res "🐸"))) 9000)
  (let [r (.createInterface rl #js {:input js/process.stdin :output js/process.stdout})]
    (.setPrompt r "toad> ") (.prompt r)
    (.on r "line" (fn [l] (println (str "→ " l)) (.prompt r)))))
(start)
TOAD

EXPOSE 9000 22
ENTRYPOINT ["nbb", "/app/toad.cljs"]