# Upstreams / Dependency Notes

This file is a concise reference for important repo/runtime dependencies that affect current implementation work.

Use it for:
- major framework/runtime dependencies
- important transport or proxy assumptions
- shared infrastructure dependencies such as the artifact server

Do not use this file as a backlog.

---

## Portal (`zpack-portal`)

Core dependencies / assumptions:
- Next.js
- Axios for API interaction
- WebSocket-backed console UI through the API bridge
- multipart/FormData upload flows through API/agent paths

Portal boundary:
- Portal talks to API, not directly to agents, for normal state/actions

---

## API (`zpack-api`)

Core dependencies / assumptions:
- Node.js (ESM)
- Express
- Prisma
- token/cookie-based auth flows
- WebSocket proxying for console / IDE flows
- raw `http.request` piping for upload proxy paths

API boundary:
- API is the polling/heartbeat authority for agent state
- API normalizes state for Portal consumption

---

## Agent (`zlh-agent`)

Core dependencies / assumptions:
- Go
- filesystem enforcement / sandboxing
- PTY and WebSocket console transport
- local metadata tracking for managed files/workloads
- local Minecraft backup / restore support

Agent boundary:
- agent owns local workload-aware behavior
- agent does not own offsite/PBS durability strategy

---

## `zlh-artifacts` (Artifact Server)

Role:
- central artifact distribution for runtime and addon installs

Artifacts currently hosted:

```text
devcontainer/
  _catalog.json
  go/
  node/
  python/
  java/
  dotnet/

addons/
  code-server/
```

Used by:
- `zlh-agent`

Artifacts are downloaded during provisioning via artifact URL helpers (for example, `provcommon.BuildArtifactURL(...)`).

Containers do not rely on prepositioned artifacts.

---

## Operational reminders

- upload transport uses raw piping, not `fetch()`, on proxy/upload paths
- hosted browser IDE flow is edge → API → container, not direct edge → container
- game publish flow and dev IDE flow should not be conflated
