openova/products
hatiyildiz 5c15667311 feat(sandbox): Wave 2 — pty-server + openova-sandbox-mcp scaffold
Two Go services that together carry the agent traffic per architecture
docs §1-§3 (NOT tmux).

pty-server (products/sandbox/pty-server, :7681):
  POST   /sessions            spawn child in fresh PTY
  GET    /sessions[/{id}]     list / describe
  WS     /sessions/{id}/attach   bidi raw byte stream, replays 256 KiB ring
  WS     /sessions/{id}/cards    JSON card stream (mobile alt surface)
  POST   /sessions/{id}/resize   rows/cols -> SIGWINCH
  POST   /sessions/{id}/signal   INT|QUIT|TERM|HUP to process group
  DELETE /sessions/{id}      graceful SIGTERM, 5s, SIGKILL
  GET    /healthz             liveness
  Built on creack/pty + gorilla/websocket; fan-out drops only for slow
  consumers; graceful shutdown closes every session on SIGTERM.

openova-sandbox-mcp (products/sandbox/mcp-server, stdio JSON-RPC):
  initialize / tools/list / tools/call / ping wired end-to-end.
  Tool catalogue stubs across the required namespaces:
    gitea.* (8), k8s.read.* (4), sandbox.db.* (4), sandbox.auth.* (3),
    sandbox.session.* (2 — whoami/info for agent self-discovery).
  Every stub returns {"status":"not_implemented","tool":...,"wave":2}
  so the agent can list and dispatch the full surface before backends
  land in Wave 3+.

Both binaries: distroless/static-debian12:nonroot containers, scratch
deps, no chart bumps, no UI changes, READ-ONLY clusters preserved.

Verified locally:
  go build ./... clean for both modules.
  go vet ./... clean for both modules.
  MCP smoke: stdin {initialize} -> framed response with
    serverInfo.name = openova-sandbox-mcp; tools/list returns 21 tools
    sorted by name.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 06:41:41 +02:00
..
axon feat(axon): make qwen3-coder thinking mode toggleable via request parameter 2026-04-26 09:20:33 +02:00
catalyst deploy: update catalyst images to 6d5b4b4 2026-05-18 03:56:28 +00:00
continuum feat(continuum): F — dry-run report + post-switchover health check + audit-emit coverage (slice F-1+F-2+F-3, #1101) (#1161) 2026-05-09 08:33:37 +04:00
cortex docs(pass-52): bundled date-sweep + cross-component namespace clean; knative clean 2026-04-28 00:37:21 +02:00
dmz-vcluster fix: mark bp-dmz-vcluster + bp-netbird default-off for smoke-render gate (#1286) 2026-05-10 15:57:18 +04:00
fabric docs(seaweedfs+guacamole): replace MinIO with SeaweedFS as unified S3 encapsulation; add Guacamole to bp-relay 2026-04-28 10:23:46 +02:00
fingate docs(pass-52): bundled date-sweep + cross-component namespace clean; knative clean 2026-04-28 00:37:21 +02:00
openova-flow fix(openova-flow): COPY go.sum + go mod download in Dockerfile (#1475) 2026-05-14 14:23:57 +04:00
relay docs(seaweedfs+guacamole): replace MinIO with SeaweedFS as unified S3 encapsulation; add Guacamole to bp-relay 2026-04-28 10:23:46 +02:00
sandbox feat(sandbox): Wave 2 — pty-server + openova-sandbox-mcp scaffold 2026-05-18 06:41:41 +02:00