Add `publishConfig.exports` to @actual-app/core's package.json with
`types` conditions pointing to compiled `.d.ts` declarations. This way
the development exports stay clean (raw `.ts` for monorepo use), while
published consumers get proper type resolution via `.d.ts` files.
Previously, consumers of @actual-app/api with `strict: true` in their
tsconfig would encounter type errors because TypeScript followed the
exports into loot-core's uncompiled source files (compiled with
`strict: false`).
Also add .npmignore to ensure `lib-dist/decl` (declaration files) are
included when publishing to npm, overriding the root .gitignore `*.d.ts`
exclusion pattern.
Closes#7410https://claude.ai/code/session_01UmSBeYnpkWMiCU6R9Wd7ou
Add `types` conditions to @actual-app/core's package.json exports so that
TypeScript resolves to compiled `.d.ts` declarations instead of raw `.ts`
source files. Previously, consumers of @actual-app/api with
`strict: true` in their tsconfig would encounter type errors because
TypeScript followed the exports into loot-core's uncompiled source files
which have `strict: false`.
Also add .npmignore to ensure `lib-dist/decl` (declaration files) are
included when publishing to npm, overriding the root .gitignore `*.d.ts`
exclusion pattern.
Closes#7410https://claude.ai/code/session_01UmSBeYnpkWMiCU6R9Wd7ou
* [AI] Add ErrorBoundary around dashboard widgets (#7273)
Wraps each dashboard widget in an ErrorBoundary so a faulty widget
degrades to an error card instead of crashing the entire Reports page.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add release notes for PR #7382
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Fix Net Worth graph showing N-1 intervals, resulting in inconsistent totalChange value.
* Fix starting date being wrong for 'daily' and 'weekly'
* Linting
* Add release note
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #7296
* Remove manipulation of startDate for 'yearly'
The result was not consistent with the reports previous behavior when yearly was selected (it went back too far).
* Remove empty datapoint at beginning when start equals earliest transaction
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* trim down some unused/unnecessary dependencies (#7350)
* fix github actions inconsistencies
* fix pinning of transitive deps in eslint-plugin
* drop use of node-fetch in api
* drop md5 dependency in favour of node:crypto
* drop slash
* drop unused top level packages
* add note about node-polyfills warning
* remove unused deps from desktop-client
* drop pegjs types
* note
* drop node-jq
* [Doc] More tour image (mostly) updates & a hotkey fix (#7328)
* Fix keyboard shortcut Mac key for undo operations
Updated keyboard shortcut instructions for Mac & make consistent.
* Add files via upload
* Fix undo shortcut from 'K' to 'Z'
Updated keyboard shortcut for undo operation in payees guide. COFFEE!
* Revise budget section for clarity and consistency
Updated category descriptions and improved Markdown support details.
* Add files via upload
* Fix grammatical error in budget.md
* Fix typo and clarify Markdown description in budget.md
Corrected a typo in the documentation regarding the chevrons and clarified the description of rendered Markdown.
* Fix spelling error in budget documentation
Corrected the spelling of 'cheverons' to 'chevrons'.
* Add files via upload
* Remove redundant text in budget.md
* Fix formatting issues in payees.md
* count points script should fetch the release note from the PR directly (#7309)
* get pr release note from PR, not top of master
* note
* [AI] Mobile: Post transaction today on global account lists (#7311) (#7322)
* [AI] Mobile: pass today for Post transaction today on global account lists (#7311)
All Accounts, On budget, and Off budget transaction lists now forward the
today flag to schedule/post-transaction, matching single-account mobile
and desktop behavior.
Made-with: Cursor
* [AI] Add release note for PR 7322 (#7311)
Made-with: Cursor
* [AI] Tighten release note wording for PR 7322 (imperative)
Made-with: Cursor
---------
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Pranay S <pranayritvik@gmail.com>
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Implement Sankey report for spent and budgeted money (#7220)
* Implement Sankey graph report
* Add release notes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Remove local debug settings
* [autofix.ci] apply automated fixes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Improve graphs from comments
* Fix lints
* coderabit fixes
* Fix filtering and UI enhancements
* remove pngs
* Fix typecheck
* Another type issue
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Fix strict typing issues
* Update report page
Now better conforms with components from other reports, e.g. by reusing Header
Makes it possible to display a period longer than one month.
* Change view description order
* Formatting and cleanup
* Removed difference section, as it will be difficult to get a reliable view across months
* Introduce the Timeframe param, similar to Spending report, to allow saving a Live sliding window.
* Allow filtering just the last month
* Fix linting errors
* Remove all information about income
* Remove debugging statement
* Sort categories and subcategories by amount
* Move compact mode to spreadsheet to fix Card view more easily
* Update tests file
* Add release notes
* Rename release notes to match PR#
* Fix autofix.ci issues
* Update packages/desktop-client/e2e/sankey.test.ts
Enable experimental feature fall all tests, pr. coderabbit recommendation
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Add sankey-card to isWidgetType
* Gate Sankey routes to prevent direct URL bypass
* Fix typo
* Change node transformation to work by key instead of name, to remove risk of duplicate issues
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Prevent false-positive pass in month-change test.
* Translate mode to a proper label
* Fix message for empty data
* Enabled LoadingIndicator until data is ready
* Change card default mode
* More robust filtering
* Fixed issue with budgeted spreadsheet not using 'end' date
* Allow copying SankeyCard to dashboard
* Fix typing and linting issues
* Remove e2e tests
I cannot currently get them to pass, because I dont fully understand playwright and how they are supposed to work. I can see that they don't exist for other reports. We can add them later if required.
* Remove unecessary sankey reference
* Refactor spreadsheet
* Remove dead code from SankeyGraph
* Collect to Other if too many subcategories
* Edit wrong comment
* Linting and typechecking
* Show remaining amount to budget
* Hide description on narrow device
* Add visual clue if 'To budget' is larger than 'Budgeted' and would extend below the edge of the graph
* Add colors to the links
* Fix report card showing subcategories instead of main categories
* Add tooltip info to Other on SankeyCard
* Create globalOther flag and implement greedy category reduction algorithm
* Allow user to select between Global or Per category Other
* Allow user to choose number of subcategories to show
* Allow user to select how subcategories are sorted
* Fix budget filtering
* [autofix.ci] apply automated fixes
* Condense sorting and Other-grouping to one option
* Implement Sort as budget option
* Dynamically adjust topN based on SankeyCard height
* Remove old feature flags from previous PR
---------
Co-authored-by: andrewhumble <43395285+andrewhumble@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Fix yarn generate:icons command (#7281)
* fix icon templates with `module.exports` to `export default`
* Add `@svgr/babel-plugin-add-jsx-attribute` to dependencies
* Run `yarn generate:icons`, and set prettier singleQuote to reduce changes
* Add release note
* Add temporary fix for `SvgChartArea`
* Add `ChartArea` svg from the existing tsx
* CI rerun
* Standardise ledger scrolling when using keyboard shortcuts (#7283)
* Standardise table keyboard navigation by preventing browser scroll with arrow keys
* Add release note
* Apply the preventDefault() in specific cases so that it is not applied to default
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Fix updateTransaction corrupting split parents with partial updates (#7242)
* [AI] Fix updateTransaction corrupting split parents with partial updates
When `api.updateTransaction(id, { notes: '...' })` is called on a split
parent, the `updateTransaction` helper replaces the parent with the
sparse update object (`{ id, notes }`) instead of merging it with
the existing transaction data. This causes `recalculateSplit` to see
`amount` as `undefined` (→ 0), which doesn't match the children's
total and sets a `SplitTransactionError` on the parent. `makeChild`
also inherits undefined `account`, `date`, and `cleared` values,
potentially creating broken child rows.
Fix: merge the incoming partial fields (`{ ...trans, ...transaction }`)
so all existing properties are preserved.
Add a test that performs a notes-only update on a split parent and
asserts no error is set and the amount stays intact.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* [AI] Add release notes for PR #7242
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Address review feedback: remove verbose comment and simplify release note
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: L. Warren Thompson <lwarrenthompson@Warren-MBP.local>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* [AI] Add electron conditions to loot-core platform/server exports and fix imports
- Add "electron" condition to platform/server exports (asyncStorage,
connection, fetch, fs, sqlite) so they resolve to .electron.ts files
when using the electron export condition
- Remove broken ./client/platform export referencing non-existent files
- Convert deep relative imports in electron files to subpath imports
(#types/prefs, #server/errors, #server/mutators)
https://claude.ai/code/session_01FPpKnozt42Mf79YHAT6ytM
* [AI] Convert remaining relative imports to subpath imports in electron files
- Convert ../fs, ../log, ../../exceptions to subpath imports
(#platform/server/fs, #platform/server/log, #platform/exceptions)
- Add electron-conditional entries to the imports field in package.json
for all 5 platform/server modules with electron variants
- Add resolve.conditions: ['electron'] to vite.desktop.config.ts so the
electron condition is recognized during desktop builds
https://claude.ai/code/session_01FPpKnozt42Mf79YHAT6ytM
* Add release notes for PR #7383
* [AI] Fix API build and test failures from conditional exports
- Add "api" condition to all 5 platform/server exports and imports
entries so the API build resolves to .api.ts variants correctly
- Add resolve.conditions and ssr.resolve.conditions: ['api'] to
packages/api/vite.config.ts
- Add explicit #platform/server/log and #platform/exceptions entries
to the imports field (array fallback in #* wildcard doesn't work for
directory modules)
- Revert #platform/server/fs back to relative ../fs import in
asyncStorage/index.electron.ts — subpath imports for platform modules
with electron variants don't work in vitest because the test runner
doesn't propagate resolve.conditions to Node's import resolution
https://claude.ai/code/session_01FPpKnozt42Mf79YHAT6ytM
* fix: apply CodeRabbit auto-fixes
Fixed 2 file(s) based on 2 unresolved review comments.
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
* [autofix.ci] apply automated fixes
* Enhance package.json and Vite configurations for Electron support; refactor imports to use new path aliases. Added new paths for server and shared modules, updated SSR settings, and improved test configurations for better module resolution.
* [AI] Merge electron condition with default Vite conditions in vitest config
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* [AI] Move @ts-strict-ignore comment to first line in reset.ts
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Juulz <julesmcn@gmail.com>
Co-authored-by: Pranay S <pranayritvik@gmail.com>
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: Emil Tveden Bjerglund <emilbp@gmail.com>
Co-authored-by: andrewhumble <43395285+andrewhumble@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: James Skinner <56730344+JSkinnerUK@users.noreply.github.com>
Co-authored-by: L. Warren Thompson <warren.thompson@zuirail.com>
Co-authored-by: L. Warren Thompson <lwarrenthompson@Warren-MBP.local>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* [AI] Fix accounts list: compute balances, hide closed, sort by budget group
- Replace empty `balance_current` (bank-sync field) with computed `balance`
from transaction history via `getAccountBalance`
- Filter out closed accounts by default; add `--include-closed` flag
- Stable-sort on-budget accounts before off-budget
- Add `balance_current` to AMOUNT_FIELDS for table/csv formatting
- Update docs and tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [AI] Extract duplicate isRecord type guard to shared utils
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [AI] Add types condition to api package exports for tsc resolution
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Update packages/cli/src/commands/query.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* [AI] Add balance_available/balance_limit to AMOUNT_FIELDS, validate query result.data
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* [AI] Fix crash viewing account ledger with expired recurring schedules
Guard against null return from getNextDate() when a recurring schedule
has an end date in the past and no future occurrences exist.
Fixes#7285
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add release notes for PR #7381
* [AI] Address code review feedback for PR #7381
Revert schedule-template.ts changes and fix test names/assertions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Simplify bugfix description for account ledger crash
Removed redundant information about null checks in the bugfix description.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* [AI] Clarify that E2E encryption does not cover bank sync tokens (#5550)
Update docs and in-app text to make clear that end-to-end encryption
only applies to budget data, not bank sync tokens stored on the server.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add release notes for PR #7392
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* Fix custom report editor retaining unsaved settings
The session storage clear condition only fired when navigating from
the /reports dashboard. Since the URL tracking runs inside the report
component, the stored URL always pointed to the last report path, so
revisiting the same report never triggered the clear.
Changed the condition to clear session storage whenever the stored URL
differs from the current path. This handles navigating from the
dashboard, from another report, or any other page.
Fixes#7332
* Add release notes for PR #7356
* trim down some unused/unnecessary dependencies (#7350)
* fix github actions inconsistencies
* fix pinning of transitive deps in eslint-plugin
* drop use of node-fetch in api
* drop md5 dependency in favour of node:crypto
* drop slash
* drop unused top level packages
* add note about node-polyfills warning
* remove unused deps from desktop-client
* drop pegjs types
* note
* drop node-jq
* [Doc] More tour image (mostly) updates & a hotkey fix (#7328)
* Fix keyboard shortcut Mac key for undo operations
Updated keyboard shortcut instructions for Mac & make consistent.
* Add files via upload
* Fix undo shortcut from 'K' to 'Z'
Updated keyboard shortcut for undo operation in payees guide. COFFEE!
* Revise budget section for clarity and consistency
Updated category descriptions and improved Markdown support details.
* Add files via upload
* Fix grammatical error in budget.md
* Fix typo and clarify Markdown description in budget.md
Corrected a typo in the documentation regarding the chevrons and clarified the description of rendered Markdown.
* Fix spelling error in budget documentation
Corrected the spelling of 'cheverons' to 'chevrons'.
* Add files via upload
* Remove redundant text in budget.md
* Fix formatting issues in payees.md
* count points script should fetch the release note from the PR directly (#7309)
* get pr release note from PR, not top of master
* note
* [AI] Mobile: Post transaction today on global account lists (#7311) (#7322)
* [AI] Mobile: pass today for Post transaction today on global account lists (#7311)
All Accounts, On budget, and Off budget transaction lists now forward the
today flag to schedule/post-transaction, matching single-account mobile
and desktop behavior.
Made-with: Cursor
* [AI] Add release note for PR 7322 (#7311)
Made-with: Cursor
* [AI] Tighten release note wording for PR 7322 (imperative)
Made-with: Cursor
---------
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Pranay S <pranayritvik@gmail.com>
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Implement Sankey report for spent and budgeted money (#7220)
* Implement Sankey graph report
* Add release notes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Remove local debug settings
* [autofix.ci] apply automated fixes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Improve graphs from comments
* Fix lints
* coderabit fixes
* Fix filtering and UI enhancements
* remove pngs
* Fix typecheck
* Another type issue
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Fix strict typing issues
* Update report page
Now better conforms with components from other reports, e.g. by reusing Header
Makes it possible to display a period longer than one month.
* Change view description order
* Formatting and cleanup
* Removed difference section, as it will be difficult to get a reliable view across months
* Introduce the Timeframe param, similar to Spending report, to allow saving a Live sliding window.
* Allow filtering just the last month
* Fix linting errors
* Remove all information about income
* Remove debugging statement
* Sort categories and subcategories by amount
* Move compact mode to spreadsheet to fix Card view more easily
* Update tests file
* Add release notes
* Rename release notes to match PR#
* Fix autofix.ci issues
* Update packages/desktop-client/e2e/sankey.test.ts
Enable experimental feature fall all tests, pr. coderabbit recommendation
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Add sankey-card to isWidgetType
* Gate Sankey routes to prevent direct URL bypass
* Fix typo
* Change node transformation to work by key instead of name, to remove risk of duplicate issues
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Prevent false-positive pass in month-change test.
* Translate mode to a proper label
* Fix message for empty data
* Enabled LoadingIndicator until data is ready
* Change card default mode
* More robust filtering
* Fixed issue with budgeted spreadsheet not using 'end' date
* Allow copying SankeyCard to dashboard
* Fix typing and linting issues
* Remove e2e tests
I cannot currently get them to pass, because I dont fully understand playwright and how they are supposed to work. I can see that they don't exist for other reports. We can add them later if required.
* Remove unecessary sankey reference
* Refactor spreadsheet
* Remove dead code from SankeyGraph
* Collect to Other if too many subcategories
* Edit wrong comment
* Linting and typechecking
* Show remaining amount to budget
* Hide description on narrow device
* Add visual clue if 'To budget' is larger than 'Budgeted' and would extend below the edge of the graph
* Add colors to the links
* Fix report card showing subcategories instead of main categories
* Add tooltip info to Other on SankeyCard
* Create globalOther flag and implement greedy category reduction algorithm
* Allow user to select between Global or Per category Other
* Allow user to choose number of subcategories to show
* Allow user to select how subcategories are sorted
* Fix budget filtering
* [autofix.ci] apply automated fixes
* Condense sorting and Other-grouping to one option
* Implement Sort as budget option
* Dynamically adjust topN based on SankeyCard height
* Remove old feature flags from previous PR
---------
Co-authored-by: andrewhumble <43395285+andrewhumble@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Fix yarn generate:icons command (#7281)
* fix icon templates with `module.exports` to `export default`
* Add `@svgr/babel-plugin-add-jsx-attribute` to dependencies
* Run `yarn generate:icons`, and set prettier singleQuote to reduce changes
* Add release note
* Add temporary fix for `SvgChartArea`
* Add `ChartArea` svg from the existing tsx
* CI rerun
* Standardise ledger scrolling when using keyboard shortcuts (#7283)
* Standardise table keyboard navigation by preventing browser scroll with arrow keys
* Add release note
* Apply the preventDefault() in specific cases so that it is not applied to default
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Bump lodash from 4.17.23 to 4.18.1
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)
---
updated-dependencies:
- dependency-name: lodash
dependency-version: 4.18.1
dependency-type: direct:development
...
Signed-off-by: dependabot[bot] <support@github.com>
* note
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Juulz <julesmcn@gmail.com>
Co-authored-by: Pranay S <pranayritvik@gmail.com>
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: Emil Tveden Bjerglund <emilbp@gmail.com>
Co-authored-by: andrewhumble <43395285+andrewhumble@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: James Skinner <56730344+JSkinnerUK@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* implement our own GoCardless api class
* switch the service to use the new api
* drop deps
* note
* guard against request forgery
* strip empty params from the request body, add error logging
* coderabbit suggestions
* fix test, make institution nullable
* [AI] Improve theme catalog responsive layout in ThemeInstaller
* Refactor ColorPalette and ThemeInstaller components for improved layout and responsiveness
* Fix typo in Custom Reports description
* Correct category name from 'Reports' to 'Themes'
* [AI] Fix theme catalog scrollbar overlapping content
Reserve space for the scrollbar by adding right padding to catalog rows
so items don't get clipped when the list overflows.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [AI] Add .claude/ directory to .gitignore
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Modify .gitignore for Claude worktrees
Update .gitignore to include Claude worktrees and exclude settings.json
* Update .gitignore to include claude worktree folder
* Add .claude/settings.local.json to .gitignore
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [AI] Add self-signed SSL certificate documentation to CLI docs
Add a section explaining how to use NODE_TLS_REJECT_UNAUTHORIZED=0
to allow the CLI to connect to servers with self-signed SSL certificates,
with a security caution about the implications.
Closes#7327https://claude.ai/code/session_01Mwsuc9By67uzSiMLxvPsMq
* Add release notes for PR #7360
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* [AI] Add worktree creation hook to run yarn install
Add a WorktreeCreate hook in .claude/settings.json that runs a setup
script after creating a new git worktree. The script creates a detached
worktree and runs yarn install to ensure dependencies are available.
https://claude.ai/code/session_01MjuJLWcxNU6nbWQDrgGpPr
* [AI] Move worktree setup hook to husky post-checkout for universal support
Instead of a Claude Code-specific hook, detect new worktree creation in
the existing husky post-checkout hook by checking for missing node_modules.
This works with any tool that creates git worktrees (Claude Code, Cursor,
CLI, etc.) since git runs post-checkout after worktree creation.
https://claude.ai/code/session_01MjuJLWcxNU6nbWQDrgGpPr
* Add release notes for PR #7393
* Update 7393.md
* [AI] Fix post-checkout hook to propagate yarn install failures
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* Add documentation for self-signed cert healthchecks
Adds instruction to set NODE_EXTRA_CA_CERTS in docker-compose healthcheck commands so Node.js can trust the certificate.
* [autofix.ci] apply automated fixes
* fixup! Add documentation for self-signed cert healthchecks
* [autofix.ci] apply automated fixes
* Update Docker health checks with self-signed certs
If using self signed certs, comment the first test line and uncomment
the second test line.
* fixup! Update Docker health checks with self-signed certs
* fixup! Add documentation for self-signed cert healthchecks
* fixup! Update Docker health checks with self-signed certs
* [autofix.ci] apply automated fixes
* fixup! Add documentation for self-signed cert healthchecks
* fixup! Update Docker health checks with self-signed certs
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Add tourSidebar with various tour documentation
Added a new sidebar for the tour section with multiple entries.
* Add 'Tour Actual' sidebar to Docusaurus config
* Remove 'A Tour of Actual' from docs sidebar
Removed 'A Tour of Actual' category and its items from the sidebar.
* Rename 'Tour Actual' to 'Tour' in sidebar
* Add button to proportionally distribute remaining amount of split transaction among child transactions
* Added release note
* Increased min width for split error popover so all buttons are visible
* Updated release note
* Merge proportional distribution into even distribution button
* Added docs on split transactions
* [autofix.ci] apply automated fixes
* Fixed spelling
* [autofix.ci] apply automated fixes
* Change split transaction popover hack to use resize event
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Refine user interface documentation for clarity
Updated text for clarity and corrected typos in the user interface documentation.
* Clarify server status and sync icon details
Updated descriptions for server status and sync icon interactions.
* Clarify server status and sidebar account display
Updated server status descriptions for clarity and improved wording in the sidebar section.
* [AI] Fix updateTransaction corrupting split parents with partial updates
When `api.updateTransaction(id, { notes: '...' })` is called on a split
parent, the `updateTransaction` helper replaces the parent with the
sparse update object (`{ id, notes }`) instead of merging it with
the existing transaction data. This causes `recalculateSplit` to see
`amount` as `undefined` (→ 0), which doesn't match the children's
total and sets a `SplitTransactionError` on the parent. `makeChild`
also inherits undefined `account`, `date`, and `cleared` values,
potentially creating broken child rows.
Fix: merge the incoming partial fields (`{ ...trans, ...transaction }`)
so all existing properties are preserved.
Add a test that performs a notes-only update on a split parent and
asserts no error is set and the amount stays intact.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* [AI] Add release notes for PR #7242
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Address review feedback: remove verbose comment and simplify release note
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: L. Warren Thompson <lwarrenthompson@Warren-MBP.local>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Standardise table keyboard navigation by preventing browser scroll with arrow keys
* Add release note
* Apply the preventDefault() in specific cases so that it is not applied to default
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* fix icon templates with `module.exports` to `export default`
* Add `@svgr/babel-plugin-add-jsx-attribute` to dependencies
* Run `yarn generate:icons`, and set prettier singleQuote to reduce changes
* Add release note
* Add temporary fix for `SvgChartArea`
* Add `ChartArea` svg from the existing tsx
* CI rerun
* Implement Sankey graph report
* Add release notes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Remove local debug settings
* [autofix.ci] apply automated fixes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Improve graphs from comments
* Fix lints
* coderabit fixes
* Fix filtering and UI enhancements
* remove pngs
* Fix typecheck
* Another type issue
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6068
* Fix strict typing issues
* Update report page
Now better conforms with components from other reports, e.g. by reusing Header
Makes it possible to display a period longer than one month.
* Change view description order
* Formatting and cleanup
* Removed difference section, as it will be difficult to get a reliable view across months
* Introduce the Timeframe param, similar to Spending report, to allow saving a Live sliding window.
* Allow filtering just the last month
* Fix linting errors
* Remove all information about income
* Remove debugging statement
* Sort categories and subcategories by amount
* Move compact mode to spreadsheet to fix Card view more easily
* Update tests file
* Add release notes
* Rename release notes to match PR#
* Fix autofix.ci issues
* Update packages/desktop-client/e2e/sankey.test.ts
Enable experimental feature fall all tests, pr. coderabbit recommendation
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Add sankey-card to isWidgetType
* Gate Sankey routes to prevent direct URL bypass
* Fix typo
* Change node transformation to work by key instead of name, to remove risk of duplicate issues
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Prevent false-positive pass in month-change test.
* Translate mode to a proper label
* Fix message for empty data
* Enabled LoadingIndicator until data is ready
* Change card default mode
* More robust filtering
* Fixed issue with budgeted spreadsheet not using 'end' date
* Allow copying SankeyCard to dashboard
* Fix typing and linting issues
* Remove e2e tests
I cannot currently get them to pass, because I dont fully understand playwright and how they are supposed to work. I can see that they don't exist for other reports. We can add them later if required.
* Remove unecessary sankey reference
* Refactor spreadsheet
* Remove dead code from SankeyGraph
* Collect to Other if too many subcategories
* Edit wrong comment
* Linting and typechecking
* Show remaining amount to budget
* Hide description on narrow device
* Add visual clue if 'To budget' is larger than 'Budgeted' and would extend below the edge of the graph
* Add colors to the links
* Fix report card showing subcategories instead of main categories
* Add tooltip info to Other on SankeyCard
* Create globalOther flag and implement greedy category reduction algorithm
* Allow user to select between Global or Per category Other
* Allow user to choose number of subcategories to show
* Allow user to select how subcategories are sorted
* Fix budget filtering
* [autofix.ci] apply automated fixes
* Condense sorting and Other-grouping to one option
* Implement Sort as budget option
* Dynamically adjust topN based on SankeyCard height
* Remove old feature flags from previous PR
---------
Co-authored-by: andrewhumble <43395285+andrewhumble@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Fix keyboard shortcut Mac key for undo operations
Updated keyboard shortcut instructions for Mac & make consistent.
* Add files via upload
* Fix undo shortcut from 'K' to 'Z'
Updated keyboard shortcut for undo operation in payees guide. COFFEE!
* Revise budget section for clarity and consistency
Updated category descriptions and improved Markdown support details.
* Add files via upload
* Fix grammatical error in budget.md
* Fix typo and clarify Markdown description in budget.md
Corrected a typo in the documentation regarding the chevrons and clarified the description of rendered Markdown.
* Fix spelling error in budget documentation
Corrected the spelling of 'cheverons' to 'chevrons'.
* Add files via upload
* Remove redundant text in budget.md
* Fix formatting issues in payees.md
* count points script should fetch the release note from the PR directly (#7309)
* get pr release note from PR, not top of master
* note
* [AI] Mobile: Post transaction today on global account lists (#7311) (#7322)
* [AI] Mobile: pass today for Post transaction today on global account lists (#7311)
All Accounts, On budget, and Off budget transaction lists now forward the
today flag to schedule/post-transaction, matching single-account mobile
and desktop behavior.
Made-with: Cursor
* [AI] Add release note for PR 7322 (#7311)
Made-with: Cursor
* [AI] Tighten release note wording for PR 7322 (imperative)
Made-with: Cursor
---------
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Pranay S <pranayritvik@gmail.com>
Co-authored-by: Pranay Mac M1 <pranayseela@yahoo.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* fix github actions inconsistencies
* fix pinning of transitive deps in eslint-plugin
* drop use of node-fetch in api
* drop md5 dependency in favour of node:crypto
* drop slash
* drop unused top level packages
* add note about node-polyfills warning
* remove unused deps from desktop-client
* drop pegjs types
* note
* drop node-jq
* [AI] Fix unrecoverable UI error after login (#7341)
The crash was in CommandBar.tsx where item.name.toLowerCase() was called
on items with null/undefined names (from custom reports or dashboard
pages with null name columns in the database). Added optional chaining.
Also hardened React Query data hooks to always return safe defaults even
in error states, and guarded $oneof AQL operator against empty arrays
generating invalid SQL.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [autofix.ci] apply automated fixes
* [AI] Revert hook/compiler changes, keep CommandBar fix, add release notes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [AI] Default null names to empty string at data source
Instead of optional chaining at the consumer, ensure names are never
null by defaulting at the data source: reportModel.toJS for custom
reports and dashboardQueries for dashboard pages.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* [AI] Fix password login broken when OIDC is enabled (#7331)
The security fix in PR #7155 added an `active = 1` check to
`getLoginMethod()`, which prevented password login when OIDC was the
active auth method. This caused the server to silently reroute password
login requests to the OpenID flow, which fails.
Remove the `active` requirement when the client explicitly requests a
login method — only require the method to exist in the auth table. The
`active` flag still governs the default method via `getActiveLoginMethod()`.
The `/change-password` endpoint security protections (admin role +
password auth_method checks) remain intact.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add release notes for PR #7334
* Update getLoginMethod to validate client-requested login methods against the auth database
Modified the getLoginMethod function to check if the requested login method exists in the auth table before returning it. Updated the corresponding test to reflect that a client-requested method not found in the database will be ignored, ensuring proper handling of login methods.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-02 18:34:36 +00:00
710 changed files with 8379 additions and 3078 deletions
@@ -98,8 +98,8 @@ Run `actual <command> --help` for subcommands and options.
### Examples
```bash
# List all accounts (as a table)
actual accounts list --format table
# List all accounts (as a table; excludes closed by default)
actual accounts list[--include-closed] --format table
# Find an entity ID by name
actual server get-id --type accounts --name "Checking"
@@ -122,13 +122,35 @@ actual query run --table transactions \
### Amount Convention
All monetary amounts are **integer cents**:
All monetary amounts are **integer cents** when passed as input (flags, JSON):
| CLI Value | Dollar Amount |
| --------- | ------------- |
| `5000` | $50.00 |
| `-12350` | -$123.50 |
**Output formatting:** Table (`--format table`) and CSV (`--format csv`) output automatically converts cent values to decimal (e.g. `1665.00` instead of `166500`). JSON output always returns raw cents for programmatic use.
### Tips & Common Pitfalls
- **Split transactions:** When summing or counting transactions, filter `"is_parent": false` to avoid double-counting. A split parent holds the total amount, and its children hold the individual parts — including both would count the total twice.
- **Avoid rapid sequential requests:** Each CLI invocation opens a new server connection. Running queries in a tight loop (e.g. one per month) may trigger rate limiting or authentication failures. Instead, fetch all data in a single query with a date range filter and process locally:
# Bad: one query per month in a loop (may fail with auth errors)
for month in 01 02 03 ...; do actual query run ...; done
```
- **Uncategorized transactions:** `category.name` is `null` for transactions without a category. Account for this when filtering or grouping by category.
- **No date sub-fields in AQL:** `date.month`, `date.year`, etc. are not supported as query fields. To group by month, fetch raw transactions with a date range filter and aggregate locally in a script.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.