Files
transmission-manager/AGENTS.md
Jose Henrique ec3e1ee6a3
Some checks failed
Build and Deploy (internal) / Build Transmission Manager Image (push) Failing after 2m56s
Build and Deploy (internal) / Deploy Transmission Manager (internal) (push) Has been skipped
changes
2026-07-08 17:27:30 -03:00

3.3 KiB

Transmission Manager - Agent Guide

First Rule

Always read project-context.md before making code or documentation changes. If a change alters project purpose, architecture, APIs, file roles, workflows, constraints, or implementation patterns, update project-context.md in the same change.

Quick Summary

Transmission Manager is a lightweight single-binary Go web app for managing and viewing torrents in a Transmission RPC client. It serves a dark-mode vanilla HTML/CSS/JS SPA and proxies Transmission RPC calls through a minimal Go backend.

Stack

  • Backend: Go 1.24, standard library only.
  • Frontend: Vanilla HTML, CSS, and JavaScript. No framework or build step.
  • Static assets: embedded with Go embed from web/.
  • Runtime port: 8080.
  • Container: multi-stage Docker build from golang:1.24-alpine to alpine:latest.

Current Files

  • project-context.md - canonical project context and implementation rules for agents.
  • main.go - HTTP server, embedded static file serving, environment-driven Transmission RPC client, connection warning page, API routes.
  • web/index.html - SPA shell and toolbar controls.
  • web/app.js - frontend state, polling, in-place rendering, sorting, pause/resume actions.
  • web/styles.css - dark-only UI theme and responsive layout.
  • go.mod - module transmission-manager, Go 1.24.
  • Dockerfile - production container build.

Core API Surface

  • GET / serves a Transmission connection warning page when setup fails; otherwise it serves the embedded frontend.
  • GET /api/torrents returns Transmission torrent data.
  • GET /api/stats returns global session stats.
  • POST /api/torrents/{id}/pause maps to Transmission torrent-stop.
  • POST /api/torrents/{id}/resume maps to queue-respecting Transmission torrent-start.

Implementation Guidelines

  • Keep the backend stdlib-only. Do not add Gin, Fiber, Chi, Gorilla, or other Go web frameworks.
  • Keep the frontend dependency-free. Do not add React, Vue, Svelte, bundlers, package managers, or transpilers.
  • Preserve the single-binary model: static frontend files should remain embedded via embed.
  • Format display numbers in the frontend unless there is a clear backend reason.
  • Preserve in-place frontend updates during polling. Do not replace the whole torrent list on each refresh.
  • Keep polling lightweight and avoid overlapping refresh requests.
  • Keep UI dark-only, modern, compact, responsive, and based on CSS variables.

Transmission RPC Notes

  • Default RPC URL: http://192.168.20.22:3210/transmission/rpc.
  • Override the RPC URL with TRANSMISSION_URL.
  • Optional HTTP Basic Auth credentials come from TRANSMISSION_RPC_USERNAME and TRANSMISSION_RPC_PASSWORD; unset, empty, or literal null values mean no credential value.
  • Handle the Transmission session-ID handshake:
    1. POST to the RPC URL.
    2. If the response is 409, read X-Transmission-Session-Id.
    3. Retry the same request with that header.
    4. Cache the session ID behind a mutex.
  • "Peers at 100%" means count peers[] entries where progress === 1.0.
  • doneDate is a Unix timestamp; 0 means unfinished.

Do Not

  • Do not add authentication unless explicitly requested.
  • Do not add CI/CD or GitHub Actions.
  • Do not create a GitHub repository.
  • Do not vendor dependencies.
  • Do not add broad tests or infrastructure for small changes; keep verification proportional.