Kong key-auth rejected the Authorization: Bearer header every OpenAI-SDK-compatible client sends (verified: raw apikey header works, Bearer doesn't), so it's commented out and stripped from every llm-routes.yaml annotation until there's a Bearer-compatible fix. agent-pod now clones and builds the agent-manager fork from source at container start (no prebuilt binary shipped -- wrong arch and over ConfigMap's size cap) and ships coordinator.js alongside hub.js, so multiple repos can run the pipeline concurrently in one pod via kubectl exec. hub.js keeps its existing role as the container's foreground process, unchanged.
146 lines
5.5 KiB
YAML
146 lines
5.5 KiB
YAML
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: agent-pod
|
|
namespace: agent-pod
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: agent-pod
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: agent-pod
|
|
spec:
|
|
# api.riotpiao.com has no in-cluster DNS record (only resolves from the
|
|
# home network's own resolver) -- pin it to ingress-nginx-controller's
|
|
# ClusterIP so pi's models.json baseUrl works unchanged. TLS still
|
|
# terminates correctly since SNI/Host still say api.riotpiao.com.
|
|
hostAliases:
|
|
- ip: "10.101.128.185"
|
|
hostnames:
|
|
- "api.riotpiao.com"
|
|
containers:
|
|
# hub.js runs in the same container as pi (not a sidecar) so it can
|
|
# spawn `pi -p --mode json` directly via child_process -- a separate
|
|
# container can't exec into another container's filesystem/PATH.
|
|
# It IS the container's long-running process now; no more `sleep
|
|
# infinity` placeholder.
|
|
#
|
|
# Also builds the agent-manager fork (github.com/Riotpiaole/
|
|
# agent-manager, add-headless-spawn branch) from source and drops
|
|
# coordinator.js in beside hub.js -- neither is the container's
|
|
# foreground process. hub.js keeps that role unchanged; running
|
|
# multiple repos' pipelines concurrently in this one pod means
|
|
# `kubectl exec <pod> -- node /root/coordinator.js --repo X --tasks
|
|
# Y &` once per repo, each an independent process inside the same
|
|
# container, each spawning its own agent-manager-tracked sessions
|
|
# on the container's local tmux server -- `kubectl exec -it <pod>
|
|
# -- agent-manager` attaches its TUI live against those same
|
|
# sessions, no cross-machine visibility problem since spawner,
|
|
# tmux server, and viewer are all colocated here.
|
|
#
|
|
# No prebuilt Linux binary is shipped for agent-manager: the local
|
|
# .bin/ build is macOS arm64 (wrong OS/arch for this container
|
|
# anyway) and it's 27MB, well over a ConfigMap's ~1MiB cap. Debian's
|
|
# `apt-get golang-go` is far too old for this fork's go 1.26.5
|
|
# requirement, so the real Go toolchain is fetched directly from
|
|
# go.dev instead.
|
|
- name: pi
|
|
image: node:22-slim
|
|
command:
|
|
- sh
|
|
- -c
|
|
- |
|
|
set -e
|
|
apt-get update && apt-get install -y git curl jq openssh-client tmux
|
|
ssh-keygen -y -f /root/.ssh/id_forgejo > /root/.ssh/id_forgejo.pub
|
|
eval "$(ssh-agent -s)"
|
|
ssh-add /root/.ssh/id_forgejo
|
|
npm install -g @earendil-works/[email protected]
|
|
npm install --prefix /root ws
|
|
|
|
curl -fsSL "https://go.dev/dl/go1.26.5.linux-$(dpkg --print-architecture).tar.gz" | tar -C /usr/local -xz
|
|
export PATH="$PATH:/usr/local/go/bin"
|
|
git clone --branch add-headless-spawn --depth 1 \
|
|
https://github.com/Riotpiaole/agent-manager.git /root/agent-manager-src
|
|
(cd /root/agent-manager-src && go build -o /usr/local/bin/agent-manager .)
|
|
|
|
node /root/hub.js
|
|
env:
|
|
- name: PI_BIN
|
|
value: pi
|
|
- name: AGENT_MANAGER_BIN
|
|
value: /usr/local/bin/agent-manager
|
|
- name: HUB_WORK_DIR
|
|
value: /root/agent-harness-work
|
|
ports:
|
|
- containerPort: 9090
|
|
resources:
|
|
requests:
|
|
cpu: "4"
|
|
memory: 8Gi
|
|
limits:
|
|
cpu: "8"
|
|
memory: 16Gi
|
|
volumeMounts:
|
|
- name: pi-config
|
|
mountPath: /root/.pi/agent/settings.json
|
|
subPath: settings.json
|
|
- name: pi-models
|
|
mountPath: /root/.pi/agent/models.json
|
|
subPath: models.json
|
|
- name: pi-skills
|
|
mountPath: /root/.pi/agent/skills
|
|
- name: hub-src
|
|
mountPath: /root/hub.js
|
|
subPath: hub.js
|
|
- name: coordinator-src
|
|
mountPath: /root/coordinator.js
|
|
subPath: coordinator.js
|
|
- name: ssh-key
|
|
mountPath: /root/.ssh/id_forgejo
|
|
subPath: id_forgejo
|
|
- name: ssh-config
|
|
mountPath: /root/.ssh/config
|
|
subPath: config
|
|
volumes:
|
|
- name: pi-config
|
|
configMap:
|
|
name: pi-config
|
|
- name: pi-models
|
|
secret:
|
|
secretName: pi-models
|
|
- name: pi-skills
|
|
configMap:
|
|
name: pi-skills
|
|
items:
|
|
- key: planner-SKILL.md
|
|
path: planner/SKILL.md
|
|
- key: investigator-SKILL.md
|
|
path: investigator/SKILL.md
|
|
- key: info-collector-SKILL.md
|
|
path: info-collector/SKILL.md
|
|
- key: implementer-SKILL.md
|
|
path: implementer/SKILL.md
|
|
- key: judge-SKILL.md
|
|
path: judge/SKILL.md
|
|
- key: resolver-SKILL.md
|
|
path: resolver/SKILL.md
|
|
- key: brave-search-SKILL.md
|
|
path: brave-search/SKILL.md
|
|
- name: hub-src
|
|
configMap:
|
|
name: hub-src
|
|
- name: coordinator-src
|
|
configMap:
|
|
name: coordinator-src
|
|
- name: ssh-key
|
|
secret:
|
|
secretName: agent-pod-ssh-key
|
|
defaultMode: 0600
|
|
- name: ssh-config
|
|
configMap:
|
|
name: agent-pod-ssh-config
|