summaryrefslogtreecommitdiffstats
path: root/pyproject.toml
AgeCommit message (Collapse)AuthorFilesLines
34 hoursfeat: tx list --flat, account create --if-not-exists, --since/--until doc ↵v0.3.6Danilo M.1-1/+1
(v0.3.6) Three smaller ISSUES.md items, one PATCH (two optional flags + a doc fix; no existing caller or JSON shape changes). - tx list --flat: emit one top-level object per split (journal id repeated), dropping the transactions[] nesting so single-split journals script cleanly. JSON-only; --human already explodes splits into a table. - account create --if-not-exists: resolve the name first; on a clash return the existing account with "existed": true (exit 0) instead of surfacing Firefly's 422, so import scripts are idempotent. Detects via resolver, not by parsing the error string. - SKILL.md documents that --since/--until filter on the transaction date (the value date); Firefly journals have a single date field, no separate book date (verified against firefly-iii TimeCollection setRange). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 hoursfeat: tx add echoes transfer direction to stderr (v0.3.5)v0.3.5Danilo M.1-1/+1
Transfers are easy to reverse silently (swapped --from/--to), showing up later as a 2x balance discrepancy (ISSUES.md #5). On a transfer, tx add now prints "transfer: <from> → <to>, <amount>" to stderr before writing, in both the real-write and --dry-run paths. stdout JSON and exit codes are unchanged, so the contract holds; PATCH bump. Withdrawals/deposits are unaffected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 hoursfeat: tx add --skip-dupes for idempotent imports (v0.3.4)Danilo M.1-1/+1
Re-running an import (a retried or double-read batch) created phantom duplicate transactions and drifted balances, with no signal. --skip-dupes searches for an existing tx with the same amount + date + source + destination before writing; on a match it emits {"skipped": "duplicate", "matched_id": "<id>"} and exits 0 without writing. Off by default (one extra search per add only when set). dry-run wins over skip-dupes: a preview never triggers the search. Match is amount+date+ accounts, not description, so genuinely distinct same-value same-day transfers between the same accounts look like duplicates; documented. Also document a Firefly quirk in SKILL.md: a missing/deleted transaction id returns 401 (not 404) on tx get/edit/delete, so a 401 after delete confirms the record is gone rather than signalling an auth failure. Verified live on the test instance: create -> identical --skip-dupes skips with matched_id and no write, --dry-run --skip-dupes previews without searching, no-match --skip-dupes writes; records cleaned up after. PATCH: new optional flag, contract unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 hoursfeat: tx add --dry-run to validate before writing (v0.3.3)Danilo M.1-1/+1
An agent importing rows in a loop could fail mid-batch: a --to account that didn't exist yet errored after earlier rows had already been written, leaving a half-applied batch to clean up by hand. --dry-run resolves --from/--to and infers the type but sends nothing, printing {"dry_run": true, "would_send": {...}}. A missing account stays a hard error (exit 1) so the agent can dry-run every row first, create the accounts the errors name, then run the batch for real. No batch input mode: the agent already owns the loop. Verified live read-only: valid accounts emit would_send and write nothing (search confirms []), missing account exits 1 with the candidate list. PATCH: new optional flag, contract unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 hoursfeat: account balance --at for historical balance (v0.3.2)Danilo M.1-1/+1
Reconciliation needed an account's balance as of a past date; the command only reported the current balance, forcing hand-written sum scripts. --at YYYY-MM-DD re-fetches the account with Firefly's ?date= param, which recomputes current_balance as of that date (end of day, no client math). Without --at the current-balance path is unchanged (no extra API call). Verified live read-only against real data: Mediolanum current 183.23 vs --at 2026-06-10 164.38, boundary probe gives distinct daily balances. PATCH: new optional flag, contract unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
36 hoursfeat: tx list --all + truncation signal (v0.3.1)Danilo M.1-1/+1
tx list silently returned only --limit rows (default 20) with no signal when more matched, making a correct ledger look wrong during reconciliation. - --all auto-paginates every page via meta.pagination.total_pages - without --all, print "showing N of M (use --all for all)" to stderr when the result is truncated (stdout JSON stays clean) PATCH: new optional flag + stderr note, contract unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 daysfeat: add tx edit and tx delete (v0.3.0)v0.3.0Danilo M.1-1/+1
Implements ISSUES.md #1, the missing other half of an import tool: correcting and removing mis-imported transactions without the web UI. - tx edit <id>: PATCH a single-split journal; only the fields passed are sent (--amount/--date/--desc/--from/--to/--category/--tags/--type). Errors if no field is given. Accounts resolve to ids; category/tags pass raw. - tx delete <id>: requires --yes (no interactive prompt, agent-first); prints {"deleted": "<id>"} on success. Also fix gen_completion.py: running it as a script put scripts/ on sys.path[0] and imported the installed (stale) firefly_cli, so the generated completion drifted (missing account balance/get, tx get/search). Prepend the repo root so the documented regen command uses this tree. The regenerated completion now reflects the full command surface. MINOR bump per the contract-keyed scheme: new commands, no breaking change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 daysoutput: decorate --human tables, color by tx type, IT datesv0.2.2Danilo M.1-1/+1
The --human transaction table now uses Italian dates (DD/MM/YYYY), a header rule line, and colors each row by transaction type (withdrawal red, deposit green, transfer cyan) when writing to a TTY. Colors are suppressed when piped; JSON output is unchanged. Bump to 0.2.2. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 dayshelp, completion: descriptive help text and bash completionv0.2.1Danilo M.1-1/+1
Add group/leaf descriptions to argparse help and richer command help strings. Add generated bash completion (completions/firefly.bash) plus its generator (scripts/gen_completion.py), wired into the command checklist in CLAUDE.md and documented in the README. Bump to 0.2.1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 daysaccount create: add verb for asset/expense/revenue accountsv0.2.0Danilo M.1-1/+1
New `firefly account create <name> --type asset|expense|revenue` [--opening-balance N] [--currency CODE]. asset accounts default to the defaultAsset role; opening balance is dated today (Firefly pairs the two). Unsupported types (liability, etc.) are a hard client-side error with no API call. Live-verified against the test instance. Bumps to 0.2.0. Docs synced: README, CLAUDE.md, SKILL.md, including the category/tag auto-create clarification. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 dayspyproject: rename dist to firefly-iii-agent, add PyPI metadatav0.1.0Danilo M.1-1/+18
PyPI name firefly-cli is taken by an unrelated project. Rename the distribution to firefly-iii-agent; keep the import package (firefly_cli) and the 'firefly' command unchanged. Add readme, keywords, classifiers, and project URLs for a clean package listing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2 dayschore: project scaffold, GPLv2 license, CLAUDE.mdDanilo M.1-0/+18