Agent (cmd/nomos): - Stream LLM tokens via NewStreaming; emit text_delta then final text. - OpenRouter provider routing: data_collection=deny (ZDR) + require_parameters; NOMOS_PROVIDER_SORT opt-in; Exacto via model suffix. - Multi-turn: reload session history into context; UI passes session id. - Fix agent_activity logging (agent_id/session_id) and mcpClient data race. Events (live control-room feed): - approval.created (mcp), approval.decided (api), execution.completed/failed (approved-action path), signal.raised/resolved + health.changed (scheduler, transition-gated). Fixes: - createApproval FK violation (reuse execution entity) — the agent's only write path; log the previously-swallowed errors. Web UI: - Embed web/dist via //go:embed (single binary); Dockerfile builds SPA into the Go stage; committed .gitkeep placeholder keeps backend-only builds green. - Caddy: Authentik-gated /agent/* -> nomos so the UI reaches the agent same-origin in production. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
27 lines
580 B
Docker
27 lines
580 B
Docker
# Nomos agent container — standalone MCP client gateway (Phase 4)
|
|
FROM golang:1.26-alpine AS builder
|
|
|
|
RUN apk add --no-cache git ca-certificates
|
|
|
|
WORKDIR /build
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
|
|
COPY . .
|
|
|
|
RUN CGO_ENABLED=0 go build -o /nomos -tags timetzdata -ldflags="-s -w" ./cmd/nomos
|
|
|
|
FROM gcr.io/distroless/static:nonroot
|
|
|
|
COPY --from=builder /nomos /nomos
|
|
COPY nomos/ /app/nomos/
|
|
|
|
ENV NOMOS_MCP_URL=http://api:8090/mcp
|
|
ENV NOMOS_AGENT_SLUG=agent:nomos
|
|
ENV NOMOS_LISTEN=:8092
|
|
ENV NOMOS_MODEL=deepseek/deepseek-v4-flash
|
|
|
|
EXPOSE 8092
|
|
|
|
ENTRYPOINT ["/nomos", "serve"]
|