Skip to content

Releases: marcoarnulfo/clickup-cli

v1.9.0 — Design system: adaptive colors, generated key footer, ? help

Choose a tag to compare

@github-actions github-actions released this 28 Jul 06:58

Install: brew install marcoarnulfo/tap/clup (macOS/Linux) · scoop bucket add clup https://github.com/marcoarnulfo/scoop-bucket && scoop install clup (Windows) · yay -S clup-bin (Arch) · or download a binary below.

Verify: cosign verify-blob --bundle checksums.txt.sigstore.json checksums.txt

v1.8.0 — Live time tracking

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 23 Jul 21:24

🇬🇧 English

v1.8 turns the timer into a live tracker and adds full time-entry management from the terminal.

⏱ Live ticking timer

  • A running timer now shows as a global indicator on the Home screen (⏱ running on <task> — HH:MM:SS (X.XXh)), ticking every second, no matter which task started it.
  • Press c on Home to jump straight to the timer and stop it; the timer screen ticks live too.
  • The indicator survives transient network blips (a failed refresh no longer clears it), and works with no API calls in demo mode.

🗂 Time-entry browser (edit · delete · history)

  • Press v from the report to open a per-entry browser (current range, filter-applied), newest first.
  • Edit (e) an entry's duration, date/time, note and billable flag — the ClickUp description is preserved, and the start keeps its seconds when you don't change the minute.
  • Delete (x) with a [y/N] confirmation.
  • History (h) — read-only change history.
  • Edit and delete are restricted to your own entries; history is available on any entry.

🧪 Demo parity

  • CLICKUP_DEMO=1 covers all of the above with no API calls — a ticking demo timer and a browser with editable/deletable demo entries. The demo GIF was regenerated.

🧱 Under the hood

  • New client verbs UpdateTimeEntry (PUT) / DeleteTimeEntry (DELETE) / TimeEntryHistory (GET); the pure internal/report / internal/duration packages stay pure.

📌 Deferred

  • Editing an entry's tags is a follow-up (#125), out of scope for v1.8.

Install / upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest

Closes #91, #94, #98, #100. Milestone v1.8 (epic #33).
Full changelog: v1.7.0...v1.8.0

🇮🇹 Italiano

La v1.8 trasforma il timer in un tracker live e aggiunge la gestione completa delle time entry dal terminale.

⏱ Timer live

  • Un timer in corso appare come indicatore globale su Home (⏱ running on <task> — HH:MM:SS (X.XXh)), ticchetta ogni secondo, indipendentemente da quale task l'ha avviato.
  • Premi c su Home per saltare al timer e fermarlo; anche la schermata timer ticchetta live.
  • L'indicatore sopravvive ai blip di rete (un refresh fallito non lo cancella più) e funziona senza chiamate API in demo.

🗂 Browser delle time entry (modifica · cancella · cronologia)

  • Premi v dal report per aprire il browser per-entry (range corrente, filtri applicati), dalla più recente.
  • Modifica (e) durata, data/ora, nota e flag billable — la descrizione ClickUp viene preservata, e l'inizio mantiene i secondi se non cambi il minuto.
  • Cancella (x) con conferma [y/N].
  • Cronologia (h) — storico modifiche in sola lettura.
  • Modifica e cancella sono limitate alle proprie entry; la cronologia è disponibile su qualsiasi entry.

🧪 Parità demo

  • CLICKUP_DEMO=1 copre tutto quanto sopra senza chiamate API — timer demo che ticchetta e browser con entry demo modificabili/cancellabili. GIF demo rigenerato.

🧱 Sotto il cofano

  • Nuovi verbi client UpdateTimeEntry (PUT) / DeleteTimeEntry (DELETE) / TimeEntryHistory (GET); i package puri internal/report / internal/duration restano puri.

📌 Rimandato

  • La modifica dei tag di una entry è un follow-up (#125), fuori scope per la v1.8.

Installazione / aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest

Chiude #91, #94, #98, #100. Milestone v1.8 (epic #33).
Changelog completo: v1.7.0...v1.8.0

v1.7.0 — Billing depth

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 23 Jul 18:15

🇬🇧 English

v1.7 turns the report engine into a billing engine — the moat feature. Per-list and per-member rates, rounding, multi-currency, budgets, timezone-correct periods, and non-fiscal invoice/HTML export. Plus a quiet update check and the standard OSS health files.

💰 Billing depth

  • Rate overrides per list, per member and per (list, member), with precedence (list, member) > member > list > default — set them in the new Billing settings screen (p from the report), four tabs: Lists, Members, Overrides, Rules.
  • Billable/non-billable split: entries carry a billable flag; filter to one or the other in the TUI or with --billable.
  • Multi-currency: bill each list in its own currency, with per-currency subtotals. Amounts are never summed across currencies — a single overall total appears only when the whole report is single-currency.
  • Rounding of billable hours before invoicing (billing.rounding: increment, up/nearest, per-entry or per-day scope); non-billable hours are never rounded.
  • Budgets per list, checked against billed amounts, with a burn-down view in the TUI (b from the report).
  • Money ledger: amounts round to 2 decimals at the billing unit and every total is a sum of already-rounded units, so the CSV invoice rows, the JSON subtotals and the HTML totals reconcile exactly (enforced by a cross-export test).

🕑 Timezone & weekly reports

  • Optional timezone config field and a --tz flag anchor day/week/month boundaries to an IANA zone (headless clup report still defaults to UTC unless overridden).
  • ISO-8601 week reporting: --week YYYY-Www and a w week toggle in the TUI.

📤 Export & headless

  • Export to self-contained HTML (--format html, print to PDF) and a line-item CSV invoice (--format csv-invoice, one row per billing unit; qty_hours at 6 decimals so qty_hours × rate reconciles to amount).
  • New clup report flags: --week, --billable, --tag (repeatable), --group tag, --tz, --format html|csv-invoice. The JSON output gains schema_version, timezone, currency_subtotals, billable_hours, non_billable_hours, billed_hours and lines, staying additive and backward-compatible (rate/currency kept as deprecated fields).

🔔 Update check (new)

  • clup now tells you when a newer release exists — a discreet line on the TUI home, and for clup report on stderr (never stdout, so --format json stays scriptable). It asks the GitHub releases API at most once a day (cached), the request is anonymous with no token sent, and it never self-updates. Disable with CLUP_NO_UPDATE_CHECK=1 or update_check: false.
  • Free side effect: clup --version now reports the real build version instead of a hardcoded dev.

🧱 Config schema v2 (additive)

  • A new billing block (rate overrides, currencies, budgets, rounding) and a timezone field are added alongside the existing rate/rates/currency, which keep their meaning. A v1 config is read as-is and stamped to schema_version: 2 on the next save — nothing to change by hand.

📄 Project health

  • Added CHANGELOG.md (Keep a Changelog) and SECURITY.md (with the ClickUp-token threat model); enabled GitHub private vulnerability reporting.

Notes

  • internal/report/internal/duration remain pure; demo mode (CLICKUP_DEMO=1) exercises the whole billing model with zero I/O.
  • Out of scope (kept out deliberately): fiscal invoicing (VAT, numbering, legal PDF), estimated-vs-actual hours, and release binaries — installation stays go install.
  • Milestone: v1.7 — Billing depth. Roadmap epic: #33.

Full changelog: v1.6.0...v1.7.0


🇮🇹 Italiano

La v1.7 trasforma il motore di report in un motore di fatturazione — la feature-moat. Tariffe per lista e per membro, arrotondamenti, multi-valuta, budget, periodi corretti per fuso orario, ed export fattura/HTML non fiscale. In più un avviso di aggiornamento discreto e i file standard di community OSS.

💰 Profondità di fatturazione

  • Override delle tariffe per lista, per membro e per (lista, membro), con precedenza (lista, membro) > membro > lista > default — si impostano nella nuova schermata Billing settings (p dal report), quattro tab: Lists, Members, Overrides, Rules.
  • Split billable/non-billable: le entry portano un flag billable; si filtra per l'uno o l'altro nella TUI o con --billable.
  • Multi-valuta: ogni lista si fattura nella propria valuta, con subtotali per valuta. Gli importi non si sommano mai tra valute diverse — un totale unico compare solo quando l'intero report è mono-valuta.
  • Arrotondamento delle ore fatturabili prima della fattura (billing.rounding: incremento, up/nearest, scope per-entry o per-day); le ore non fatturabili non si arrotondano mai.
  • Budget per lista, confrontati con gli importi fatturati, con una vista burn-down nella TUI (b dal report).
  • Ledger monetario: gli importi si arrotondano a 2 decimali sull'unità di fatturazione e ogni totale è la somma di unità già arrotondate, così le righe del CSV fattura, i subtotali JSON e i totali HTML coincidono esattamente (garantito da un test cross-export).

🕑 Fuso orario & report settimanali

  • Campo di config timezone opzionale e flag --tz ancorano i confini giorno/settimana/mese a una zona IANA (l'headless clup report resta su UTC salvo override).
  • Report per settimana ISO-8601: --week YYYY-Www e un toggle w nella TUI.

📤 Export & headless

  • Export in HTML autoconsistente (--format html, stampabile in PDF) e in CSV fattura a righe (--format csv-invoice, una riga per unità di fatturazione; qty_hours a 6 decimali così qty_hours × rate torna ad amount).
  • Nuovi flag di clup report: --week, --billable, --tag (ripetibile), --group tag, --tz, --format html|csv-invoice. L'output JSON guadagna schema_version, timezone, currency_subtotals, billable_hours, non_billable_hours, billed_hours e lines, restando additivo e retrocompatibile (rate/currency mantenuti come campi deprecati).

🔔 Avviso di aggiornamento (novità)

  • clup ora avvisa quando esiste una release più recente — una riga discreta nella home della TUI e, per clup report, su stderr (mai su stdout, così --format json resta pilotabile da script). Interroga l'API delle release di GitHub al massimo una volta al giorno (in cache), la richiesta è anonima senza token, e non fa mai self-update. Disattivabile con CLUP_NO_UPDATE_CHECK=1 o update_check: false.
  • Effetto collaterale gratuito: clup --version ora riporta la versione reale della build invece del dev hardcoded.

🧱 Config schema v2 (additivo)

  • Un nuovo blocco billing (override tariffe, valute, budget, arrotondamento) e un campo timezone si aggiungono accanto agli esistenti rate/rates/currency, che mantengono il loro significato. Una config v1 viene letta così com'è e marcata a schema_version: 2 al salvataggio successivo — nulla da cambiare a mano.

📄 Salute del progetto

  • Aggiunti CHANGELOG.md (Keep a Changelog) e SECURITY.md (con il modello di minaccia del token ClickUp); abilitato il private vulnerability reporting di GitHub.

Note

  • internal/report/internal/duration restano puri; la modalità demo (CLICKUP_DEMO=1) esercita l'intero modello di fatturazione con zero I/O.
  • Fuori scope (tenuto fuori di proposito): fatturazione fiscale (IVA, numerazione, PDF legale), ore stimato-vs-effettivo, e i binari di release — l'installazione resta go install.
  • Milestone: v1.7 — Billing depth. Epic roadmap: #33.

Changelog completo: v1.6.0...v1.7.0

v1.6.0 — Rebrand to clup & foundations

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 22 Jul 16:26
73eb284

🇬🇧 English

v1.6 rebrands the binary to clup and lays the technical foundations for the whole roadmap. Almost none of it is visible in the TUI (the visual redesign lands in v1.9) — this release is about the plumbing.

⚠️ Rebrand: clickupclup (non-breaking)

  • The primary binary is now clup: go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest.
  • The old clickup binary still works as a deprecated shim (prints a warning, forwards to clup) for a few releases.
  • Config moved to …/clup/config.yml (macOS ~/Library/Application Support/clup, Linux ~/.config/clup), with a permanent read-fallback to the legacy clickup-cli path — existing configs keep working, and are migrated on first save (the legacy file is left as a pointer stub). Added a schema_version field.
  • The CLICKUP_TOKEN / CLICKUP_DEMO env vars are unchanged.

🚀 New: headless report

  • clup report --month 2026-06 --scope me --format json|csv|md prints a report to stdout for cron/scripts/agents (all formats stream to stdout — use shell redirection). CLICKUP_DEMO is ignored by report, and the JSON output is a stable scripting schema (safe to parse with jq).

🧱 Foundations (mostly internal)

  • Extracted the report I/O pipeline into internal/service (shared by the TUI and headless).
  • Unified the HTTP client into one do() with a shared rate limiter (90/min, burst 30) that honors Retry-After and retries 429 on all verbs.
  • Added FilteredTeamTasks (paginated GET /team/{id}/task); parallelized status enrichment.
  • Injected the clock into the root model; extracted a pure CustomRange.
  • API errors now route back to Home with an inline message instead of a dead-end error screen (retryableErrMsg); a 401 still relaunches the setup wizard.

🐛 Fixes

  • Fixed a token-leak: in demo mode the client was built with the real token instead of the demo token.
  • Fixed a silent token-wipe: the setup wizard could write an empty token to disk when the typed token equaled CLICKUP_TOKEN.
  • Demo mode: the log-hours flow is now fully I/O-free (no more accidental real API calls under CLICKUP_DEMO=1); regenerated docs/demo.gif.

Notes

Full changelog: v1.5.0...v1.6.0


🇮🇹 Italiano

La v1.6 ribrandizza il binario in clup e posa le fondamenta tecniche per l'intera roadmap. Quasi nulla è visibile nella TUI (il redesign estetico arriva con la v1.9) — questa release riguarda l'infrastruttura.

⚠️ Rebrand: clickupclup (non-breaking)

  • Il binario principale ora è clup: go install github.com/marcoarnulfo/clickup-cli/cmd/clup@latest.
  • Il vecchio clickup continua a funzionare come shim deprecato (stampa un warning, inoltra a clup) per qualche release.
  • La config si è spostata in …/clup/config.yml (macOS ~/Library/Application Support/clup, Linux ~/.config/clup), con fallback di lettura permanente al vecchio path clickup-cli — le config esistenti continuano a funzionare e vengono migrate al primo salvataggio (il file legacy resta come stub-puntatore). Aggiunto un campo schema_version.
  • Le env var CLICKUP_TOKEN / CLICKUP_DEMO sono invariate.

🚀 Novità: report headless

  • clup report --month 2026-06 --scope me --format json|csv|md stampa un report su stdout per cron/script/agenti (tutti i formati vanno su stdout — usa la redirezione della shell). CLICKUP_DEMO è ignorato da report, e l'output JSON è uno schema di scripting stabile (parsabile con jq).

🧱 Fondamenta (perlopiù interne)

  • Estratta la pipeline I/O del report in internal/service (condivisa da TUI e headless).
  • Client HTTP unificato in un unico do() con rate limiter condiviso (90/min, burst 30) che onora Retry-After e ritenta i 429 su tutti i verbi.
  • Aggiunto FilteredTeamTasks (GET /team/{id}/task paginato); arricchimento status parallelizzato.
  • Clock iniettato nel model radice; estratta una CustomRange pura.
  • Gli errori API tornano alla Home con messaggio inline invece della schermata d'errore senza uscita (retryableErrMsg); il 401 rilancia comunque il setup wizard.

🐛 Correzioni

  • Corretto un leak del token: in demo il client veniva costruito col token reale invece che con quello demo.
  • Corretto un wipe silenzioso del token: il setup wizard poteva scrivere un token vuoto su disco quando il token digitato coincideva con CLICKUP_TOKEN.
  • Demo mode: il flusso log-ore ora è completamente senza I/O (niente più chiamate API reali accidentali con CLICKUP_DEMO=1); rigenerata docs/demo.gif.

Note

Changelog completo: v1.5.0...v1.6.0

v1.5.0 — Workspace list browser, faster lists & polish

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 21 Jul 23:57
eff13b2

🇬🇧 English

v1.5 — Reach any list. Browse the whole workspace, plus perf and polish.

Highlights

  • 🗂️ Workspace list browser (#13) — pick ANY list, not just recent/config ones, via a lazy Space → Folder → List drill-down. From the guided log picker a "🔍 Browse all workspace lists…" entry opens it; from the per-list rates screen the b key opens the same browser (and adds the chosen list as a row). Fetched lazily per space and session-cached (↑/↓ move · Enter open/select · Esc up/back). Demo mode browses fixture data with no API calls.
  • Faster list-name resolution (#12) — a report load now resolves list names concurrently (bounded), instead of one sequential GET /list/{id} per list — no more creeping toward the timeout on months with many lists.
  • 🧹 Polish (#28) — the custom date-range editor prefills From/To and supports Tab/Shift+Tab; report filters auto-adjust when the date range changes; more test coverage; docs corrections.

No breaking changes. Install/upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest


🇮🇹 Italiano

v1.5 — Raggiungi qualunque lista. Naviga tutto il workspace, più perf e rifiniture.

In evidenza

  • 🗂️ Browser liste workspace (#13) — scegli QUALUNQUE lista, non solo quelle recenti/config, con un drill-down lazy Space → Folder → List. Dal picker guidato del log una voce "🔍 Browse all workspace lists…" lo apre; dalla schermata tariffe per lista il tasto b apre lo stesso browser (e aggiunge la lista scelta come riga). Fetch lazy per space e cache di sessione (↑/↓ muovi · Enter apri/seleziona · Esc risali/indietro). La demo naviga dati fittizi senza chiamate API.
  • Risoluzione nomi lista più veloce (#12) — il caricamento del report risolve i nomi lista in parallelo (con concorrenza limitata), invece di una GET /list/{id} sequenziale per lista — niente più avvicinamento al timeout nei mesi con molte liste.
  • 🧹 Rifiniture (#28) — l'editor del range date custom pre-compila From/To e supporta Tab/Shift+Tab; i filtri report si adattano al cambio range; più copertura test; correzioni docs.

Nessuna breaking change. Installazione/aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest

v1.4.0 — Member selection, date range & report filters

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 21 Jul 21:27
12341ef

🇬🇧 English

v1.4 — Scope your report. Two features to narrow the hours report to exactly what you need.

Highlights

  • 👥 Team member selection (#3) — in team scope, press f on Home to multi-select which workspace members the report covers (instead of aggregating everyone). New per-member grouping in the g cycle; Home shows Members: k/n.
  • 🗓️ Custom date range (#2) — press d on Home to pick a preset (This month, Last month, Last 7 days, Last 30 days, This week) or a custom From/To range. The report is no longer limited to a whole month; title and export filename follow the period.
  • 🔎 Report filters (#2) — press f on the Report for a sectioned Lists / Tags / Statuses filter (OR within a dimension, AND across). Tags load with the entries; statuses are fetched lazily on first open (per-task, session-cached). Filters compose with member selection and the date range; the title shows · filtered.
  • 🧮 Per-list rates, amounts and grouping recompute over the selected/filtered set. Demo mode (CLICKUP_DEMO=1) honors ranges, filters and statuses with no API calls.

No breaking changes. Install/upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest


🇮🇹 Italiano

v1.4 — Restringi il tuo report. Due funzionalità per limitare il report ore esattamente a ciò che ti serve.

In evidenza

  • 👥 Selezione membri team (#3) — nello scope team, premi f in Home per selezionare (multi) quali membri del workspace includere nel report (invece di aggregare tutti). Nuovo raggruppamento per membro nel ciclo g; la Home mostra Members: k/n.
  • 🗓️ Range di date custom (#2) — premi d in Home per scegliere un preset (This month, Last month, Last 7 days, Last 30 days, This week) o un range From/To custom. Il report non è più limitato a un mese intero; titolo e nome file export seguono il periodo.
  • 🔎 Filtri report (#2) — premi f dal Report per un filtro a sezioni Lists / Tags / Statuses (OR dentro una dimensione, AND tra dimensioni). I tag arrivano con le entry; gli status recuperati lazy alla prima apertura (per task, cache di sessione). I filtri si compongono con la selezione membri e il range; il titolo mostra · filtered.
  • 🧮 Tariffe per-lista, importi e raggruppamento si ricalcolano sul set selezionato/filtrato. La demo (CLICKUP_DEMO=1) rispetta range, filtri e status senza chiamate API.

Nessuna breaking change. Installazione/aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest

v1.3.0 — English UI, demo mode & open-source polish

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 21 Jul 17:43
7c905cb

🇬🇧 English

Consolidation release: the app is now English-first and much friendlier to newcomers and contributors.

Highlights

  • 🌍 English UI — the whole terminal interface (and error/export output) is now in English.
  • 🎬 Demo modeCLICKUP_DEMO=1 clickup runs the TUI on fixture data, no ClickUp account needed. Powers the new README demo GIF.
  • 📖 Onboarding & community — revamped bilingual README (badges, features, requirements, quick start), CONTRIBUTING, CODE_OF_CONDUCT, issue/PR templates, good first issue labels.
  • 🧹 Modernizationslices/cmp over sort; staticcheck added to CI.
  • 🧑‍💻 Codebase fully in English (comments, tests).

No breaking changes. Install/upgrade: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest


🇮🇹 Italiano

Release di consolidamento: l'app è ora English-first e molto più accogliente per nuovi utenti e contributor.

In evidenza

  • 🌍 UI in inglese — tutta l'interfaccia da terminale (e output di errori/export) è ora in inglese.
  • 🎬 Demo modeCLICKUP_DEMO=1 clickup avvia la TUI su dati fittizi, senza account ClickUp. Alimenta il nuovo GIF demo del README.
  • 📖 Onboarding & community — README bilingue rinnovato (badge, feature, requisiti, quick start), CONTRIBUTING, CODE_OF_CONDUCT, template issue/PR, label good first issue.
  • 🧹 Modernizationslices/cmp al posto di sort; staticcheck in CI.
  • 🧑‍💻 Codebase interamente in inglese (commenti, test).

Nessuna breaking change. Installazione/aggiornamento: go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest

v1.2.0 — Log hours from the TUI / Log ore da TUI

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 21 Jul 16:48
240f475

🇬🇧 English

Log hours from the TUI. The CLI can now create time entries on ClickUp directly from the terminal (it used to be read-only). New Log hours screen, opened with n from Home and Report, with three modes:

  • Guided — pick a known list (current report ∪ config) → a task → form.
  • Task ID/URL — paste a task ID or a ClickUp URL → form.
  • Timer — start/stop a stopwatch; on stop the entry is recorded. A timer already running when you open the screen is shown for stopping.

The form has a flexible duration parser (2h30, 2h30m, 1.5h, 1,5h, 90m, 45 = hours), today-by-default editable date, and an optional note. After saving, press r to reload the report. You always log your own hours.

Under the hood: new pure internal/duration package; client methods CreateTimeEntry, ListTasks, timer Start/Stop/Current, ExtractTaskID; shared POST helper. Docs are now bilingual (English-primary README.md + README.it.md).

Closes #1.


🇮🇹 Italiano

Log ore dalla TUI. La CLI ora crea time entry su ClickUp direttamente da terminale (prima era sola lettura). Nuova schermata Log ore, aperta col tasto n da Home e Report, con tre modalità:

  • Guidato — scegli una lista nota (report corrente ∪ config) → un task → form.
  • Task ID/URL — incolli un ID task o un URL ClickUp → form.
  • Timer — avvii/fermi un cronometro; allo stop la voce viene registrata. Un timer già in corso all'apertura viene mostrato per lo stop.

Il form ha un parser durata flessibile (2h30, 2h30m, 1.5h, 1,5h, 90m, 45 = ore), data default oggi (editabile) e nota opzionale. Dopo il salvataggio, r ricarica il report. Si loggano sempre le proprie ore.

Sotto il cofano: nuovo package puro internal/duration; metodi client CreateTimeEntry, ListTasks, timer Start/Stop/Current, ExtractTaskID; helper POST condiviso. La documentazione è ora bilingue (README.md inglese primario + README.it.md).

Chiude #1.

v1.1.1 — Cleanup & UX tariffe

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 21 Jul 14:56

Rilascio di cleanup dal backlog (issue #7#11). Nessuna feature nuova: refactor interno e rifiniture UX della schermata tariffe.

Novità

  • ⌨️ Schermata tariffe più coerenteEsc ora annulla (scarta le modifiche non salvate) e torna al report, come nella schermata export; s salva. Prima entrambi salvavano.
  • 🔢 Campo tariffa numerico — accetta solo cifre e separatore decimale; la virgola è trattata come punto (comodo per la tastiera italiana).
  • 🧹 Config più pulita — le tariffe impostate uguali al default non vengono più salvate come override ridondanti.
  • 🔧 Refactor interno — rimosso stato duplicato in homeModel (meno rischio di drift); aggiunta copertura di test per lo scope "team".

Aggiornamento

go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest

Chiude le issue #7, #8, #9, #10, #11. Roadmap e backlog: https://github.com/marcoarnulfo/clickup-cli/issues

v1.1.0 — Tariffe per lista

Choose a tag to compare

@marcoarnulfo marcoarnulfo released this 21 Jul 14:15

Prima feature dopo la base: tariffe orarie per lista/progetto ClickUp.

Novità

  • 💶 Tariffe per lista — imposta una tariffa oraria diversa per ogni Lista ClickUp; le liste senza override usano la tariffa di default. L'importo da fatturare è ora calcolato con la tariffa giusta per ogni voce (corretto anche raggruppando per task o giorno, con tariffe miste).
  • 🏷️ Nomi lista leggibili — le liste sono mostrate col loro nome (risolto via API, con cache), non più con l'id numerico, sia nel report sia nella schermata tariffe.
  • ⌨️ Schermata tariffe (tasto p) — dalla vista report premi p per aprire la schermata Tariffe: ↑/↓ navighi, Enter modifichi la tariffa di una lista, d la riporti al default, s/Esc salvi e torni al report (ricalcolato al volo).

Configurazione

Le tariffe si salvano in ~/.config/clickup-cli/config.yml:

rate: 45          # tariffa di default
rates:
  "111": 60       # tariffa per la lista 111
  "222": 30

La mappa rates la compili comodamente dalla TUI con p — non serve conoscere gli id a mano.

Aggiornamento

go install github.com/marcoarnulfo/clickup-cli/cmd/clickup@latest

Retrocompatibile: una config esistente senza rates continua a funzionare come prima (tutto alla tariffa di default).

Roadmap e note: docs/BACKLOG-v1.1.md