# task-master Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Checklisten, Zeiterfassung und Reports. Gebaut mit [Bubble Tea](https://github.com/charmbracelet/bubbletea). ![Demo](demo.gif) > Demo wird aus [`demo.tape`](demo.tape) erzeugt (`make demo`). Ohne GIF lokal: siehe [Demo aufnehmen](#demo-aufnehmen). ## Features - Projekte & Tickets lokal als JSON (kein Server) — Binary `tm` - Web-Server `tm_server` mit eingebettetem Svelte-UI, SQLite, Auth und Rechte pro Projekt - Board-Filter: All / Backlog / In Progress / Done - Tickets in `$EDITOR` bearbeiten (Markdown + Checklisten) - Timer, manuelle Zeitbuchungen, Zeiteinträge verwalten - Report mit Group-by (Ticket / Tag) - Undo / Redo über eine Command-History (TUI) - Vim-Style Keybindings (TUI) - YouTrack Pull/Push (manuell; Remote-URL, Token, Project-Key pro Projekt) - Server: Sync-Backend pro Projekt, Projekt-Tokens für die TUI, Ticket-Revisionen ## Install Voraussetzung: Go (siehe `go.mod`). Für `tm_server` zusätzlich Node.js (Frontend-Build). ```bash git clone git@git.aloxdrim.de:skruecken/task-master.git cd task-master make install # → $(go env GOPATH)/bin/tm # oder nur bauen: make build # → ./bin/tm make build-server # Frontend + → ./bin/tm_server ``` ## Nutzung ```bash tm # TUI starten tm sync pull # Issues von YouTrack holen tm sync push # lokale Änderungen nach YouTrack tm sync pull -p inbox # anderes Projekt tm version # Build-Version (Git-Hash) tm help ``` ### Web-Server (`tm_server`) ```bash # Dev/Test gegen lokales tm_server (kein YouTrack): seedet Projekt „Test“ + Samples make run-server-dev # :8080, Data unter ./.dev-home, Login admin/admin # Produktion / manuell: export TM_ADMIN_USER=admin export TM_ADMIN_PASSWORD='change-me' export TASK_MASTER_SECRET='long-random-secret' # verschlüsselt Remote-Tokens ./bin/tm_server -listen :8080 # JSON-Daten der TUI einmalig importieren: ./bin/tm_server import-json -owner admin ``` UI: http://localhost:8080 — Dashboard, Board, Report, Members, Settings (Tokens), Users (Admin), Ticket-Zeit & History. Das Test-Environment (`run-server-dev`) spricht nur mit diesem Backend; YouTrack ist dort nicht verdrahtet. Dev-Frontend (Vite, API-Proxy): `cd web && npm run dev` parallel zu `tm_server`. Sandbox ohne echte Config/Daten: ```bash make run-dev # nutzt ./.dev-home # oder: TASK_MASTER_HOME=/tmp/tm-sandbox tm ``` Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~/.config/task-master`. | Variable | Wirkung | |----------------------|----------------------------------------------| | `TASK_MASTER_HOME` | Basis für Config + Daten (Dev/Demo) | | `TASK_MASTER_DATA_DIR` | Nur Datenverzeichnis überschreiben | ## Keybindings (Auszug) | Taste | Aktion | |---------|------------------------| | `j`/`k` | Navigieren | | `n` | Neues Ticket/Projekt | | `e` | Ticket im Editor | | `s` | Status ändern | | `l` | Board-Filter | | `/` | Suche | | `p`/`P` | Projekt / Ticket verschieben | | `e` | Ticket bzw. Projekt editieren (in Projektliste: YouTrack) | | `Y` | YouTrack-Menü: Pull / Push | | `t`/`T` | Timer / Zeit buchen | | `m` | Zeiteinträge | | `r` | Report | | `x`/`X` | Löschen / Force-Delete | | `u`/`U` | Undo / Redo | | `q` | Beenden | Checklisten im Preview: `J`/`K` + `Space`. ### YouTrack 1. `p` → Projekt wählen → `e` 2. Remote-URL, Permanent Token und Project-Key setzen (gespeichert in `projects//meta.json`, Mode `0600`) 3. Lokal arbeiten (Anlegen/Edit/Status bleiben lokal) 4. `Y` → **Pull** (Issues + Work Items) oder **Push** (Tickets + Zeiteinträge) CLI: `tm sync pull` / `tm sync push` Zeit: lokale Einträge ohne `externalId` werden als YouTrack-Work-Items gepusht; remote Work Items landen lokal beim Pull. Status-Mapping Richtung YouTrack: OPEN→`Open`, WIP→`In Progress`, DONE→`Fixed` (Workflow-Namen können projektspezifisch abweichen). ## Entwicklung ```bash make test make build make version ``` ## Demo aufnehmen Die Walkthrough-Aufnahme steckt in [`demo.tape`](demo.tape) ([VHS](https://github.com/charmbracelet/vhs)): ```bash # einmalig: vhs + ttyd/ffmpeg (siehe VHS-Docs) make demo # schreibt demo.gif (+ demo.mp4) ``` Die Pipeline erzeugt das GIF ebenfalls und lädt es als Artifact hoch. ## Lizenz Privat / eigener Use — siehe Repository-Einstellungen auf Gitea.