agent-console complained about the two-step workflow: kubectl exec a script to spawn an agent, separate terminal to watch it. Root cause was hub being a separate Go sidecar with no access to the pi binary or its config, so it could only watch, never trigger. hub.js now runs inside the pi container itself (same filesystem, same PATH) and exposes POST /run, which spawns `pi -p --mode json` directly and streams it over the same /console WebSocket everyone else is already watching. agent-console gained a `run <agent> <prompt>` subcommand that POSTs then watches -- no separate exec step, no separate terminal. Drops the golang:1.25-alpine sidecar container and agent-run-configmap.yaml entirely (both superseded). ConfigMaps regenerated via local-harness/hub/sync-to-homelab.sh instead of hand-copied, so hub.js/config.json/settings.json each have exactly one source of truth.
68 lines
2.1 KiB
YAML
68 lines
2.1 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.
|
|
- name: pi
|
|
image: node:22-slim
|
|
command:
|
|
- sh
|
|
- -c
|
|
- "npm install -g @earendil-works/[email protected] && npm install --prefix /root ws && node /root/hub.js"
|
|
ports:
|
|
- containerPort: 9090
|
|
resources:
|
|
requests:
|
|
cpu: "2"
|
|
memory: 4Gi
|
|
limits:
|
|
cpu: "4"
|
|
memory: 8Gi
|
|
volumeMounts:
|
|
- name: pi-config
|
|
mountPath: /root/.pi/config.json
|
|
subPath: config.json
|
|
- 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: hub-src
|
|
mountPath: /root/hub.js
|
|
subPath: hub.js
|
|
volumes:
|
|
- name: pi-config
|
|
configMap:
|
|
name: pi-config
|
|
- name: pi-models
|
|
secret:
|
|
secretName: pi-models
|
|
- name: hub-src
|
|
configMap:
|
|
name: hub-src
|