Document TUI/web features, sync backends, and server env in the README.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# task-master
|
# task-master
|
||||||
|
|
||||||
Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Checklisten, Zeiterfassung und Reports. Gebaut mit [Bubble Tea](https://github.com/charmbracelet/bubbletea).
|
Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Checklisten, Zeiterfassung und Reports. Gebaut mit [Bubble Tea](https://github.com/charmbracelet/bubbletea). Dazu der optionale Web-Server `tm_server` mit Svelte-UI und SQLite.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -8,16 +8,29 @@ Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Ch
|
|||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Projekte & Tickets lokal als JSON (kein Server) — Binary `tm`
|
**TUI (`tm`)**
|
||||||
- Web-Server `tm_server` mit eingebettetem Svelte-UI, SQLite, Auth und Rechte pro Projekt
|
|
||||||
|
- Projekte & Tickets lokal als JSON (kein Server)
|
||||||
- Board-Filter: All / Backlog / In Progress / Done
|
- Board-Filter: All / Backlog / In Progress / Done
|
||||||
- Tickets in `$EDITOR` bearbeiten (Markdown + Checklisten)
|
- Tickets in `$EDITOR` bearbeiten (Markdown + Checklisten)
|
||||||
- Timer, manuelle Zeitbuchungen, Zeiteinträge verwalten
|
- Timer, manuelle Zeitbuchungen, Zeiteinträge inkl. Start/Ende editieren
|
||||||
- Report mit Group-by (Ticket / Tag)
|
- Report mit Group-by (Ticket / Tag)
|
||||||
- Undo / Redo über eine Command-History (TUI)
|
- Undo / Redo über eine Command-History
|
||||||
- Vim-Style Keybindings (TUI)
|
- Vim-Style Keybindings
|
||||||
- YouTrack Pull/Push (manuell; Remote-URL, Token, Project-Key pro Projekt)
|
- YouTrack Pull/Push (manuell; Remote-URL, Token, Project-Key pro Projekt)
|
||||||
- Server: Sync-Backend pro Projekt, Projekt-Tokens für die TUI, Ticket-Revisionen
|
- Sync gegen `tm_server` (Backend `taskmaster`, Projekt-Tokens)
|
||||||
|
|
||||||
|
**Web (`tm_server`)**
|
||||||
|
|
||||||
|
- Eingebettetes Svelte-UI, SQLite, Auth und Rechte pro Projekt
|
||||||
|
- Projektgruppen, Sidebar-Navigation, Hash-Routes
|
||||||
|
- Drag & Drop auf dem Board (OPEN / WIP / DONE)
|
||||||
|
- Lesbare Ticket-Keys aus Projektcode + Sequenz (z. B. `WEB-12`)
|
||||||
|
- Visual- und Markdown-Editor für Ticket-Beschreibungen
|
||||||
|
- Datei-Anhänge; Tabellen (XLSX/ODS/…) im Browser editierbar
|
||||||
|
- Report mit Datums- und Ticket-Filtern sowie Eintragsliste
|
||||||
|
- Sync-Backend pro Projekt, Projekt-Tokens für die TUI, Ticket-Revisionen
|
||||||
|
- Members, Settings (Tokens), Users (Admin)
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
@@ -30,14 +43,15 @@ make install # → $(go env GOPATH)/bin/tm
|
|||||||
# oder nur bauen:
|
# oder nur bauen:
|
||||||
make build # → ./bin/tm
|
make build # → ./bin/tm
|
||||||
make build-server # Frontend + → ./bin/tm_server
|
make build-server # Frontend + → ./bin/tm_server
|
||||||
|
make build-all # beides
|
||||||
```
|
```
|
||||||
|
|
||||||
## Nutzung
|
## Nutzung
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
tm # TUI starten
|
tm # TUI starten
|
||||||
tm sync pull # Issues von YouTrack holen
|
tm sync pull # Issues von YouTrack / tm_server holen
|
||||||
tm sync push # lokale Änderungen nach YouTrack
|
tm sync push # lokale Änderungen pushen
|
||||||
tm sync pull -p inbox # anderes Projekt
|
tm sync pull -p inbox # anderes Projekt
|
||||||
tm version # Build-Version (Git-Hash)
|
tm version # Build-Version (Git-Hash)
|
||||||
tm help
|
tm help
|
||||||
@@ -60,11 +74,12 @@ export TASK_MASTER_SECRET='long-random-secret' # verschlüsselt Remote-Tokens
|
|||||||
./bin/tm_server import-json -owner admin
|
./bin/tm_server import-json -owner admin
|
||||||
```
|
```
|
||||||
|
|
||||||
UI: http://localhost:8080 — Dashboard, Board, Report, Members, Settings (Tokens), Users (Admin), Ticket-Zeit & History.
|
UI: http://localhost:8080 — Dashboard, Board, Report, Attachments, Members, Settings (Tokens), Users (Admin), Ticket-Zeit & History.
|
||||||
Das Test-Environment (`run-server-dev`) spricht nur mit diesem Backend; YouTrack ist dort nicht verdrahtet.
|
|
||||||
Beim Seed werden für **Test** und **Website Relaunch** Write-Tokens erzeugt und unter `.dev-home` als lokale TUI-Projekte (`backend=taskmaster`) hinterlegt — danach `make run-dev` und Sync (Y → Pull).
|
|
||||||
|
|
||||||
Dev-Frontend (Vite, API-Proxy): `cd web && npm run dev` parallel zu `tm_server`.
|
Das Test-Environment (`run-server-dev`) spricht nur mit diesem Backend; YouTrack ist dort nicht verdrahtet.
|
||||||
|
Beim Seed (`TM_SEED_DEMO=1`) werden Demo-Projekte angelegt und für **Test** sowie **Website Relaunch** Write-Tokens unter `.dev-home` als lokale TUI-Projekte (`backend=taskmaster`) hinterlegt — danach `make run-dev` und Sync (`Y` → Pull). Login: `admin`/`admin` (Member: `alice`/`alice`).
|
||||||
|
|
||||||
|
Dev-Frontend (Vite, API-Proxy): `cd web && npm run dev` parallel zu `tm_server`. Frontend neu bauen ohne Go-Rebuild: `make web-build`.
|
||||||
|
|
||||||
Sandbox ohne echte Config/Daten:
|
Sandbox ohne echte Config/Daten:
|
||||||
|
|
||||||
@@ -76,10 +91,16 @@ TASK_MASTER_HOME=/tmp/tm-sandbox tm
|
|||||||
|
|
||||||
Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~/.config/task-master`.
|
Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~/.config/task-master`.
|
||||||
|
|
||||||
| Variable | Wirkung |
|
| Variable | Wirkung |
|
||||||
|----------------------|----------------------------------------------|
|
|------------------------|---------------------------------------------------|
|
||||||
| `TASK_MASTER_HOME` | Basis für Config + Daten (Dev/Demo) |
|
| `TASK_MASTER_HOME` | Basis für Config + Daten (Dev/Demo) |
|
||||||
| `TASK_MASTER_DATA_DIR` | Nur Datenverzeichnis überschreiben |
|
| `TASK_MASTER_DATA_DIR` | Nur Datenverzeichnis überschreiben |
|
||||||
|
| `TASK_MASTER_SECRET` | Verschlüsselt Remote-Tokens in SQLite |
|
||||||
|
| `TM_ADMIN_USER` / `TM_ADMIN_PASSWORD` | Bootstrap des ersten Admins |
|
||||||
|
| `TM_SEED_DEMO=1` | Demo-Projekte + TUI-Verdrahtung (Test / Website Relaunch) |
|
||||||
|
| `TM_SEED_BASE_URL` | Basis-URL in den geseedeten TUI-`meta.json` |
|
||||||
|
|
||||||
|
Server-Flags: `-listen`, `-db`, `-secure` (siehe `tm_server help`).
|
||||||
|
|
||||||
## Keybindings (Auszug)
|
## Keybindings (Auszug)
|
||||||
|
|
||||||
@@ -87,13 +108,12 @@ Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~
|
|||||||
|---------|------------------------|
|
|---------|------------------------|
|
||||||
| `j`/`k` | Navigieren |
|
| `j`/`k` | Navigieren |
|
||||||
| `n` | Neues Ticket/Projekt |
|
| `n` | Neues Ticket/Projekt |
|
||||||
| `e` | Ticket im Editor |
|
| `e` | Ticket bzw. Projekt editieren (in Projektliste: YouTrack / Sync-Backend) |
|
||||||
| `s` | Status ändern |
|
| `s` | Status ändern |
|
||||||
| `l` | Board-Filter |
|
| `l` | Board-Filter |
|
||||||
| `/` | Suche |
|
| `/` | Suche |
|
||||||
| `p`/`P` | Projekt / Ticket verschieben |
|
| `p`/`P` | Projekt / Ticket verschieben |
|
||||||
| `e` | Ticket bzw. Projekt editieren (in Projektliste: YouTrack) |
|
| `Y` | Sync-Menü: Pull / Push |
|
||||||
| `Y` | YouTrack-Menü: Pull / Push |
|
|
||||||
| `t`/`T` | Timer / Zeit buchen |
|
| `t`/`T` | Timer / Zeit buchen |
|
||||||
| `m` | Zeiteinträge |
|
| `m` | Zeiteinträge |
|
||||||
| `r` | Report |
|
| `r` | Report |
|
||||||
@@ -103,15 +123,15 @@ Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~
|
|||||||
|
|
||||||
Checklisten im Preview: `J`/`K` + `Space`.
|
Checklisten im Preview: `J`/`K` + `Space`.
|
||||||
|
|
||||||
### YouTrack
|
### YouTrack / Sync
|
||||||
|
|
||||||
1. `p` → Projekt wählen → `e`
|
1. `p` → Projekt wählen → `e`
|
||||||
2. Remote-URL, Permanent Token und Project-Key setzen (gespeichert in `projects/<id>/meta.json`, Mode `0600`)
|
2. Backend wählen: YouTrack (Remote-URL, Permanent Token, Project-Key) oder task-master (Server-URL + Projekt-Token)
|
||||||
3. Lokal arbeiten (Anlegen/Edit/Status bleiben lokal)
|
3. Lokal arbeiten (Anlegen/Edit/Status bleiben lokal)
|
||||||
4. `Y` → **Pull** (Issues + Work Items) oder **Push** (Tickets + Zeiteinträge)
|
4. `Y` → **Pull** oder **Push**
|
||||||
CLI: `tm sync pull` / `tm sync push`
|
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.
|
Zeit: lokale Einträge ohne `externalId` werden remote als 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).
|
Status-Mapping Richtung YouTrack: OPEN→`Open`, WIP→`In Progress`, DONE→`Fixed` (Workflow-Namen können projektspezifisch abweichen).
|
||||||
|
|
||||||
@@ -120,9 +140,12 @@ Status-Mapping Richtung YouTrack: OPEN→`Open`, WIP→`In Progress`, DONE→`Fi
|
|||||||
```bash
|
```bash
|
||||||
make test
|
make test
|
||||||
make build
|
make build
|
||||||
|
make build-server # braucht Node (npm ci + Vite-Build)
|
||||||
make version
|
make version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
CI (Gitea): Tests, `tm` + `tm_server`-Build, Demo-GIF als Artifact.
|
||||||
|
|
||||||
## Demo aufnehmen
|
## Demo aufnehmen
|
||||||
|
|
||||||
Die Walkthrough-Aufnahme steckt in [`demo.tape`](demo.tape) ([VHS](https://github.com/charmbracelet/vhs)):
|
Die Walkthrough-Aufnahme steckt in [`demo.tape`](demo.tape) ([VHS](https://github.com/charmbracelet/vhs)):
|
||||||
|
|||||||
Reference in New Issue
Block a user