diff --git a/tool-images/README.md b/tool-images/README.md new file mode 100644 index 0000000..e3d3134 --- /dev/null +++ b/tool-images/README.md @@ -0,0 +1,52 @@ +# Tool Images + +This directory contains Dockerfile templates for the base tool types used in Headquarter. + +## Available Images + +| File | Tool | Description | +|------|------|-------------| +| `base.dockerfile` | - | Common base with git, nvim, ranger, tmux, node | +| `code-server.dockerfile` | VS Code | Browser-based VS Code with extra tools | +| `jupyter.dockerfile` | Jupyter | Jupyter Lab/Notebook with extra tools | +| `opencode.dockerfile` | OpenCode | OpenCode agent server | +| `pi-agent.dockerfile` | Pi Agent | Pi coding agent with full terminal setup | + +## Usage + +When creating a tool type in the Tool Workshop, you can reference these Dockerfiles: + +1. Copy the contents of the desired `.dockerfile` +2. Paste into the "Dockerfile Template" field +3. Set `definition_type` to `dockerfile` + +## Building Locally + +To test an image locally: + +```bash +cd tool-images +docker build -f pi-agent.dockerfile -t pi-agent:latest . +docker run -it pi-agent:latest +``` + +## Customizing + +All images include: +- **git** - Version control +- **neovim** - Terminal editor +- **ranger** - Terminal file manager +- **tmux** - Terminal multiplexer +- **htop** - Process viewer +- **tree** - Directory tree +- **jq** - JSON processor +- **Node.js 20** - For npm-based tools + +The `pi-agent` image additionally includes the [Pi Coding Agent](https://pi.dev/) for AI-assisted development. + +## Adding New Images + +1. Create a new `.dockerfile` in this directory +2. Use `base.dockerfile` as a starting point if applicable +3. Document it in the table above +4. Update the tool type in the database via the Tool Workshop \ No newline at end of file diff --git a/tool-images/base.dockerfile b/tool-images/base.dockerfile new file mode 100644 index 0000000..00fc74b --- /dev/null +++ b/tool-images/base.dockerfile @@ -0,0 +1,36 @@ +# Base development image with common tools +FROM ubuntu:24.04 + +# Prevent interactive prompts during apt install +ENV DEBIAN_FRONTEND=noninteractive + +# Install base tools +RUN apt-get update && apt-get install -y \ + curl \ + wget \ + git \ + neovim \ + ranger \ + tmux \ + htop \ + tree \ + jq \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Create a non-root user +RUN useradd -m -s /bin/bash user +WORKDIR /home/user + +# Install Node.js (needed for pi and many dev tools) +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Set up git configuration defaults +RUN git config --global init.defaultBranch main \ + && git config --global user.email "dev@headquarter.local" \ + && git config --global user.name "Developer" + +USER user +CMD ["/bin/bash"] \ No newline at end of file diff --git a/tool-images/code-server.dockerfile b/tool-images/code-server.dockerfile new file mode 100644 index 0000000..ffa73e5 --- /dev/null +++ b/tool-images/code-server.dockerfile @@ -0,0 +1,28 @@ +# VS Code in browser +FROM lscr.io/linuxserver/code-server:latest + +USER root + +# Install additional tools +RUN apt-get update && apt-get install -y \ + git \ + neovim \ + ranger \ + tmux \ + htop \ + tree \ + jq \ + && rm -rf /var/lib/apt/lists/* + +# Install Node.js +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Set up git +RUN git config --global init.defaultBranch main + +# Code-server runs as abc user by default +USER abc + +EXPOSE 8443 \ No newline at end of file diff --git a/tool-images/jupyter.dockerfile b/tool-images/jupyter.dockerfile new file mode 100644 index 0000000..c997ba1 --- /dev/null +++ b/tool-images/jupyter.dockerfile @@ -0,0 +1,23 @@ +# Jupyter Notebook/Lab +FROM jupyter/scipy-notebook:latest + +USER root + +# Install additional tools +RUN apt-get update && apt-get install -y \ + git \ + neovim \ + ranger \ + tmux \ + htop \ + tree \ + jq \ + && rm -rf /var/lib/apt/lists/* + +# Set up git +RUN git config --global init.defaultBranch main + +# Switch back to jovyan user (default for scipy-notebook) +USER ${NB_UID} + +EXPOSE 8888 \ No newline at end of file diff --git a/tool-images/opencode.dockerfile b/tool-images/opencode.dockerfile new file mode 100644 index 0000000..1127ec6 --- /dev/null +++ b/tool-images/opencode.dockerfile @@ -0,0 +1,40 @@ +# OpenCode agent environment +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive + +# Install base dependencies +RUN apt-get update && apt-get install -y \ + curl \ + wget \ + git \ + neovim \ + ranger \ + tmux \ + htop \ + tree \ + jq \ + ca-certificates \ + python3 \ + python3-pip \ + && rm -rf /var/lib/apt/lists/* + +# Install Node.js +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Install OpenCode +RUN npm install -g opencode + +# Create non-root user +RUN useradd -m -s /bin/bash user +WORKDIR /home/user + +# Set up git +RUN git config --global init.defaultBranch main + +USER user + +EXPOSE 3000 +CMD ["opencode", "server"] \ No newline at end of file diff --git a/tool-images/pi-agent.dockerfile b/tool-images/pi-agent.dockerfile new file mode 100644 index 0000000..c7bc686 --- /dev/null +++ b/tool-images/pi-agent.dockerfile @@ -0,0 +1,53 @@ +# Pi Coding Agent - Terminal-based coding harness +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive + +# Install base dependencies +RUN apt-get update && apt-get install -y \ + curl \ + wget \ + git \ + neovim \ + ranger \ + tmux \ + htop \ + tree \ + jq \ + ca-certificates \ + python3 \ + python3-pip \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# Install Node.js (required for Pi) +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Install Pi Coding Agent globally +RUN npm install -g --ignore-scripts @earendil-works/pi-coding-agent + +# Create non-root user +RUN useradd -m -s /bin/bash user +WORKDIR /home/user + +# Set up git +RUN git config --global init.defaultBranch main \ + && git config --global user.email "dev@headquarter.local" \ + && git config --global user.name "Developer" + +# Create default tmux config +RUN echo 'set -g mouse on\nset -g default-terminal "screen-256color"' > /home/user/.tmux.conf + +# Create default ranger config +RUN mkdir -p /home/user/.config/ranger \ + && echo 'set preview_files true\nset use_preview_script true' > /home/user/.config/ranger/rc.conf + +# Set up Pi config directory +RUN mkdir -p /home/user/.pi/agent + +USER user + +# Default to bash (Pi is invoked manually via `pi` command) +CMD ["/bin/bash"] \ No newline at end of file