beancount-io 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. beancount_io-0.1.0/.gitignore +6 -0
  2. beancount_io-0.1.0/Makefile +114 -0
  3. beancount_io-0.1.0/NOTICE.fava +25 -0
  4. beancount_io-0.1.0/PKG-INFO +165 -0
  5. beancount_io-0.1.0/README.md +139 -0
  6. beancount_io-0.1.0/docs/IMPORTING.md +280 -0
  7. beancount_io-0.1.0/docs/PRFAQ.md +339 -0
  8. beancount_io-0.1.0/docs/REFERENCE.md +701 -0
  9. beancount_io-0.1.0/docs/RELEASING.md +93 -0
  10. beancount_io-0.1.0/docs/TUTORIAL.md +106 -0
  11. beancount_io-0.1.0/docs/USAGE.md +754 -0
  12. beancount_io-0.1.0/docs/agent-skills.md +111 -0
  13. beancount_io-0.1.0/docs/examples/csv_importers.py +54 -0
  14. beancount_io-0.1.0/docs/examples/first-month.csv +4 -0
  15. beancount_io-0.1.0/docs/examples/rules.toml +18 -0
  16. beancount_io-0.1.0/openapi/v1.json +19655 -0
  17. beancount_io-0.1.0/pyproject.toml +100 -0
  18. beancount_io-0.1.0/requirements.lock +379 -0
  19. beancount_io-0.1.0/scripts/gen_cloud_commands.py +272 -0
  20. beancount_io-0.1.0/scripts/gen_reference.py +181 -0
  21. beancount_io-0.1.0/scripts/release-check.sh +34 -0
  22. beancount_io-0.1.0/scripts/render-formula.sh +76 -0
  23. beancount_io-0.1.0/scripts/render-formula.test.sh +131 -0
  24. beancount_io-0.1.0/scripts/smoke-installed.py +340 -0
  25. beancount_io-0.1.0/scripts/test-homebrew.sh +37 -0
  26. beancount_io-0.1.0/scripts/test-install.py +55 -0
  27. beancount_io-0.1.0/src/cli/__init__.py +0 -0
  28. beancount_io-0.1.0/src/cli/api/__init__.py +0 -0
  29. beancount_io-0.1.0/src/cli/api/client.py +83 -0
  30. beancount_io-0.1.0/src/cli/api/rest_client/__init__.py +8 -0
  31. beancount_io-0.1.0/src/cli/api/rest_client/api/__init__.py +1 -0
  32. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/__init__.py +1 -0
  33. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/accessible_ledgers.py +234 -0
  34. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/consume_cli_auth_session.py +213 -0
  35. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/create_cli_auth_session.py +223 -0
  36. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/create_ledger.py +223 -0
  37. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_account.py +184 -0
  38. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_api_keys_id.py +209 -0
  39. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_bank_transactions.py +274 -0
  40. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_collaborators_collaborator.py +239 -0
  41. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_files_path.py +263 -0
  42. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v1_ledgers_owner_name_star.py +255 -0
  43. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_api_gateway_v_1_ledgers_owner_name_banks_item_id.py +267 -0
  44. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/delete_ledger.py +227 -0
  45. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_account_ai_cfo_usage.py +186 -0
  46. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_api_keys.py +189 -0
  47. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_asset_download_url.py +233 -0
  48. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_feature_flags.py +218 -0
  49. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_health.py +176 -0
  50. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_directives.py +217 -0
  51. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_journal.py +416 -0
  52. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_last_entries.py +272 -0
  53. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_account_report.py +321 -0
  54. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_accounts.py +247 -0
  55. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_archive_archive.py +235 -0
  56. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_archive_download_url.py +233 -0
  57. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_attributes.py +221 -0
  58. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_bank_accounts.py +217 -0
  59. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_bank_transactions_suggested_categories.py +242 -0
  60. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_bank_transactions_unsynced.py +238 -0
  61. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_banks.py +217 -0
  62. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_collaborators.py +282 -0
  63. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_collaborators_permission.py +246 -0
  64. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_commit_details.py +238 -0
  65. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_commits.py +278 -0
  66. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_commodities.py +218 -0
  67. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_currencies.py +222 -0
  68. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_documents.py +272 -0
  69. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_entries_count.py +272 -0
  70. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_entry_context.py +238 -0
  71. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_errors.py +218 -0
  72. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_events.py +218 -0
  73. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_files.py +253 -0
  74. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_files_path.py +239 -0
  75. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_interval_totals.py +321 -0
  76. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_journal.py +379 -0
  77. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_latest_commit.py +238 -0
  78. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_links.py +218 -0
  79. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_narration_transactions.py +238 -0
  80. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_narrations.py +218 -0
  81. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_overview.py +306 -0
  82. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_payee_accounts.py +242 -0
  83. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_payee_transactions.py +238 -0
  84. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_payees.py +222 -0
  85. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_plaintext_journal.py +268 -0
  86. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_postings_per_account.py +280 -0
  87. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_source_files.py +217 -0
  88. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_statements_statement.py +331 -0
  89. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_tags.py +218 -0
  90. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_trial_balance.py +306 -0
  91. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_ledgers_owner_name_years.py +218 -0
  92. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_legacy_journal_entries.py +425 -0
  93. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_legacy_ledger_meta.py +235 -0
  94. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_public_keys.py +248 -0
  95. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_followers.py +258 -0
  96. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_following.py +258 -0
  97. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_profile.py +222 -0
  98. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_social_starred_repositories.py +260 -0
  99. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_temp_assets_download_url.py +220 -0
  100. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v1_tier_quotas.py +191 -0
  101. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v_1_ledgers_owner_name_banks_item_id.py +231 -0
  102. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v_1_ledgers_owner_name_banks_item_id_accounts.py +231 -0
  103. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_api_gateway_v_1_ledgers_owner_name_banks_item_id_suggested_mapping.py +231 -0
  104. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_cli_auth_session.py +213 -0
  105. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_ledger.py +227 -0
  106. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/get_user_profile.py +237 -0
  107. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/logout.py +190 -0
  108. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/owned_ledgers.py +244 -0
  109. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_api_keys.py +217 -0
  110. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_import_parse_file.py +223 -0
  111. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_bank_transactions_submit.py +274 -0
  112. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_entries.py +259 -0
  113. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_entry_source_delete.py +257 -0
  114. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many.py +257 -0
  115. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt.py +261 -0
  116. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_import_parse_receipt.py +257 -0
  117. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories.py +264 -0
  118. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_leave.py +251 -0
  119. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_pull_requests.py +261 -0
  120. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_query.py +243 -0
  121. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_ledgers_owner_name_rename_file.py +261 -0
  122. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_legacy_entries.py +223 -0
  123. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_public_keys.py +219 -0
  124. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v1_temp_assets_upload_url.py +221 -0
  125. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v_1_ledgers_owner_name_banks_item_id_reconcile.py +267 -0
  126. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v_1_ledgers_owner_name_banks_item_id_refresh.py +286 -0
  127. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/post_api_gateway_v_1_ledgers_owner_name_banks_item_id_sync.py +271 -0
  128. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator.py +267 -0
  129. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_entry_source.py +257 -0
  130. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_files_path.py +267 -0
  131. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v1_ledgers_owner_name_star.py +255 -0
  132. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v_1_ledgers_owner_name_bank_accounts_account_id_currency.py +284 -0
  133. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/put_api_gateway_v_1_ledgers_owner_name_bank_accounts_account_id_mapping.py +284 -0
  134. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/search_ledgers.py +524 -0
  135. beancount_io-0.1.0/src/cli/api/rest_client/api/ledger_v_1/update_ledger.py +249 -0
  136. beancount_io-0.1.0/src/cli/api/rest_client/client.py +268 -0
  137. beancount_io-0.1.0/src/cli/api/rest_client/errors.py +16 -0
  138. beancount_io-0.1.0/src/cli/api/rest_client/models/__init__.py +467 -0
  139. beancount_io-0.1.0/src/cli/api/rest_client/models/accessible_ledgers_response_200_item.py +188 -0
  140. beancount_io-0.1.0/src/cli/api/rest_client/models/accessible_ledgers_response_200_item_permissions.py +77 -0
  141. beancount_io-0.1.0/src/cli/api/rest_client/models/api_key.py +154 -0
  142. beancount_io-0.1.0/src/cli/api/rest_client/models/bank_account_currency.py +42 -0
  143. beancount_io-0.1.0/src/cli/api/rest_client/models/bank_account_mapping.py +42 -0
  144. beancount_io-0.1.0/src/cli/api/rest_client/models/bank_transaction_discard.py +61 -0
  145. beancount_io-0.1.0/src/cli/api/rest_client/models/bank_transaction_submission.py +88 -0
  146. beancount_io-0.1.0/src/cli/api/rest_client/models/bank_transaction_submission_transactions_item.py +80 -0
  147. beancount_io-0.1.0/src/cli/api/rest_client/models/bql_query.py +62 -0
  148. beancount_io-0.1.0/src/cli/api/rest_client/models/consume_cli_auth_session_response_200.py +69 -0
  149. beancount_io-0.1.0/src/cli/api/rest_client/models/create_api_key.py +124 -0
  150. beancount_io-0.1.0/src/cli/api/rest_client/models/create_api_key_scopes_item.py +10 -0
  151. beancount_io-0.1.0/src/cli/api/rest_client/models/create_cli_auth_session_body.py +56 -0
  152. beancount_io-0.1.0/src/cli/api/rest_client/models/create_cli_auth_session_body_client.py +71 -0
  153. beancount_io-0.1.0/src/cli/api/rest_client/models/create_cli_auth_session_response_200.py +86 -0
  154. beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body.py +159 -0
  155. beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body_template_type_1.py +9 -0
  156. beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body_template_type_2_type_1.py +9 -0
  157. beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_body_template_type_3_type_1.py +9 -0
  158. beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_response_200.py +186 -0
  159. beancount_io-0.1.0/src/cli/api/rest_client/models/create_ledger_response_200_permissions.py +77 -0
  160. beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_bank_transactions_dry_run.py +9 -0
  161. beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_banks_item_id_dry_run.py +9 -0
  162. beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_response_200.py +72 -0
  163. beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_star_body.py +23 -0
  164. beancount_io-0.1.0/src/cli/api/rest_client/models/delete_api_gateway_v1_ledgers_owner_name_star_response_200.py +80 -0
  165. beancount_io-0.1.0/src/cli/api/rest_client/models/delete_ledger_response_200.py +61 -0
  166. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request.py +236 -0
  167. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0.py +60 -0
  168. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry.py +220 -0
  169. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_meta_type_0.py +45 -0
  170. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_postings_item.py +148 -0
  171. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_postings_item_price_type_0.py +50 -0
  172. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_entry_postings_item_units_type_0.py +51 -0
  173. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_0_type.py +8 -0
  174. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_1.py +60 -0
  175. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_1_entry.py +58 -0
  176. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_1_type.py +8 -0
  177. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_2.py +60 -0
  178. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_2_entry.py +50 -0
  179. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_2_type.py +8 -0
  180. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3.py +60 -0
  181. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3_entry.py +66 -0
  182. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3_entry_amount.py +50 -0
  183. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_3_type.py +8 -0
  184. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4.py +60 -0
  185. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4_entry.py +66 -0
  186. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4_entry_amount.py +50 -0
  187. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_4_type.py +8 -0
  188. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_5.py +60 -0
  189. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_5_entry.py +50 -0
  190. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_5_type.py +8 -0
  191. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_6.py +60 -0
  192. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_6_entry.py +58 -0
  193. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_6_type.py +8 -0
  194. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7.py +60 -0
  195. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_entry.py +76 -0
  196. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_entry_amount.py +50 -0
  197. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_entry_interval.py +12 -0
  198. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_7_type.py +8 -0
  199. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_8.py +60 -0
  200. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_8_entry.py +122 -0
  201. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_8_type.py +8 -0
  202. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_9.py +60 -0
  203. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_9_entry.py +58 -0
  204. beancount_io-0.1.0/src/cli/api/rest_client/models/entries_request_entries_item_type_9_type.py +8 -0
  205. beancount_io-0.1.0/src/cli/api/rest_client/models/file_commit_ack.py +70 -0
  206. beancount_io-0.1.0/src/cli/api/rest_client/models/file_delete.py +71 -0
  207. beancount_io-0.1.0/src/cli/api/rest_client/models/file_write.py +84 -0
  208. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_account_ai_cfo_usage_response_200.py +69 -0
  209. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_asset_download_url_response_200.py +61 -0
  210. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_feature_flags_response_200.py +61 -0
  211. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_account_journal_with_children.py +9 -0
  212. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_archive_download_url_response_200.py +61 -0
  213. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_permission_response_200.py +96 -0
  214. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_permission_response_200_user.py +124 -0
  215. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_response_200_item.py +143 -0
  216. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_collaborators_response_200_item_permission.py +10 -0
  217. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_ledgers_owner_name_statements_statement_statement.py +9 -0
  218. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_legacy_journal_entries_detailed.py +9 -0
  219. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_public_keys_response_200_item.py +104 -0
  220. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_followers_response_200.py +87 -0
  221. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_followers_response_200_users_item.py +90 -0
  222. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_following_response_200.py +87 -0
  223. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_following_response_200_users_item.py +90 -0
  224. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200.py +139 -0
  225. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200_activities_item.py +128 -0
  226. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200_profile.py +218 -0
  227. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_profile_response_200_repositories_item.py +116 -0
  228. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_starred_repositories_response_200.py +89 -0
  229. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_social_starred_repositories_response_200_repositories_item.py +106 -0
  230. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_temp_assets_download_url_response_200.py +69 -0
  231. beancount_io-0.1.0/src/cli/api/rest_client/models/get_api_gateway_v1_tier_quotas_response_200_item.py +93 -0
  232. beancount_io-0.1.0/src/cli/api/rest_client/models/get_cli_auth_session_response_200.py +63 -0
  233. beancount_io-0.1.0/src/cli/api/rest_client/models/get_cli_auth_session_response_200_status.py +12 -0
  234. beancount_io-0.1.0/src/cli/api/rest_client/models/get_ledger_response_200.py +186 -0
  235. beancount_io-0.1.0/src/cli/api/rest_client/models/get_ledger_response_200_permissions.py +77 -0
  236. beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0.py +253 -0
  237. beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_email_report_status_type_1.py +10 -0
  238. beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_email_report_status_type_2_type_1.py +10 -0
  239. beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_email_report_status_type_3_type_1.py +10 -0
  240. beancount_io-0.1.0/src/cli/api/rest_client/models/get_user_profile_response_200_type_0_limits.py +85 -0
  241. beancount_io-0.1.0/src/cli/api/rest_client/models/ledger_dir_entry.py +80 -0
  242. beancount_io-0.1.0/src/cli/api/rest_client/models/ledger_dir_entry_type.py +9 -0
  243. beancount_io-0.1.0/src/cli/api/rest_client/models/ledger_file.py +78 -0
  244. beancount_io-0.1.0/src/cli/api/rest_client/models/logout_response_200.py +61 -0
  245. beancount_io-0.1.0/src/cli/api/rest_client/models/minted_api_key.py +77 -0
  246. beancount_io-0.1.0/src/cli/api/rest_client/models/owned_ledgers_response_200_item.py +188 -0
  247. beancount_io-0.1.0/src/cli/api/rest_client/models/owned_ledgers_response_200_item_permissions.py +77 -0
  248. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_import_parse_file_body.py +50 -0
  249. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_import_parse_file_response_200.py +79 -0
  250. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_import_parse_file_response_200_rows_item.py +85 -0
  251. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_bank_transactions_submit_dry_run.py +9 -0
  252. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_reconcile_dry_run.py +9 -0
  253. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_refresh_body.py +23 -0
  254. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_refresh_dry_run.py +8 -0
  255. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_banks_item_id_sync_dry_run.py +9 -0
  256. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entries_response_200.py +64 -0
  257. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_body.py +50 -0
  258. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many_body.py +62 -0
  259. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many_body_entries_item.py +50 -0
  260. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_many_response_200.py +69 -0
  261. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_entry_source_delete_response_200.py +69 -0
  262. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_body.py +60 -0
  263. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_body_input.py +94 -0
  264. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_body_input_postings_item.py +58 -0
  265. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_insert_receipt_response_200.py +61 -0
  266. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_parse_receipt_body.py +42 -0
  267. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_parse_receipt_response_200.py +112 -0
  268. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories_body.py +62 -0
  269. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories_body_transactions_item.py +74 -0
  270. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_import_suggest_categories_response_200_item.py +96 -0
  271. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_leave_body.py +23 -0
  272. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_leave_response_200.py +72 -0
  273. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_pull_requests_body.py +116 -0
  274. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_pull_requests_body_changes_item.py +50 -0
  275. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_pull_requests_response_200.py +108 -0
  276. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_rename_file_body.py +92 -0
  277. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_ledgers_owner_name_rename_file_response_200.py +77 -0
  278. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body.py +82 -0
  279. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body_entries_input_item.py +114 -0
  280. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body_entries_input_item_meta.py +45 -0
  281. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_body_entries_input_item_postings_item.py +50 -0
  282. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_legacy_entries_response_200.py +69 -0
  283. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_public_keys_body.py +72 -0
  284. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_public_keys_response_200.py +104 -0
  285. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_temp_assets_upload_url_body.py +74 -0
  286. beancount_io-0.1.0/src/cli/api/rest_client/models/post_api_gateway_v1_temp_assets_upload_url_response_200.py +77 -0
  287. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_bank_accounts_account_id_currency_dry_run.py +8 -0
  288. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_bank_accounts_account_id_mapping_dry_run.py +8 -0
  289. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body.py +124 -0
  290. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body_permission_type_1.py +10 -0
  291. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body_permission_type_2_type_1.py +10 -0
  292. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_body_permission_type_3_type_1.py +10 -0
  293. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_collaborators_collaborator_response_200.py +72 -0
  294. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_entry_source_body.py +58 -0
  295. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_entry_source_response_200.py +86 -0
  296. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_star_body.py +23 -0
  297. beancount_io-0.1.0/src/cli/api/rest_client/models/put_api_gateway_v1_ledgers_owner_name_star_response_200.py +80 -0
  298. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_archived.py +9 -0
  299. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_exclusive.py +9 -0
  300. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_include_desc.py +9 -0
  301. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_is_private.py +9 -0
  302. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_private.py +9 -0
  303. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_response_200_item.py +188 -0
  304. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_response_200_item_permissions.py +77 -0
  305. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_template.py +9 -0
  306. beancount_io-0.1.0/src/cli/api/rest_client/models/search_ledgers_topic.py +9 -0
  307. beancount_io-0.1.0/src/cli/api/rest_client/models/update_ledger_body.py +94 -0
  308. beancount_io-0.1.0/src/cli/api/rest_client/models/update_ledger_response_200.py +186 -0
  309. beancount_io-0.1.0/src/cli/api/rest_client/models/update_ledger_response_200_permissions.py +77 -0
  310. beancount_io-0.1.0/src/cli/api/rest_client/models/v1_error.py +76 -0
  311. beancount_io-0.1.0/src/cli/api/rest_client/models/v1_error_error.py +93 -0
  312. beancount_io-0.1.0/src/cli/api/rest_client/models/v1_error_error_metadata.py +45 -0
  313. beancount_io-0.1.0/src/cli/api/rest_client/types.py +54 -0
  314. beancount_io-0.1.0/src/cli/ask/__init__.py +0 -0
  315. beancount_io-0.1.0/src/cli/ask/agent.py +165 -0
  316. beancount_io-0.1.0/src/cli/ask/repl.py +248 -0
  317. beancount_io-0.1.0/src/cli/ask/skills.py +121 -0
  318. beancount_io-0.1.0/src/cli/auth/__init__.py +0 -0
  319. beancount_io-0.1.0/src/cli/auth/credentials.py +83 -0
  320. beancount_io-0.1.0/src/cli/auth/device_flow.py +77 -0
  321. beancount_io-0.1.0/src/cli/commands/__init__.py +0 -0
  322. beancount_io-0.1.0/src/cli/commands/add.py +725 -0
  323. beancount_io-0.1.0/src/cli/commands/ask.py +84 -0
  324. beancount_io-0.1.0/src/cli/commands/check.py +24 -0
  325. beancount_io-0.1.0/src/cli/commands/cloud/__init__.py +0 -0
  326. beancount_io-0.1.0/src/cli/commands/cloud/app.py +97 -0
  327. beancount_io-0.1.0/src/cli/commands/cloud/generated/__init__.py +0 -0
  328. beancount_io-0.1.0/src/cli/commands/cloud/generated/ledger.py +97 -0
  329. beancount_io-0.1.0/src/cli/commands/cloud/ledger/__init__.py +0 -0
  330. beancount_io-0.1.0/src/cli/commands/cloud/ledger/app.py +89 -0
  331. beancount_io-0.1.0/src/cli/commands/cloud/ledger/manager.py +73 -0
  332. beancount_io-0.1.0/src/cli/commands/format.py +108 -0
  333. beancount_io-0.1.0/src/cli/commands/import_.py +722 -0
  334. beancount_io-0.1.0/src/cli/commands/init.py +176 -0
  335. beancount_io-0.1.0/src/cli/commands/list.py +377 -0
  336. beancount_io-0.1.0/src/cli/commands/query.py +108 -0
  337. beancount_io-0.1.0/src/cli/commands/report.py +574 -0
  338. beancount_io-0.1.0/src/cli/commands/upgrade.py +158 -0
  339. beancount_io-0.1.0/src/cli/completion.py +44 -0
  340. beancount_io-0.1.0/src/cli/config.py +66 -0
  341. beancount_io-0.1.0/src/cli/context.py +130 -0
  342. beancount_io-0.1.0/src/cli/csv_mapper.py +367 -0
  343. beancount_io-0.1.0/src/cli/directives/__init__.py +0 -0
  344. beancount_io-0.1.0/src/cli/directives/models.py +185 -0
  345. beancount_io-0.1.0/src/cli/directives/reader.py +400 -0
  346. beancount_io-0.1.0/src/cli/directives/writer.py +266 -0
  347. beancount_io-0.1.0/src/cli/errors.py +165 -0
  348. beancount_io-0.1.0/src/cli/ledger_write.py +575 -0
  349. beancount_io-0.1.0/src/cli/main.py +207 -0
  350. beancount_io-0.1.0/src/cli/output.py +206 -0
  351. beancount_io-0.1.0/src/cli/query_render.py +90 -0
  352. beancount_io-0.1.0/src/cli/settings.py +18 -0
  353. beancount_io-0.1.0/src/cli/update.py +241 -0
  354. beancount_io-0.1.0/src/cli/utils.py +57 -0
  355. beancount_io-0.1.0/src/fava/beans/abc.py +310 -0
  356. beancount_io-0.1.0/src/fava/beans/account.py +75 -0
  357. beancount_io-0.1.0/src/fava/beans/beancount_defaults.py +20 -0
  358. beancount_io-0.1.0/src/fava/beans/create.py +260 -0
  359. beancount_io-0.1.0/src/fava/beans/flags.py +19 -0
  360. beancount_io-0.1.0/src/fava/beans/funcs.py +29 -0
  361. beancount_io-0.1.0/src/fava/beans/helpers.py +43 -0
  362. beancount_io-0.1.0/src/fava/beans/load.py +40 -0
  363. beancount_io-0.1.0/src/fava/beans/prices.py +143 -0
  364. beancount_io-0.1.0/src/fava/beans/protocols.py +54 -0
  365. beancount_io-0.1.0/src/fava/beans/str.py +102 -0
  366. beancount_io-0.1.0/src/fava/beans/types.py +40 -0
  367. beancount_io-0.1.0/src/fava/core/bcio_options.py +134 -0
  368. beancount_io-0.1.0/src/fava/core/conversion.py +223 -0
  369. beancount_io-0.1.0/src/fava/core/fava_options.py +218 -0
  370. beancount_io-0.1.0/src/fava/core/filters.py +455 -0
  371. beancount_io-0.1.0/src/fava/core/group_entries.py +91 -0
  372. beancount_io-0.1.0/src/fava/core/inventory.py +161 -0
  373. beancount_io-0.1.0/src/fava/core/loader.py +93 -0
  374. beancount_io-0.1.0/src/fava/core/misc.py +25 -0
  375. beancount_io-0.1.0/src/fava/core/query.py +181 -0
  376. beancount_io-0.1.0/src/fava/core/tree.py +246 -0
  377. beancount_io-0.1.0/src/fava/file.py +10 -0
  378. beancount_io-0.1.0/src/fava/file_system.py +15 -0
  379. beancount_io-0.1.0/src/fava/helpers.py +32 -0
  380. beancount_io-0.1.0/src/fava/ledger.py +228 -0
  381. beancount_io-0.1.0/src/fava/modules/__init__.py +0 -0
  382. beancount_io-0.1.0/src/fava/modules/accounts.py +155 -0
  383. beancount_io-0.1.0/src/fava/modules/attributes.py +139 -0
  384. beancount_io-0.1.0/src/fava/modules/budgets.py +204 -0
  385. beancount_io-0.1.0/src/fava/modules/chart.py +274 -0
  386. beancount_io-0.1.0/src/fava/modules/financial_statements.py +175 -0
  387. beancount_io-0.1.0/src/fava/modules/query_shell.py +243 -0
  388. beancount_io-0.1.0/src/fava/modules/source_slice.py +357 -0
  389. beancount_io-0.1.0/src/fava/plugins/__init__.py +3 -0
  390. beancount_io-0.1.0/src/fava/plugins/amortize_over.py +147 -0
  391. beancount_io-0.1.0/src/fava/plugins/forecast.py +141 -0
  392. beancount_io-0.1.0/src/fava/plugins/link_documents.py +99 -0
  393. beancount_io-0.1.0/src/fava/plugins/tag_discovered_documents.py +44 -0
  394. beancount_io-0.1.0/src/fava/py.typed +0 -0
  395. beancount_io-0.1.0/src/fava/serialisation.py +142 -0
  396. beancount_io-0.1.0/src/fava/util/__init__.py +42 -0
  397. beancount_io-0.1.0/src/fava/util/date.py +554 -0
  398. beancount_io-0.1.0/src/fava/util/excel.py +111 -0
  399. beancount_io-0.1.0/src/fava/util/ranking.py +80 -0
  400. beancount_io-0.1.0/src/fava/util/sets.py +19 -0
  401. beancount_io-0.1.0/src/fava/util/unreachable.py +21 -0
  402. beancount_io-0.1.0/tests/__init__.py +0 -0
  403. beancount_io-0.1.0/tests/conftest.py +120 -0
  404. beancount_io-0.1.0/tests/fixtures/eur-precision.bean +12 -0
  405. beancount_io-0.1.0/tests/fixtures/invalid.bean +4 -0
  406. beancount_io-0.1.0/tests/fixtures/unpriced.bean +19 -0
  407. beancount_io-0.1.0/tests/fixtures/valid.bean +19 -0
  408. beancount_io-0.1.0/tests/test_ask.py +268 -0
  409. beancount_io-0.1.0/tests/test_bookkeeping_feedback.py +340 -0
  410. beancount_io-0.1.0/tests/test_cloud_generation.py +88 -0
  411. beancount_io-0.1.0/tests/test_command_boundaries.py +71 -0
  412. beancount_io-0.1.0/tests/test_command_tree.py +137 -0
  413. beancount_io-0.1.0/tests/test_contract.py +599 -0
  414. beancount_io-0.1.0/tests/test_credentials.py +123 -0
  415. beancount_io-0.1.0/tests/test_customer_workflows.py +480 -0
  416. beancount_io-0.1.0/tests/test_device_flow.py +121 -0
  417. beancount_io-0.1.0/tests/test_docs_examples.py +269 -0
  418. beancount_io-0.1.0/tests/test_fava_imports.py +28 -0
  419. beancount_io-0.1.0/tests/test_feedback_regressions.py +328 -0
  420. beancount_io-0.1.0/tests/test_forecast.py +561 -0
  421. beancount_io-0.1.0/tests/test_import.py +835 -0
  422. beancount_io-0.1.0/tests/test_input_feedback.py +251 -0
  423. beancount_io-0.1.0/tests/test_ledger_safety.py +448 -0
  424. beancount_io-0.1.0/tests/test_output.py +101 -0
  425. beancount_io-0.1.0/tests/test_release.py +78 -0
  426. beancount_io-0.1.0/tests/test_update.py +340 -0
  427. beancount_io-0.1.0/tests/test_upgrade.py +246 -0
  428. beancount_io-0.1.0/tests/test_utils.py +26 -0
  429. beancount_io-0.1.0/tests/test_workflow_guidance.py +235 -0
  430. beancount_io-0.1.0/tests/test_writer.py +269 -0
  431. beancount_io-0.1.0/uv.lock +2672 -0
@@ -0,0 +1,6 @@
1
+ __pycache__
2
+
3
+ # Build artifacts. `requirements.lock` is generated per release by
4
+ # `make release-lock` and travels inside the sdist, never in git.
5
+ dist/
6
+ requirements.lock
@@ -0,0 +1,114 @@
1
+ # Beancount.io CLI - Development Makefile
2
+
3
+ .PHONY: help install install-dev install-tool reinstall-tool dev lint deadcode deadcode-fix format format-check typecheck test codegen check-all release-check release-lock spec-check spec-sync docs docs-check
4
+
5
+ # Default target
6
+ help:
7
+ @echo "Available commands:"
8
+ @echo " make install - Install production dependencies"
9
+ @echo " make install-dev - Install all dependencies including dev"
10
+ @echo " make install-tool - Install CLI as a uv tool (editable)"
11
+ @echo " make reinstall-tool - Reinstall CLI tool"
12
+ @echo " make dev - Show CLI help"
13
+ @echo " make lint - Run ruff linter"
14
+ @echo " make deadcode - Detect unused Python code with Vulture"
15
+ @echo " make deadcode-fix - Remove fixable unused imports and variables"
16
+ @echo " make format - Format code with ruff"
17
+ @echo " make format-check - Check formatting without modifying files"
18
+ @echo " make typecheck - Run mypy type checks"
19
+ @echo " make test - Run tests with pytest across all cores"
20
+ @echo " make codegen - Regenerate the REST client and cloud command stubs from openapi/v1.json"
21
+ @echo " make spec-check - Fail if openapi/v1.json drifted from backend-cluster/idl's canonical spec"
22
+ @echo " make spec-sync - Refresh openapi/v1.json from the canonical spec"
23
+ @echo " make release-check - Validate the release tag against pyproject.toml"
24
+ @echo " make release-lock - Export the hash-pinned requirements.lock for a release"
25
+ @echo " make docs - Regenerate docs/REFERENCE.md from the command tree"
26
+ @echo " make docs-check - Fail if docs/REFERENCE.md drifted from the command tree"
27
+ @echo " make check-all - Run lint + format-check + typecheck + test + spec-check + docs-check"
28
+
29
+ install:
30
+ uv sync
31
+
32
+ install-dev:
33
+ uv sync --all-groups
34
+
35
+ install-tool:
36
+ uv tool install --editable .
37
+
38
+ reinstall-tool:
39
+ uv tool install --reinstall --editable .
40
+
41
+ dev:
42
+ uv run bea --help
43
+
44
+ lint:
45
+ uv run ruff check src/ tests/
46
+
47
+ deadcode:
48
+ uv run vulture src/cli src/fava --min-confidence 100 --exclude src/cli/api/rest_client/,src/cli/commands/cloud/generated/ --ignore-names repo
49
+
50
+ deadcode-fix:
51
+ uv run ruff check src/ tests/ --fix --select F401,F841
52
+ $(MAKE) deadcode
53
+
54
+ format:
55
+ uv run ruff format src/cli tests/
56
+
57
+ format-check:
58
+ uv run ruff format --check src/cli tests/
59
+
60
+ typecheck:
61
+ uv run mypy src/cli
62
+
63
+ test:
64
+ uv run pytest tests/ -n auto
65
+
66
+ test-cov:
67
+ uv run pytest tests/ --cov=fava --cov=cli --cov-report=term-missing --cov-report=html --cov-report=json
68
+ @echo "📊 Coverage report generated in htmlcov/index.html"
69
+
70
+ clean:
71
+ find . -type f -name "*.pyc" -delete
72
+ find . -type d -name "__pycache__" -delete
73
+ find . -type d -name "*.egg-info" -exec rm -rf {} +
74
+ find . -type f -name ".coverage" -delete
75
+ find . -type d -name "htmlcov" -exec rm -rf {} +
76
+ find . -type d -name ".pytest_cache" -exec rm -rf {} +
77
+ find . -type d -name ".mypy_cache" -exec rm -rf {} +
78
+ find . -type d -name ".ruff_cache" -exec rm -rf {} +
79
+
80
+ # Release plumbing. `.github/workflows/release-cli.yml` runs exactly these, so
81
+ # a tag that would fail in CI fails here first.
82
+ release-check:
83
+ bash scripts/release-check.sh
84
+
85
+ release-lock:
86
+ uv export --format requirements-txt --no-dev --no-emit-project --no-editable --hashes -o requirements.lock
87
+
88
+ # The canonical spec lives in the backend package; the CLI builds only from its
89
+ # own pinned copy so a `cli/` checkout is self-sufficient and reproducible.
90
+ CANONICAL_SPEC = ../backend-cluster/backend-v2/docs/openapi/v1.json
91
+
92
+ spec-check:
93
+ @diff -q $(CANONICAL_SPEC) openapi/v1.json >/dev/null \
94
+ || { echo "openapi/v1.json drifted from $(CANONICAL_SPEC) — run 'make spec-sync && make codegen' and commit the diff."; exit 1; }
95
+
96
+ spec-sync:
97
+ cp $(CANONICAL_SPEC) openapi/v1.json
98
+
99
+ # docs/REFERENCE.md is generated from the Typer app, the same way the REST
100
+ # client is generated from the OpenAPI spec: change a command once and the
101
+ # drift gate tells you the reference needs regenerating.
102
+ docs:
103
+ uv run python scripts/gen_reference.py
104
+
105
+ docs-check:
106
+ uv run python scripts/gen_reference.py --check
107
+
108
+ codegen:
109
+ uv run openapi-python-client generate --path openapi/v1.json \
110
+ --output-path src/cli/api/rest_client --meta none --overwrite
111
+ uv run python scripts/gen_cloud_commands.py
112
+ uv run ruff format src/cli/api/rest_client src/cli/commands/cloud/generated
113
+
114
+ check-all: lint deadcode format-check typecheck test spec-check docs-check
@@ -0,0 +1,25 @@
1
+ fava-slim — third-party notices
2
+ ===============================
3
+
4
+ fava-slim is a derivative work of Fava (https://github.com/beancount/fava),
5
+ stripped down to its Python core (ledger loading, account trees, financial
6
+ reports). Fava is distributed under the MIT license:
7
+
8
+ Copyright (c) 2015-2016 Dominik Aumayr <dominik@aumayr.name>
9
+
10
+ The original copyright and permission notice are retained in this package's
11
+ LICENSE file.
12
+
13
+ Files with separate provenance
14
+ ------------------------------
15
+
16
+ fava/plugins/amortize_over.py
17
+ Copyright (c) 2017 Cary Kempston
18
+ License: MIT (full license text retained in the file header)
19
+
20
+ fava/plugins/forecast.py
21
+ Copyright (c) 2019-2026 Beancount.io, MIT — an independent
22
+ reimplementation of the narration-marker convention established by the
23
+ `beancount.plugins.forecast` example plugin from Beancount v2
24
+ (https://github.com/beancount/beancount). It is syntax-compatible with
25
+ that plugin but contains none of its (GPL-2.0-only) code.
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.5
2
+ Name: beancount-io
3
+ Version: 0.1.0
4
+ Summary: Beancount.io CLI
5
+ Project-URL: Homepage, https://beancount.io
6
+ Project-URL: Repository, https://github.com/bex-co/beancount-io
7
+ License: MIT
8
+ License-File: NOTICE.fava
9
+ Requires-Python: >=3.12
10
+ Requires-Dist: attrs>=23
11
+ Requires-Dist: beancount>=3.2
12
+ Requires-Dist: beanquery>=0.2
13
+ Requires-Dist: httpx>=0.27
14
+ Requires-Dist: ply>=3.11
15
+ Requires-Dist: prompt-toolkit>=3.0
16
+ Requires-Dist: pydantic-settings>=2.0
17
+ Requires-Dist: pydantic>=2.0
18
+ Requires-Dist: pyexcel>=0.7.3
19
+ Requires-Dist: python-dateutil>=2.9.0
20
+ Requires-Dist: python-frontmatter>=1.1
21
+ Requires-Dist: typer>=0.12
22
+ Provides-Extra: ask
23
+ Requires-Dist: openai>=1.0; extra == 'ask'
24
+ Requires-Dist: pydantic-ai>=0.3; extra == 'ask'
25
+ Description-Content-Type: text/markdown
26
+
27
+ # beancount-io
28
+
29
+ `bea` is the command-line interface for [Beancount.io](https://beancount.io).
30
+ Create and edit plain-text Beancount ledgers, import bank exports, validate
31
+ accounts, run BQL queries, and generate financial reports. Local bookkeeping
32
+ needs no Beancount.io account. Optional AI assistance and hosted ledger
33
+ management use your Beancount.io credentials.
34
+
35
+ The Python distribution is **`beancount-io`**; its executable is **`bea`**.
36
+ Run `bea --version` and `bea COMMAND --help` to check the version and options
37
+ you have installed.
38
+
39
+ ## Contents
40
+
41
+ - [Install](#install) · [Quick start](#quick-start) · [Command map](#command-map)
42
+ - [Exit codes](#exit-codes) · [Learn more](#learn-more)
43
+ - [Development](#development) · [Releases](#releases) · [License](#license)
44
+
45
+ ## Install
46
+
47
+ ```bash norun
48
+ # Installs software; needs Homebrew or uv plus network.
49
+ brew install bex-co/tap/bea # macOS and Linuxbrew
50
+ uv tool install beancount-io # anywhere with uv and Python 3.12+
51
+ ```
52
+
53
+ The default installation omits AI dependencies. For `bea ask`, install the
54
+ extra (or run it without replacing your `bea`):
55
+
56
+ ```bash norun
57
+ # Installs software; needs uv plus network.
58
+ uv tool install 'beancount-io[ask]'
59
+ uvx --from 'beancount-io[ask]' bea ask --help
60
+ ```
61
+
62
+ ## Quick start
63
+
64
+ ```bash
65
+ bea --no-input init books --currency USD --date 2026-08-01 \
66
+ --opening-balance "Assets:Checking 1000"
67
+ cd books
68
+ bea add transaction "Coffee" --date 2026-08-02 \
69
+ --posting "Expenses:Dining 12.50" --posting "Assets:Checking"
70
+ bea check
71
+ bea list transaction --limit 10
72
+ bea report balance-sheet
73
+ ```
74
+
75
+ The purchase leaves **987.50 USD** in checking: the currency comes from the
76
+ account and Beancount fills in the balancing posting. For a bank export, see
77
+ the [import guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md);
78
+ for your first month end to end, follow the
79
+ [tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md).
80
+
81
+ ## Command map
82
+
83
+ | Command | Purpose |
84
+ | --- | --- |
85
+ | `bea init [DIRECTORY]` | Create a local ledger with common accounts |
86
+ | `bea add TYPE` | Append one of eleven directive types |
87
+ | `bea import SOURCE` | Preview or apply a bank CSV (`--csv`) or importer (`--config`) |
88
+ | `bea list TYPE` | Inspect directives and filter transactions |
89
+ | `bea check` | Validate the complete ledger |
90
+ | `bea format [PATH]` | Format a file or recursively format a directory |
91
+ | `bea query [BQL]` | Run a query or start the interactive BQL shell |
92
+ | `bea report TYPE` | Overview, income statement, balance sheet, or trial balance |
93
+ | `bea balance [ACCOUNT…]` | Trial-balance subtrees for matching accounts |
94
+ | `bea ask [QUESTION]` | Ask about a local ledger through the hosted AI service |
95
+ | `bea cloud …` | Sign in and manage hosted ledgers |
96
+ | `bea upgrade [--check]` | Check for an update or invoke the owning package manager |
97
+
98
+ Global options come **before the command**; `--file` selects the root ledger:
99
+
100
+ ```bash
101
+ bea --file main.bean check
102
+ bea --json list transaction --limit 100
103
+ ```
104
+
105
+ Every flag, default, and help string is listed in the generated
106
+ [command reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md).
107
+
108
+ ## Exit codes
109
+
110
+ | Code | Meaning |
111
+ | --- | --- |
112
+ | 0 | Success, including previews and intentional duplicate skips |
113
+ | 1 | Ledger, schema, formatting-check, or other runtime failure |
114
+ | 2 | Bad arguments, missing file or input, missing optional dependencies |
115
+ | 3 | Authentication or permission failure, including a read-only destination |
116
+ | 4 | Conflict: concurrent change, import review required, or uncertain remote write |
117
+
118
+ The [usage guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md#exit-codes)
119
+ documents the full contract: JSON error shape, cloud HTTP mapping, prompts,
120
+ and output exceptions.
121
+
122
+ ## Learn more
123
+
124
+ - [Tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md):
125
+ your first month, from `init` to a month-end report.
126
+ - [Usage](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md):
127
+ the contract — targets, JSON envelope, exit codes, prompts, environment.
128
+ - [Importing](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md):
129
+ no-code CSV import, rules, and Python importers.
130
+ - [Reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md):
131
+ every command's usage, arguments, and options, generated from the code.
132
+
133
+ ## Development
134
+
135
+ ```bash norun
136
+ # Clones the repo and syncs dependencies; needs git and network.
137
+ git clone https://github.com/bex-co/beancount-io.git
138
+ cd beancount-io/cli
139
+ uv sync --all-groups
140
+ uv run bea --help
141
+ make check-all
142
+ ```
143
+
144
+ Python 3.12+, Typer, Beancount v3, Beanquery, Pydantic, and a vendored Fava
145
+ reporting subset (it does not start the Fava web interface). `src/cli/` holds
146
+ command UX; `src/fava/` the vendored library (retain `NOTICE.fava`
147
+ attribution); `tests/` the pytest suite; `docs/` the guides above;
148
+ `openapi/v1.json` the pinned contract for hosted commands. `make check-all`
149
+ is the handoff gate: lint, deadcode, format-check, typecheck, test,
150
+ spec-check, and docs-check. Do not hand-edit generated API clients, command
151
+ stubs, `docs/REFERENCE.md`, or lockfiles; keep scratch files under `tmp/`.
152
+ See the [package guide](https://github.com/bex-co/beancount-io/blob/main/cli/CLAUDE.md)
153
+ for architecture boundaries and contribution rules.
154
+
155
+ ## Releases
156
+
157
+ Releases ship to PyPI and Homebrew from `cli-vX.Y.Z` tags; the
158
+ [release guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/RELEASING.md)
159
+ holds the tagging procedure and one-time credentials setup.
160
+
161
+ ## License
162
+
163
+ [MIT](https://github.com/bex-co/beancount-io/blob/main/LICENSE) © Beancount.io.
164
+ Vendored Fava attribution is preserved in
165
+ [NOTICE.fava](https://github.com/bex-co/beancount-io/blob/main/cli/NOTICE.fava).
@@ -0,0 +1,139 @@
1
+ # beancount-io
2
+
3
+ `bea` is the command-line interface for [Beancount.io](https://beancount.io).
4
+ Create and edit plain-text Beancount ledgers, import bank exports, validate
5
+ accounts, run BQL queries, and generate financial reports. Local bookkeeping
6
+ needs no Beancount.io account. Optional AI assistance and hosted ledger
7
+ management use your Beancount.io credentials.
8
+
9
+ The Python distribution is **`beancount-io`**; its executable is **`bea`**.
10
+ Run `bea --version` and `bea COMMAND --help` to check the version and options
11
+ you have installed.
12
+
13
+ ## Contents
14
+
15
+ - [Install](#install) · [Quick start](#quick-start) · [Command map](#command-map)
16
+ - [Exit codes](#exit-codes) · [Learn more](#learn-more)
17
+ - [Development](#development) · [Releases](#releases) · [License](#license)
18
+
19
+ ## Install
20
+
21
+ ```bash norun
22
+ # Installs software; needs Homebrew or uv plus network.
23
+ brew install bex-co/tap/bea # macOS and Linuxbrew
24
+ uv tool install beancount-io # anywhere with uv and Python 3.12+
25
+ ```
26
+
27
+ The default installation omits AI dependencies. For `bea ask`, install the
28
+ extra (or run it without replacing your `bea`):
29
+
30
+ ```bash norun
31
+ # Installs software; needs uv plus network.
32
+ uv tool install 'beancount-io[ask]'
33
+ uvx --from 'beancount-io[ask]' bea ask --help
34
+ ```
35
+
36
+ ## Quick start
37
+
38
+ ```bash
39
+ bea --no-input init books --currency USD --date 2026-08-01 \
40
+ --opening-balance "Assets:Checking 1000"
41
+ cd books
42
+ bea add transaction "Coffee" --date 2026-08-02 \
43
+ --posting "Expenses:Dining 12.50" --posting "Assets:Checking"
44
+ bea check
45
+ bea list transaction --limit 10
46
+ bea report balance-sheet
47
+ ```
48
+
49
+ The purchase leaves **987.50 USD** in checking: the currency comes from the
50
+ account and Beancount fills in the balancing posting. For a bank export, see
51
+ the [import guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md);
52
+ for your first month end to end, follow the
53
+ [tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md).
54
+
55
+ ## Command map
56
+
57
+ | Command | Purpose |
58
+ | --- | --- |
59
+ | `bea init [DIRECTORY]` | Create a local ledger with common accounts |
60
+ | `bea add TYPE` | Append one of eleven directive types |
61
+ | `bea import SOURCE` | Preview or apply a bank CSV (`--csv`) or importer (`--config`) |
62
+ | `bea list TYPE` | Inspect directives and filter transactions |
63
+ | `bea check` | Validate the complete ledger |
64
+ | `bea format [PATH]` | Format a file or recursively format a directory |
65
+ | `bea query [BQL]` | Run a query or start the interactive BQL shell |
66
+ | `bea report TYPE` | Overview, income statement, balance sheet, or trial balance |
67
+ | `bea balance [ACCOUNT…]` | Trial-balance subtrees for matching accounts |
68
+ | `bea ask [QUESTION]` | Ask about a local ledger through the hosted AI service |
69
+ | `bea cloud …` | Sign in and manage hosted ledgers |
70
+ | `bea upgrade [--check]` | Check for an update or invoke the owning package manager |
71
+
72
+ Global options come **before the command**; `--file` selects the root ledger:
73
+
74
+ ```bash
75
+ bea --file main.bean check
76
+ bea --json list transaction --limit 100
77
+ ```
78
+
79
+ Every flag, default, and help string is listed in the generated
80
+ [command reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md).
81
+
82
+ ## Exit codes
83
+
84
+ | Code | Meaning |
85
+ | --- | --- |
86
+ | 0 | Success, including previews and intentional duplicate skips |
87
+ | 1 | Ledger, schema, formatting-check, or other runtime failure |
88
+ | 2 | Bad arguments, missing file or input, missing optional dependencies |
89
+ | 3 | Authentication or permission failure, including a read-only destination |
90
+ | 4 | Conflict: concurrent change, import review required, or uncertain remote write |
91
+
92
+ The [usage guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md#exit-codes)
93
+ documents the full contract: JSON error shape, cloud HTTP mapping, prompts,
94
+ and output exceptions.
95
+
96
+ ## Learn more
97
+
98
+ - [Tutorial](https://github.com/bex-co/beancount-io/blob/main/cli/docs/TUTORIAL.md):
99
+ your first month, from `init` to a month-end report.
100
+ - [Usage](https://github.com/bex-co/beancount-io/blob/main/cli/docs/USAGE.md):
101
+ the contract — targets, JSON envelope, exit codes, prompts, environment.
102
+ - [Importing](https://github.com/bex-co/beancount-io/blob/main/cli/docs/IMPORTING.md):
103
+ no-code CSV import, rules, and Python importers.
104
+ - [Reference](https://github.com/bex-co/beancount-io/blob/main/cli/docs/REFERENCE.md):
105
+ every command's usage, arguments, and options, generated from the code.
106
+
107
+ ## Development
108
+
109
+ ```bash norun
110
+ # Clones the repo and syncs dependencies; needs git and network.
111
+ git clone https://github.com/bex-co/beancount-io.git
112
+ cd beancount-io/cli
113
+ uv sync --all-groups
114
+ uv run bea --help
115
+ make check-all
116
+ ```
117
+
118
+ Python 3.12+, Typer, Beancount v3, Beanquery, Pydantic, and a vendored Fava
119
+ reporting subset (it does not start the Fava web interface). `src/cli/` holds
120
+ command UX; `src/fava/` the vendored library (retain `NOTICE.fava`
121
+ attribution); `tests/` the pytest suite; `docs/` the guides above;
122
+ `openapi/v1.json` the pinned contract for hosted commands. `make check-all`
123
+ is the handoff gate: lint, deadcode, format-check, typecheck, test,
124
+ spec-check, and docs-check. Do not hand-edit generated API clients, command
125
+ stubs, `docs/REFERENCE.md`, or lockfiles; keep scratch files under `tmp/`.
126
+ See the [package guide](https://github.com/bex-co/beancount-io/blob/main/cli/CLAUDE.md)
127
+ for architecture boundaries and contribution rules.
128
+
129
+ ## Releases
130
+
131
+ Releases ship to PyPI and Homebrew from `cli-vX.Y.Z` tags; the
132
+ [release guide](https://github.com/bex-co/beancount-io/blob/main/cli/docs/RELEASING.md)
133
+ holds the tagging procedure and one-time credentials setup.
134
+
135
+ ## License
136
+
137
+ [MIT](https://github.com/bex-co/beancount-io/blob/main/LICENSE) © Beancount.io.
138
+ Vendored Fava attribution is preserved in
139
+ [NOTICE.fava](https://github.com/bex-co/beancount-io/blob/main/cli/NOTICE.fava).