balatrobot 0.6.1__tar.gz → 1.0.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 (185) hide show
  1. balatrobot-1.0.0/.claude/settings.json +48 -0
  2. {balatrobot-0.6.1 → balatrobot-1.0.0}/.github/workflows/code_quality.yml +4 -4
  3. {balatrobot-0.6.1 → balatrobot-1.0.0}/.github/workflows/release_please.yml +17 -0
  4. balatrobot-0.6.1/.github/workflows/release-pypi.yml → balatrobot-1.0.0/.github/workflows/release_pypi.yml +10 -11
  5. balatrobot-1.0.0/.gitignore +31 -0
  6. balatrobot-1.0.0/.mdformat.toml +5 -0
  7. {balatrobot-0.6.1 → balatrobot-1.0.0}/CHANGELOG.md +318 -0
  8. balatrobot-1.0.0/CLAUDE.md +141 -0
  9. balatrobot-1.0.0/Makefile +55 -0
  10. balatrobot-1.0.0/PKG-INFO +92 -0
  11. balatrobot-1.0.0/README.md +73 -0
  12. {balatrobot-0.6.1 → balatrobot-1.0.0}/balatrobot.json +2 -1
  13. balatrobot-1.0.0/balatrobot.lua +79 -0
  14. balatrobot-1.0.0/docs/api.md +1163 -0
  15. balatrobot-1.0.0/docs/assets/balatrobench.svg +38 -0
  16. balatrobot-1.0.0/docs/assets/balatrobot.svg +31 -0
  17. balatrobot-1.0.0/docs/assets/balatrollm.svg +49 -0
  18. balatrobot-1.0.0/docs/cli.md +153 -0
  19. balatrobot-1.0.0/docs/contributing.md +155 -0
  20. balatrobot-1.0.0/docs/index.md +102 -0
  21. balatrobot-1.0.0/docs/installation.md +68 -0
  22. {balatrobot-0.6.1 → balatrobot-1.0.0}/mkdocs.yml +11 -30
  23. {balatrobot-0.6.1 → balatrobot-1.0.0}/pyproject.toml +28 -20
  24. balatrobot-1.0.0/src/balatrobot/__init__.py +7 -0
  25. balatrobot-1.0.0/src/balatrobot/__main__.py +6 -0
  26. balatrobot-1.0.0/src/balatrobot/cli.py +56 -0
  27. balatrobot-1.0.0/src/balatrobot/config.py +101 -0
  28. balatrobot-1.0.0/src/balatrobot/manager.py +129 -0
  29. balatrobot-1.0.0/src/balatrobot/platforms/__init__.py +51 -0
  30. balatrobot-1.0.0/src/balatrobot/platforms/base.py +69 -0
  31. balatrobot-1.0.0/src/balatrobot/platforms/macos.py +47 -0
  32. balatrobot-1.0.0/src/balatrobot/platforms/native.py +111 -0
  33. balatrobot-1.0.0/src/lua/core/dispatcher.lua +211 -0
  34. balatrobot-1.0.0/src/lua/core/server.lua +469 -0
  35. balatrobot-1.0.0/src/lua/core/validator.lua +94 -0
  36. balatrobot-1.0.0/src/lua/endpoints/add.lua +442 -0
  37. balatrobot-1.0.0/src/lua/endpoints/buy.lua +244 -0
  38. balatrobot-1.0.0/src/lua/endpoints/cash_out.lua +60 -0
  39. balatrobot-1.0.0/src/lua/endpoints/discard.lua +109 -0
  40. balatrobot-1.0.0/src/lua/endpoints/gamestate.lua +32 -0
  41. balatrobot-1.0.0/src/lua/endpoints/health.lua +33 -0
  42. balatrobot-1.0.0/src/lua/endpoints/load.lua +168 -0
  43. balatrobot-1.0.0/src/lua/endpoints/menu.lua +50 -0
  44. balatrobot-1.0.0/src/lua/endpoints/next_round.lua +46 -0
  45. balatrobot-1.0.0/src/lua/endpoints/play.lua +158 -0
  46. balatrobot-1.0.0/src/lua/endpoints/rearrange.lua +213 -0
  47. balatrobot-1.0.0/src/lua/endpoints/reroll.lua +56 -0
  48. balatrobot-1.0.0/src/lua/endpoints/save.lua +105 -0
  49. balatrobot-1.0.0/src/lua/endpoints/screenshot.lua +75 -0
  50. balatrobot-1.0.0/src/lua/endpoints/select.lua +54 -0
  51. balatrobot-1.0.0/src/lua/endpoints/sell.lua +156 -0
  52. balatrobot-1.0.0/src/lua/endpoints/set.lua +215 -0
  53. balatrobot-1.0.0/src/lua/endpoints/skip.lua +79 -0
  54. balatrobot-1.0.0/src/lua/endpoints/start.lua +170 -0
  55. balatrobot-1.0.0/src/lua/endpoints/tests/echo.lua +68 -0
  56. balatrobot-1.0.0/src/lua/endpoints/tests/endpoint.lua +68 -0
  57. balatrobot-1.0.0/src/lua/endpoints/tests/error.lua +43 -0
  58. balatrobot-1.0.0/src/lua/endpoints/tests/state.lua +32 -0
  59. balatrobot-1.0.0/src/lua/endpoints/tests/validation.lua +82 -0
  60. balatrobot-1.0.0/src/lua/endpoints/use.lua +215 -0
  61. balatrobot-1.0.0/src/lua/settings.lua +268 -0
  62. balatrobot-1.0.0/src/lua/utils/debugger.lua +139 -0
  63. balatrobot-1.0.0/src/lua/utils/enums.lua +378 -0
  64. balatrobot-1.0.0/src/lua/utils/errors.lua +22 -0
  65. balatrobot-1.0.0/src/lua/utils/gamestate.lua +785 -0
  66. balatrobot-1.0.0/src/lua/utils/openrpc.json +2909 -0
  67. balatrobot-1.0.0/src/lua/utils/types.lua +304 -0
  68. balatrobot-1.0.0/tests/cli/__init__.py +1 -0
  69. balatrobot-1.0.0/tests/cli/conftest.py +69 -0
  70. balatrobot-1.0.0/tests/cli/test_config.py +179 -0
  71. balatrobot-1.0.0/tests/cli/test_integration.py +59 -0
  72. balatrobot-1.0.0/tests/cli/test_manager.py +176 -0
  73. balatrobot-1.0.0/tests/cli/test_platforms.py +129 -0
  74. balatrobot-1.0.0/tests/conftest.py +6 -0
  75. balatrobot-1.0.0/tests/fixtures/fixtures.json +1879 -0
  76. balatrobot-1.0.0/tests/fixtures/generate.py +168 -0
  77. balatrobot-1.0.0/tests/lua/conftest.py +530 -0
  78. balatrobot-1.0.0/tests/lua/core/__init__.py +2 -0
  79. balatrobot-1.0.0/tests/lua/core/test_dispatcher.py +311 -0
  80. balatrobot-1.0.0/tests/lua/core/test_server.py +493 -0
  81. balatrobot-1.0.0/tests/lua/core/test_validator.py +437 -0
  82. balatrobot-1.0.0/tests/lua/endpoints/__init__.py +2 -0
  83. balatrobot-1.0.0/tests/lua/endpoints/test_add.py +641 -0
  84. balatrobot-1.0.0/tests/lua/endpoints/test_buy.py +244 -0
  85. balatrobot-1.0.0/tests/lua/endpoints/test_cash_out.py +35 -0
  86. balatrobot-1.0.0/tests/lua/endpoints/test_discard.py +111 -0
  87. balatrobot-1.0.0/tests/lua/endpoints/test_gamestate.py +32 -0
  88. balatrobot-1.0.0/tests/lua/endpoints/test_health.py +32 -0
  89. balatrobot-1.0.0/tests/lua/endpoints/test_load.py +65 -0
  90. balatrobot-1.0.0/tests/lua/endpoints/test_menu.py +22 -0
  91. balatrobot-1.0.0/tests/lua/endpoints/test_next_round.py +36 -0
  92. balatrobot-1.0.0/tests/lua/endpoints/test_play.py +125 -0
  93. balatrobot-1.0.0/tests/lua/endpoints/test_rearrange.py +234 -0
  94. balatrobot-1.0.0/tests/lua/endpoints/test_reroll.py +65 -0
  95. balatrobot-1.0.0/tests/lua/endpoints/test_save.py +77 -0
  96. balatrobot-1.0.0/tests/lua/endpoints/test_screenshot.py +72 -0
  97. balatrobot-1.0.0/tests/lua/endpoints/test_select.py +58 -0
  98. balatrobot-1.0.0/tests/lua/endpoints/test_sell.py +194 -0
  99. balatrobot-1.0.0/tests/lua/endpoints/test_set.py +260 -0
  100. balatrobot-1.0.0/tests/lua/endpoints/test_skip.py +65 -0
  101. balatrobot-1.0.0/tests/lua/endpoints/test_start.py +164 -0
  102. balatrobot-1.0.0/tests/lua/endpoints/test_use.py +359 -0
  103. {balatrobot-0.6.1 → balatrobot-1.0.0}/uv.lock +213 -240
  104. balatrobot-0.6.1/.claude/commands/commit-msg.md +0 -43
  105. balatrobot-0.6.1/.claude/commands/commit.md +0 -53
  106. balatrobot-0.6.1/.claude/commands/test.md +0 -3
  107. balatrobot-0.6.1/.claude/settings.json +0 -36
  108. balatrobot-0.6.1/.cursor/rules/docs-formatting.mdc +0 -51
  109. balatrobot-0.6.1/.cursor/rules/python-development.mdc +0 -602
  110. balatrobot-0.6.1/.envrc.example +0 -9
  111. balatrobot-0.6.1/.gitattributes +0 -2
  112. balatrobot-0.6.1/.gitignore +0 -12
  113. balatrobot-0.6.1/.gitmodules +0 -0
  114. balatrobot-0.6.1/.mdformat.toml +0 -11
  115. balatrobot-0.6.1/.vscode/extensions.json +0 -11
  116. balatrobot-0.6.1/.vscode/settings.json +0 -6
  117. balatrobot-0.6.1/CLAUDE.md +0 -111
  118. balatrobot-0.6.1/Makefile +0 -155
  119. balatrobot-0.6.1/PKG-INFO +0 -52
  120. balatrobot-0.6.1/README.md +0 -31
  121. balatrobot-0.6.1/balatro.sh +0 -462
  122. balatrobot-0.6.1/balatrobot.lua +0 -17
  123. balatrobot-0.6.1/bots/example.py +0 -45
  124. balatrobot-0.6.1/bots/replay.py +0 -170
  125. balatrobot-0.6.1/docs/assets/balatrobot.svg +0 -68
  126. balatrobot-0.6.1/docs/balatrobot-api.md +0 -141
  127. balatrobot-0.6.1/docs/contributing.md +0 -276
  128. balatrobot-0.6.1/docs/developing-bots.md +0 -147
  129. balatrobot-0.6.1/docs/index.md +0 -44
  130. balatrobot-0.6.1/docs/installation.md +0 -262
  131. balatrobot-0.6.1/docs/logging-systems.md +0 -119
  132. balatrobot-0.6.1/docs/protocol-api.md +0 -230
  133. balatrobot-0.6.1/runs/.gitkeep +0 -0
  134. balatrobot-0.6.1/src/balatrobot/__init__.py +0 -21
  135. balatrobot-0.6.1/src/balatrobot/client.py +0 -483
  136. balatrobot-0.6.1/src/balatrobot/enums.py +0 -478
  137. balatrobot-0.6.1/src/balatrobot/exceptions.py +0 -166
  138. balatrobot-0.6.1/src/balatrobot/models.py +0 -402
  139. balatrobot-0.6.1/src/balatrobot/py.typed +0 -0
  140. balatrobot-0.6.1/src/lua/api.lua +0 -1535
  141. balatrobot-0.6.1/src/lua/log.lua +0 -526
  142. balatrobot-0.6.1/src/lua/settings.lua +0 -247
  143. balatrobot-0.6.1/src/lua/types.lua +0 -373
  144. balatrobot-0.6.1/src/lua/utils.lua +0 -1086
  145. balatrobot-0.6.1/tests/balatrobot/conftest.py +0 -21
  146. balatrobot-0.6.1/tests/balatrobot/test_client.py +0 -484
  147. balatrobot-0.6.1/tests/balatrobot/test_exceptions.py +0 -90
  148. balatrobot-0.6.1/tests/balatrobot/test_models.py +0 -30
  149. balatrobot-0.6.1/tests/conftest.py +0 -41
  150. balatrobot-0.6.1/tests/lua/conftest.py +0 -165
  151. balatrobot-0.6.1/tests/lua/endpoints/checkpoints/basic_shop_setup.jkr +0 -3
  152. balatrobot-0.6.1/tests/lua/endpoints/checkpoints/buy_cant_use.jkr +0 -3
  153. balatrobot-0.6.1/tests/lua/endpoints/checkpoints/plasma_deck.jkr +0 -3
  154. balatrobot-0.6.1/tests/lua/endpoints/test_cash_out.py +0 -65
  155. balatrobot-0.6.1/tests/lua/endpoints/test_get_gamestate.py +0 -56
  156. balatrobot-0.6.1/tests/lua/endpoints/test_get_save_info.py +0 -68
  157. balatrobot-0.6.1/tests/lua/endpoints/test_go_to_menu.py +0 -33
  158. balatrobot-0.6.1/tests/lua/endpoints/test_load_save.py +0 -58
  159. balatrobot-0.6.1/tests/lua/endpoints/test_play_hand_or_discard.py +0 -277
  160. balatrobot-0.6.1/tests/lua/endpoints/test_rearrange_consumables.py +0 -257
  161. balatrobot-0.6.1/tests/lua/endpoints/test_rearrange_hand.py +0 -154
  162. balatrobot-0.6.1/tests/lua/endpoints/test_rearrange_jokers.py +0 -195
  163. balatrobot-0.6.1/tests/lua/endpoints/test_sell_consumable.py +0 -238
  164. balatrobot-0.6.1/tests/lua/endpoints/test_sell_joker.py +0 -277
  165. balatrobot-0.6.1/tests/lua/endpoints/test_shop.py +0 -582
  166. balatrobot-0.6.1/tests/lua/endpoints/test_skip_or_select_blind.py +0 -230
  167. balatrobot-0.6.1/tests/lua/endpoints/test_start_run.py +0 -100
  168. balatrobot-0.6.1/tests/lua/endpoints/test_use_consumable.py +0 -411
  169. balatrobot-0.6.1/tests/lua/test_connection.py +0 -119
  170. balatrobot-0.6.1/tests/lua/test_log.py +0 -207
  171. balatrobot-0.6.1/tests/lua/test_protocol_errors.py +0 -182
  172. balatrobot-0.6.1/tests/runs/buy_joker.jsonl +0 -3
  173. balatrobot-0.6.1/tests/runs/no_shop.jsonl +0 -3
  174. balatrobot-0.6.1/tests/runs/rearrange_consumables.jsonl +0 -3
  175. balatrobot-0.6.1/tests/runs/rearrange_jokers.jsonl +0 -3
  176. balatrobot-0.6.1/tests/runs/sell_consumables.jsonl +0 -3
  177. balatrobot-0.6.1/tests/runs/sell_jokers.jsonl +0 -3
  178. balatrobot-0.6.1/tests/runs/shop_reroll.jsonl +0 -3
  179. balatrobot-0.6.1/tests/runs/use_consumable.planet.jsonl +0 -3
  180. {balatrobot-0.6.1 → balatrobot-1.0.0}/.editorconfig +0 -0
  181. {balatrobot-0.6.1 → balatrobot-1.0.0}/.github/workflows/deploy_docs.yml +0 -0
  182. {balatrobot-0.6.1 → balatrobot-1.0.0}/.python-version +0 -0
  183. {balatrobot-0.6.1 → balatrobot-1.0.0}/LICENSE +0 -0
  184. {balatrobot-0.6.1/tests/lua → balatrobot-1.0.0/tests}/__init__.py +0 -0
  185. {balatrobot-0.6.1/tests/lua/endpoints → balatrobot-1.0.0/tests/lua}/__init__.py +0 -0
@@ -0,0 +1,48 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(pytest:*)",
5
+ "Bash(ruff check:*)",
6
+ "Bash(ruff format:*)",
7
+ "Bash(ty check:*)"
8
+ ],
9
+ "deny": [
10
+ "Edit(CHANGELOG.md)",
11
+ "Write(CHANGELOG.md)"
12
+ ]
13
+ },
14
+ "hooks": {
15
+ "PostToolUse": [
16
+ {
17
+ "matcher": "Write|Edit",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "stylua .",
22
+ "timeout": 5
23
+ },
24
+ {
25
+ "type": "command",
26
+ "command": "ruff format",
27
+ "timeout": 5
28
+ },
29
+ {
30
+ "type": "command",
31
+ "command": "ruff check --select I --fix",
32
+ "timeout": 5
33
+ },
34
+ {
35
+ "type": "command",
36
+ "command": "ty check",
37
+ "timeout": 5
38
+ },
39
+ {
40
+ "type": "command",
41
+ "command": "mdformat .",
42
+ "timeout": 5
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ }
48
+ }
@@ -26,7 +26,7 @@ jobs:
26
26
  with:
27
27
  version: latest
28
28
  args: format --check
29
- pyright:
29
+ ty:
30
30
  name: Type Check & Markdown Format
31
31
  runs-on: ubuntu-latest
32
32
  needs: ruff
@@ -44,15 +44,15 @@ jobs:
44
44
  - name: Install dependencies
45
45
  run: |
46
46
  uv venv
47
- uv sync --dev
47
+ uv sync --group dev --group test
48
48
  - name: Check markdown formatting
49
49
  run: |
50
50
  source .venv/bin/activate
51
51
  mdformat --check .
52
- - name: Run pyright
52
+ - name: Run ty
53
53
  run: |
54
54
  source .venv/bin/activate
55
- basedpyright
55
+ ty check
56
56
  stylua:
57
57
  name: StyLua
58
58
  runs-on: ubuntu-latest
@@ -63,3 +63,20 @@ jobs:
63
63
  else
64
64
  echo "No changes to balatrobot.json"
65
65
  fi
66
+ - name: Notify consumer repo of new balatrobot release
67
+ if: ${{ steps.release.outputs.release_created }}
68
+ env:
69
+ BALATROLLM_REPO: "coder/balatrollm"
70
+ BALATROLLM_TOKEN: ${{ secrets.BALATROLLM_TOKEN }}
71
+ BALATRO_REPO: "S1M0N38/balatro"
72
+ BALATRO_TOKEN: ${{ secrets.BALATRO_TOKEN }}
73
+ run: |
74
+ VERSION="${{ steps.release.outputs.version }}"
75
+ curl -X POST -H "Accept: application/vnd.github+json" \
76
+ -H "Authorization: token $BALATROLLM_TOKEN" \
77
+ https://api.github.com/repos/$BALATROLLM_REPO/dispatches \
78
+ -d "{\"event_type\":\"balatrobot_release\",\"client_payload\":{\"version\":\"$VERSION\"}}"
79
+ curl -X POST -H "Accept: application/vnd.github+json" \
80
+ -H "Authorization: token $BALATRO_TOKEN" \
81
+ https://api.github.com/repos/$BALATRO_REPO/dispatches \
82
+ -d "{\"event_type\":\"balatrobot_release\",\"client_payload\":{\"version\":\"$VERSION\"}}"
@@ -1,29 +1,28 @@
1
1
  name: Release PyPI
2
-
3
2
  on:
4
3
  push:
5
4
  tags:
6
5
  - v*
7
6
  workflow_dispatch:
8
-
9
7
  jobs:
10
8
  pypi:
11
9
  name: Publish to PyPI
12
10
  runs-on: ubuntu-latest
13
11
  environment:
14
- name: release
12
+ name: pypi
15
13
  permissions:
16
14
  id-token: write
15
+ contents: read
17
16
  steps:
18
- - uses: actions/checkout@v4
19
-
17
+ - name: Checkout
18
+ uses: actions/checkout@v5
20
19
  - name: Install uv
21
- uses: astral-sh/setup-uv@v5
22
-
23
- - name: "Set up Python"
20
+ uses: astral-sh/setup-uv@v7
21
+ - name: Set up Python
24
22
  uses: actions/setup-python@v5
25
23
  with:
26
24
  python-version-file: ".python-version"
27
-
28
- - run: uv build
29
- - run: uv publish --trusted-publishing always
25
+ - name: Build
26
+ run: uv build
27
+ - name: Publish
28
+ run: uv publish
@@ -0,0 +1,31 @@
1
+ __pycache__
2
+ .envrc
3
+ .luarc.json
4
+ *.log
5
+ runs/*.jsonl
6
+ src/lua_old
7
+ balatrobot_old.lua
8
+ dump
9
+ coverage.xml
10
+ .coverage
11
+ balatro
12
+ src/lua_oldish
13
+ tests/lua_old
14
+ balatrobot_oldish.lua
15
+ balatro_oldish.sh
16
+ *.jkr
17
+ smods
18
+
19
+ # old python balatrobot implementation
20
+ REFACTOR.md
21
+ OLD_ENDPOINTS.md
22
+ GAMESTATE.md
23
+ ERRORS.md
24
+ ENDPOINT_USE.md
25
+ ENDPOINT_ADD.md
26
+ ENDPOINTS.md
27
+ balatro.sh
28
+ OPEN-RPC_SPEC.md
29
+ docs_old
30
+ scripts_old
31
+ smods.wiki
@@ -0,0 +1,5 @@
1
+ wrap = "keep"
2
+ number = true
3
+ end_of_line = "lf"
4
+ validate = true
5
+ exclude = ["balatro/**", "CHANGELOG.md", ".venv/**", "smods.wiki/**"]
@@ -1,5 +1,323 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.0 (2025-12-23)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * update to v1.0.0
9
+
10
+ ### Features
11
+
12
+ * add --status option to show running balatro instances ([bcfeb91](https://github.com/coder/balatrobot/commit/bcfeb911dcb35fecce1db64403ad55997e919b4c))
13
+ * add ante value to game state ([f7193c4](https://github.com/coder/balatrobot/commit/f7193c4385edf2afb94bb8c63b590358943b3acc))
14
+ * add audio flag to balatrobot (disabled by default) ([9c2db00](https://github.com/coder/balatrobot/commit/9c2db0079f50b7d37c93f473df11453b4db38bc3))
15
+ * add back the test target in Makefile ([ebfbfb5](https://github.com/coder/balatrobot/commit/ebfbfb5dfac75152bd127ba254bc361b321e7d72))
16
+ * add balatro enums ([fc8d6b4](https://github.com/coder/balatrobot/commit/fc8d6b45ce9d945351922cd312d5371f79c5b572))
17
+ * add balatro.py python script ([c0ae64f](https://github.com/coder/balatrobot/commit/c0ae64fb2c95d57c995cfcaadaa8669cb12b7877))
18
+ * add balatro.sh script for running multiple instances ([d66fe98](https://github.com/coder/balatrobot/commit/d66fe9856d05a1540c1c672e827ecbdc9b36baac))
19
+ * add cards argument to use_consumable ([1775952](https://github.com/coder/balatrobot/commit/17759523b97c1b5de91c0542b79282894265c49a))
20
+ * add check and test case for whether a buy_and_use_card target can be used ([dab8f19](https://github.com/coder/balatrobot/commit/dab8f19e7953c47f879eaf5ca6196f0aa2325788))
21
+ * add cli entry point for balatrobot ([394e8c8](https://github.com/coder/balatrobot/commit/394e8c885c12ac0eab8e1e4bae838688fc16d5b6))
22
+ * add gamestate menu and start endpoints to balatrobot loading ([6aebc4a](https://github.com/coder/balatrobot/commit/6aebc4a3e08852c87c9b933b30d09607f930579d))
23
+ * add hook for joker rearrangement ([c9fe966](https://github.com/coder/balatrobot/commit/c9fe966ae23ee0fe76b70f234447ad270d4c457d))
24
+ * add hook for sell_consumable ([e390761](https://github.com/coder/balatrobot/commit/e3907615ae96f553be96699285d598f868c179ee))
25
+ * add hook for use_consumable ([d54042c](https://github.com/coder/balatrobot/commit/d54042c4a7d5e403aab7a920b5ded6e73a8074d2))
26
+ * add new description field to card objects ([0a55df6](https://github.com/coder/balatrobot/commit/0a55df6bd6f5923f397197be729e681ea272a37f))
27
+ * add new skip endpoint to balatrobot.lua ([b02b675](https://github.com/coder/balatrobot/commit/b02b6753798e0d01f025403be2878bbb6560579e))
28
+ * add option to disable shaders with env var BALATROBOT_NO_SHADERS ([6be3497](https://github.com/coder/balatrobot/commit/6be3497bb96c16dccb59829867b306b112dd399b))
29
+ * add rearrange consumeables endpoint ([404de7d](https://github.com/coder/balatrobot/commit/404de7df85156322caa7add619700b63d5197a5e))
30
+ * add rearrange jokers endpoint ([b63c500](https://github.com/coder/balatrobot/commit/b63c500d5c91dd6cfcb55d9cb0aa396fa0f4115e))
31
+ * add RearrangeConsumeablesArgs type ([e7796cc](https://github.com/coder/balatrobot/commit/e7796cc6a13f32806a02438afdebc474dbe7c9a7))
32
+ * add redeem_voucher ([70e8cb0](https://github.com/coder/balatrobot/commit/70e8cb0bf4ab9788e03cccea51031cfa5e23e735))
33
+ * add render on api env var / flag ([b96e623](https://github.com/coder/balatrobot/commit/b96e623bcb8962bbb513ebeddacedbdb05c13c23))
34
+ * add reroll cost < dollars check ([644f667](https://github.com/coder/balatrobot/commit/644f6674bf2247189dd7bc4df5a79667426fbb40))
35
+ * add reroll shop action ([1202866](https://github.com/coder/balatrobot/commit/12028661c86c9e441297dc0728e0acf0fcb33f63))
36
+ * add select endpoint to balatrobot.lua ([0414d33](https://github.com/coder/balatrobot/commit/0414d335b8ba2c6fe2425174750119bcd20e05ab))
37
+ * add sell consumable completion condition ([dcff055](https://github.com/coder/balatrobot/commit/dcff0552734718016b7ce7fe95cd6b09aa3dbe36))
38
+ * add sell consumable endpoint ([c467611](https://github.com/coder/balatrobot/commit/c467611abc0d40f1b2b88390b3bd2b8fe2bc2978))
39
+ * add sell joker completion condition ([e4b3b6e](https://github.com/coder/balatrobot/commit/e4b3b6eb9111d0e2e96b278b818745523cc2ee42))
40
+ * add sell joker endpoint ([183db62](https://github.com/coder/balatrobot/commit/183db629bcb053ba4db5f7a8e510c90a2d95d6a1))
41
+ * add sell joker types ([876a249](https://github.com/coder/balatrobot/commit/876a249c58f1e7399c231d1d424876ae2c994cd7))
42
+ * add sell_joker hook for logging ([44df912](https://github.com/coder/balatrobot/commit/44df9123bc95fffbbdf0e95fe496e5e3825a83f3))
43
+ * add shop_idle() cond for actions that do not depart the shop ([987e965](https://github.com/coder/balatrobot/commit/987e96564548ba64482fe2b2e2aec395696a4b24))
44
+ * add state checking for use consumable with cards parameter ([ec123d6](https://github.com/coder/balatrobot/commit/ec123d6706e9681382e88df68a3b2a9dcf6961aa))
45
+ * add test-migrate target to Makefile ([5c41d17](https://github.com/coder/balatrobot/commit/5c41d170dda7afb9c61e7c1d65a5692b0fcbf180))
46
+ * add types for sell consumable ([b395430](https://github.com/coder/balatrobot/commit/b3954303b31b3276d6a4452404a9e9034f6bd8e1))
47
+ * add use consumable endpoint ([012a957](https://github.com/coder/balatrobot/commit/012a95777f7424e211fd02cae74bc84a4766d7e5))
48
+ * add use_consumable completion condition ([44cdcf7](https://github.com/coder/balatrobot/commit/44cdcf714b28eb17495b8df56856dfb826231885))
49
+ * added tests and gamestate for reroll shop ([4bc1b61](https://github.com/coder/balatrobot/commit/4bc1b619c5dcec02815a46c338f9c57917b7dd41))
50
+ * **api:** add screenshot API endpoint ([165b58c](https://github.com/coder/balatrobot/commit/165b58c92426f5796c4d6327b175cc3c3ee818f4))
51
+ * **api:** improve cards selection ranges in use consumeables ([b9ce462](https://github.com/coder/balatrobot/commit/b9ce46231030d6c58e082bcb9aa58f50b8506a4c))
52
+ * **balatrobot:** add CLI interface and entry points ([429ee26](https://github.com/coder/balatrobot/commit/429ee2697a1b7186f1c87f05231f06060bbe4471))
53
+ * **balatrobot:** add configuration and path utilities ([8fa562a](https://github.com/coder/balatrobot/commit/8fa562ad16cb8b8a9d7021ff6b1a569767c47ffe))
54
+ * **balatrobot:** add HTTP health check utility ([b8fe42c](https://github.com/coder/balatrobot/commit/b8fe42cb288c99ebc1b8fbdc8217a67f2dee88cf))
55
+ * **balatrobot:** add macOS and native platform launchers ([49ed21d](https://github.com/coder/balatrobot/commit/49ed21d2c678e589bddd4f1318a68906dabb5860))
56
+ * **balatrobot:** add multi-instance manager ([57d1dac](https://github.com/coder/balatrobot/commit/57d1dac3dcbfcfd7785997d3665837d9cbb0ab40))
57
+ * **balatrobot:** add platform abstraction layer ([d57b4cd](https://github.com/coder/balatrobot/commit/d57b4cd89f3f2f890b9e881e4ceed6b9ee142a5d))
58
+ * **balatrobot:** refactor balatrobot cli ([0a3390c](https://github.com/coder/balatrobot/commit/0a3390c4e906be82fea867fca85e60877c9484c2))
59
+ * better api errors ([617cbc9](https://github.com/coder/balatrobot/commit/617cbc9aaa40cf1b89aa8cf58ca0304af7dba7bf))
60
+ * checkpoints work ([1e78386](https://github.com/coder/balatrobot/commit/1e78386eea0a36c59339109bb6c92f48b4300016))
61
+ * **client:** add port option to client ([4c7b912](https://github.com/coder/balatrobot/commit/4c7b9123be535e2ddd62a25d857d75fd535d5cc9))
62
+ * **client:** add screenshot method ([0ee8b8c](https://github.com/coder/balatrobot/commit/0ee8b8ce54f163cfe8846263de520c0f75ae5764))
63
+ * **core:** add boolean and table types to validator ([54561d2](https://github.com/coder/balatrobot/commit/54561d293dbf81c4a10fdc0ea89e714797d7f397))
64
+ * created savefile-based checkpointing ([73ab99f](https://github.com/coder/balatrobot/commit/73ab99f2973370ac37b2b70fce5066c0fd64751d))
65
+ * **dev:** add Makefile ([02c569f](https://github.com/coder/balatrobot/commit/02c569f1622be81558b160b9405387eca86b7913))
66
+ * docs and types for checkpointing ([5efff03](https://github.com/coder/balatrobot/commit/5efff03d7741be192cc5154d3218f1b3619379b1))
67
+ * enhance rearrange jokers field in game state ([e72c78e](https://github.com/coder/balatrobot/commit/e72c78e868e7c65fbde925fb3b6dc9a252a4246f))
68
+ * finish buy_and_use_card docs ([c644bab](https://github.com/coder/balatrobot/commit/c644bab9485649939e4714d247e0244c41d63047))
69
+ * **fixtures:** update generate.py to use httpx ([abc2293](https://github.com/coder/balatrobot/commit/abc229312686bfa33905e373fdae398bf00c664d))
70
+ * hook reroll_shop ([0e533ae](https://github.com/coder/balatrobot/commit/0e533ae75ce464435c73e7aa914f4ec689808ac8))
71
+ * improve CLI for replay bot ([077178c](https://github.com/coder/balatrobot/commit/077178cb9af4b06b7e62dfa54bd5194aeddbd0e2))
72
+ * improved graphics settings for screenshots ([86af829](https://github.com/coder/balatrobot/commit/86af82956b261c1d1c6742355e162c8fd4c64125))
73
+ * **log:** hook for rearrange_consumeables ([06f5be7](https://github.com/coder/balatrobot/commit/06f5be75ba1a75fef766ea05a858e4e19f788e9c))
74
+ * **lua.core:** add rpc.discover endpoint to the dispatcher ([fa2f026](https://github.com/coder/balatrobot/commit/fa2f026e1c348c2892791d8d7cb2fe656b194389))
75
+ * **lua.core:** add state name lookup table ([6de65f4](https://github.com/coder/balatrobot/commit/6de65f484de60bf28f3f50d7d5b3469da0d95f17))
76
+ * **lua.core:** move from raw TCP to HTTP server ([584aaf8](https://github.com/coder/balatrobot/commit/584aaf8d5df032bddbcec9588d2bf564d074ca2a))
77
+ * **lua.endpoints:** add `add` endpoint ([d5e5e9c](https://github.com/coder/balatrobot/commit/d5e5e9c1bba3d25653865f60c5e36dc563eafad1))
78
+ * **lua.endpoints:** add `use` endpoint ([48fa0a1](https://github.com/coder/balatrobot/commit/48fa0a11cac2ffd3d212bcc30ae50451dd8e97ac))
79
+ * **lua.endpoints:** add buy endpoint ([3872f44](https://github.com/coder/balatrobot/commit/3872f449ee42f53d9f04345ded4fe6ebeafb03ac))
80
+ * **lua.endpoints:** add cash out endpoint ([c0aeeb5](https://github.com/coder/balatrobot/commit/c0aeeb522c5b3142dd4ebfcfa1175ca7ce88af01))
81
+ * **lua.endpoints:** add discard endpoint ([7e25460](https://github.com/coder/balatrobot/commit/7e25460d3540038a82a5acfc4e090f2ca581cfed))
82
+ * **lua.endpoints:** add gamestate endpoint ([4ceb27c](https://github.com/coder/balatrobot/commit/4ceb27c1dc0a8ce06d7b087ff25b47147fb50929))
83
+ * **lua.endpoints:** add load endpoint ([c3e3d0d](https://github.com/coder/balatrobot/commit/c3e3d0d1ba9d9f731704b8064875e4e30fad3203))
84
+ * **lua.endpoints:** add menu endpoint ([8dba721](https://github.com/coder/balatrobot/commit/8dba7211b92095215825649ed1045c3abc9bd152))
85
+ * **lua.endpoints:** add next_round endpoint ([5ea895d](https://github.com/coder/balatrobot/commit/5ea895daf38af1330624b1227cc51deb819ecf57))
86
+ * **lua.endpoints:** add play endpoint ([72636f4](https://github.com/coder/balatrobot/commit/72636f4ff1286948ddedf59fe7e0d87bcc7bb599))
87
+ * **lua.endpoints:** add rearrange endpoint ([665d5c1](https://github.com/coder/balatrobot/commit/665d5c10dea20b9992ca92624fcc8eae2bb47a1c))
88
+ * **lua.endpoints:** add reroll endpoint ([1fefae7](https://github.com/coder/balatrobot/commit/1fefae7551972790ee738c7fcf919532d1e79a42))
89
+ * **lua.endpoints:** add save endpoint ([1b06580](https://github.com/coder/balatrobot/commit/1b06580fdf2d2f0057e384b2eab31db1ac22c531))
90
+ * **lua.endpoints:** add screenshot endpoint ([017e463](https://github.com/coder/balatrobot/commit/017e4633af98e43ee2983593c99f2217e26f10f2))
91
+ * **lua.endpoints:** add select endpoint ([37e4dec](https://github.com/coder/balatrobot/commit/37e4decacce5eae9798936c5418cced684dfa430))
92
+ * **lua.endpoints:** add sell endpoint ([5595b7e](https://github.com/coder/balatrobot/commit/5595b7eb4517def3a9148d8f3324f87f4e6e4967))
93
+ * **lua.endpoints:** add set endpoint ([8084d63](https://github.com/coder/balatrobot/commit/8084d6371c109f6f7266649207f4a572ce7cb3be))
94
+ * **lua.endpoints:** add skip endpoint ([3a2722e](https://github.com/coder/balatrobot/commit/3a2722e5d5e344b2370c394b24ac9167438967a4))
95
+ * **lua.endpoints:** add start endpoint ([f8fdd97](https://github.com/coder/balatrobot/commit/f8fdd9710a9a10371393621667224ff441393908))
96
+ * **lua.endpoints:** add support for modifiers in the `add` endpoint ([01eff36](https://github.com/coder/balatrobot/commit/01eff369e6f2bcab900dd54a17a9f43c168873cd))
97
+ * **lua.endpoints:** add types for args for various endpoints ([d7bb418](https://github.com/coder/balatrobot/commit/d7bb418374a4db41ef4f7ff4a2c119f9f8787866))
98
+ * **lua.utils:** add BB_API global namespace for calling endpoints via /eval ([abbec83](https://github.com/coder/balatrobot/commit/abbec8375086fa6e6fdcc6b15983542c365db750))
99
+ * **lua.utils:** add booster packs to gamestate ([9a7a8d3](https://github.com/coder/balatrobot/commit/9a7a8d31bce5039140afe356e77757110dc11b95))
100
+ * **lua.utils:** add CardKey schema to openrpc.json ([89cbda9](https://github.com/coder/balatrobot/commit/89cbda9a7fbebe353f3ff2ce24503e22203416d1))
101
+ * **lua.utils:** add descriptions to openrpc.json enums ([78812f7](https://github.com/coder/balatrobot/commit/78812f710c5d9c88fe63b7e6fccfbc94e5f53742))
102
+ * **lua.utils:** add gamestate.check_game_over() ([19a0a51](https://github.com/coder/balatrobot/commit/19a0a515d3096d6352b85e129dcfb3f61591d9dd))
103
+ * **lua.utils:** add gamestate.lua to utils ([c13f56e](https://github.com/coder/balatrobot/commit/c13f56e6716c12028f0c0d2d67b2db548bab57f5))
104
+ * **lua.utils:** add openrpc.json schema ([fecb299](https://github.com/coder/balatrobot/commit/fecb299b4652711198868758db8638e55248d322))
105
+ * **lua.utils:** add pack field to gamestate ([4283eb5](https://github.com/coder/balatrobot/commit/4283eb5cc870e7e57bc47e18af26e6c69edee615))
106
+ * **lua.utils:** add request/response types ([a930c90](https://github.com/coder/balatrobot/commit/a930c904b421215f1a830e09ece32604f1c62ca2))
107
+ * **lua.utils:** add SCHEMA_INVALID_VALUE error ([c52b2e6](https://github.com/coder/balatrobot/commit/c52b2e639a1a5d3ea5dbcf32746fafd0770b7c61))
108
+ * **lua.utils:** add screenshot endpoint types ([3264152](https://github.com/coder/balatrobot/commit/3264152d417f16397a278101e0a240b3777a842a))
109
+ * **lua.utils:** add types for gamestate and endpoint ([9b9283c](https://github.com/coder/balatrobot/commit/9b9283c6a0cd164d3ed9ce70e7c96352facb6fe2))
110
+ * **lua.utils:** improve enums in gamestate ([3c1195a](https://github.com/coder/balatrobot/commit/3c1195a4aa8ec594bc3657ac640a7872353b509c))
111
+ * **lua.utils:** improve response and request types ([9296b01](https://github.com/coder/balatrobot/commit/9296b01a6ed0ed66bf880e9310b41d4066a65aa1))
112
+ * **lua.utils:** move enums to enums.lua and add Card.Key enums ([d477d66](https://github.com/coder/balatrobot/commit/d477d66eb1dc6e73c9a254ca81a67c61cd81af4c))
113
+ * **lua.utils:** new simplify error codes ([e7db3f5](https://github.com/coder/balatrobot/commit/e7db3f593f6a91c4ad4e01d503ddda0c1171141e))
114
+ * **lua.utils:** update types with new dispatcher and server fields ([39d6f5c](https://github.com/coder/balatrobot/commit/39d6f5ce9446c66abbcd062219262f6bc8595556))
115
+ * **lua:** add BalatroBot settings ([4f73a0e](https://github.com/coder/balatrobot/commit/4f73a0e81426978af07e858aecf6f1f699144c39))
116
+ * **lua:** add close previous client socket on new connection ([3684285](https://github.com/coder/balatrobot/commit/36842850f21ad4d8ac22dc1c124ab20606dac8c8))
117
+ * **lua:** add debugger utils ([6308827](https://github.com/coder/balatrobot/commit/63088272b0687aa726d80c0f5e0f5fce8f2adfc6))
118
+ * **lua:** add dispatcher module ([a20359d](https://github.com/coder/balatrobot/commit/a20359d2bc53d6d127c6e2504c87ff4c40fe60ad))
119
+ * **lua:** add error codes utils ([58bf3fb](https://github.com/coder/balatrobot/commit/58bf3fbe083266aa8770447929aa430515193e7d))
120
+ * **lua:** add errors for load and save ([b784ffe](https://github.com/coder/balatrobot/commit/b784ffe98978450b951777276b6deba08caab2c0))
121
+ * **lua:** add health endpoint ([0ec3b0c](https://github.com/coder/balatrobot/commit/0ec3b0ceb0e8d91f203779f5a40e7a6cebc4605f))
122
+ * **lua:** add load and save endpoints ([e9ba224](https://github.com/coder/balatrobot/commit/e9ba224ba69001f7610dfd7fe667e6192c22f1e1))
123
+ * **lua:** add server module ([09e7b52](https://github.com/coder/balatrobot/commit/09e7b522814e42d5fe87ece8fd3e501b4d2070e5))
124
+ * **lua:** add test endpoints ([c05f444](https://github.com/coder/balatrobot/commit/c05f444ff18072b552fe75f1aba1998a748ffecd))
125
+ * **lua:** add validator module ([430b436](https://github.com/coder/balatrobot/commit/430b43628d518caf025e448df7215e9a2cde0b59))
126
+ * make host configurable via env var ([0fc9b9b](https://github.com/coder/balatrobot/commit/0fc9b9b476f93bb65cdf1669d735bb5fbb3d099f))
127
+ * markdown format ([f361c9c](https://github.com/coder/balatrobot/commit/f361c9c308002fb3c48a6eac780da8bb6b7f405e))
128
+ * move checkpoint binaries to git lfs ([5b3c513](https://github.com/coder/balatrobot/commit/5b3c5134417841c500c0fab9006ba62fb63fce22))
129
+ * prototyping checkpoint system ([7bdf5e2](https://github.com/coder/balatrobot/commit/7bdf5e26667e70d3f0c5e404b31f49c0b9f65a79))
130
+ * redeem voucher docs ([8e894e0](https://github.com/coder/balatrobot/commit/8e894e0d120e9b2d135c75e4d6345bd9038b39f4))
131
+ * reroll shop types ([40a9e33](https://github.com/coder/balatrobot/commit/40a9e337dc9698a7a25653b86d5893d7ce3c8ce5))
132
+ * reroll_shop docs ([845799c](https://github.com/coder/balatrobot/commit/845799c77ba662a87f61fa37ca3d52523addcbd7))
133
+ * revert bloom string ([b366f15](https://github.com/coder/balatrobot/commit/b366f15fff7ce8220962cf19ef2548ecf179a924))
134
+ * **scripts:** add Balatro launchers for Linux, macOS, and Windows ([fd5dcef](https://github.com/coder/balatrobot/commit/fd5dcef3b99e8de919086ed4de64e2d1b738e946))
135
+ * shop condition based on timing ([b713204](https://github.com/coder/balatrobot/commit/b713204bc6fd54a65642af5f43bf05b80f25f96d))
136
+ * stylua ([8bbc51a](https://github.com/coder/balatrobot/commit/8bbc51a39b7309892d10051c9d86c5d65fa52ecf))
137
+ * tests for checkpointign ([9c04ff6](https://github.com/coder/balatrobot/commit/9c04ff6ae6e305e7f1fb65af9aaf0f0139bb2393))
138
+ * tests for redeem_voucher ([5982d82](https://github.com/coder/balatrobot/commit/5982d828e4509db2bc2797843374fb223beab1cb))
139
+ * track test checkpoints with git lfs ([0ecbb43](https://github.com/coder/balatrobot/commit/0ecbb43f54a9e325403c19458efdbc7bc19c5b36))
140
+ * update balatrobot.lua ([b90d772](https://github.com/coder/balatrobot/commit/b90d77286f382e8d99f46c0a01caf4d7f6c60e00))
141
+ * update game state with consumeables ([2fb2cbc](https://github.com/coder/balatrobot/commit/2fb2cbc1d46ea5b9a6cd08093f95df97e1aa768d))
142
+ * update to v1.0.0 ([0fa8bf7](https://github.com/coder/balatrobot/commit/0fa8bf74b8c9b929191f2ddce4a3724d5b4152c7))
143
+ * updated types for redeem_voucher ([9fe3e67](https://github.com/coder/balatrobot/commit/9fe3e672965eb78686978bd6c0d3cb51099dc968))
144
+ * use balatro launcher script based on OS in Makefile ([c50fd03](https://github.com/coder/balatrobot/commit/c50fd03020e1afd09e482c266bf076721a98df4c))
145
+ * using checkpoints in test_shop ([4c52efc](https://github.com/coder/balatrobot/commit/4c52efc45ba3f1ed42cc802de6ca6530beb70910))
146
+ * **utils.gamestate:** fix rank and suit and add key field to Card ([7d04404](https://github.com/coder/balatrobot/commit/7d0440497698c180dbbfa6384f04ea21d9d19a61))
147
+ * WIP save file manipulation ([8cbae31](https://github.com/coder/balatrobot/commit/8cbae31cd66bcb7e8864a1adeb337b0784cbd8b5))
148
+
149
+
150
+ ### Bug Fixes
151
+
152
+ * add --debug flag to balatro.py ([c40670b](https://github.com/coder/balatrobot/commit/c40670b1cc0c62e37f7d3aed0bf939b48697c501))
153
+ * add GAME_OVER check to love.update ([3919fa3](https://github.com/coder/balatrobot/commit/3919fa366f0023ad8bcfd3bc85bbe7861483bc6c))
154
+ * add missing set fields in game state ([ee92ac0](https://github.com/coder/balatrobot/commit/ee92ac0a0596c1764e113693f8eff48138dd1f23))
155
+ * add timeout to socket.recv ([12d086a](https://github.com/coder/balatrobot/commit/12d086a80294f08fe449012c2a3a27708d7aada0))
156
+ * adjust balatro settings ([866d201](https://github.com/coder/balatrobot/commit/866d201e2d2d6ca5e3c2522072c9a4f415bae6d9))
157
+ * **api:** clear hand highlights before selecting new cards ([9efb351](https://github.com/coder/balatrobot/commit/9efb35181be306234c34a6f3f2da3c2308356c5e))
158
+ * **balatrbot.platforms:** add NotImplementedError for Linux and Windows ([7e3d666](https://github.com/coder/balatrobot/commit/7e3d666c68549f8a9ae12e0e710ab1d55b6fae8b))
159
+ * **balatrobot:** increase timeout for health check ([64511d7](https://github.com/coder/balatrobot/commit/64511d79e31788e89a4220ab42552b63dc278fe8))
160
+ * **balatrobot:** remove unused paths ([1007aee](https://github.com/coder/balatrobot/commit/1007aee20c662b2bf3bc289a8c9cbf8aa6078d3a))
161
+ * buy card hook ([#68](https://github.com/coder/balatrobot/issues/68)) ([6412506](https://github.com/coder/balatrobot/commit/64125065c1ff4c6fe1993a09d8ff4448a6b32f25))
162
+ * effect for c_eris ([fd564ce](https://github.com/coder/balatrobot/commit/fd564cec6e98cbff11d0bd7499773a87535ce676))
163
+ * fast profile for balatro ([ac4eaa5](https://github.com/coder/balatrobot/commit/ac4eaa5f3b27fd9442e400e96a712bcbed36ccfb)), closes [#83](https://github.com/coder/balatrobot/issues/83)
164
+ * **fixtures:** add $schema to fixtures schema ([db1f2d6](https://github.com/coder/balatrobot/commit/db1f2d635bf41f5dce79ee385d7d160f5b76dee2))
165
+ * increase TCP socket timeout from 60s to 300s ([de3ba54](https://github.com/coder/balatrobot/commit/de3ba54656e1a378cb7e93dc1a6798e0eb946ed6))
166
+ * increase timeout for balatrobot client to 60 seconds ([edf26e2](https://github.com/coder/balatrobot/commit/edf26e29c845a12de65f1fab2ce117643000edd6))
167
+ * kill processes on a specific port in balatro.py ([b21058a](https://github.com/coder/balatrobot/commit/b21058ad02769c189b4afc7ae0332f5d093fe09e))
168
+ * long messages limit in luasocket ([7d6168b](https://github.com/coder/balatrobot/commit/7d6168ba9895246580aed5c6587657388c4289a0))
169
+ * **lua.core:** close server on error ([030ff7c](https://github.com/coder/balatrobot/commit/030ff7c06e9f5ffa9bf5e70208ff880e823c8af7))
170
+ * **lua.core:** trigger render on api using BB_RENDER variable ([78b1285](https://github.com/coder/balatrobot/commit/78b1285492ceb58da2ae351b2c84eba568b7aab9))
171
+ * **lua.endpoint:** properly wait for SHOP state ([eb1c924](https://github.com/coder/balatrobot/commit/eb1c9248bfa2abe650343109b48050d87d32064a))
172
+ * **lua.endpoints:** account for Credit Card joker via bankrupt_at ([2132dee](https://github.com/coder/balatrobot/commit/2132dee65d7f86e425947cfda0bbecf1b596268f))
173
+ * **lua.endpoints:** add check state loading for load endpoint ([af50437](https://github.com/coder/balatrobot/commit/af50437a2f02bff0f69312e8cf03f15d2368a0cd))
174
+ * **lua.endpoints:** add return after error in skip endpoint ([96e4e44](https://github.com/coder/balatrobot/commit/96e4e442d94e4feeea83cce65ae7ec81977fd220))
175
+ * **lua.endpoints:** fix start endpoint check condition ([95d230c](https://github.com/coder/balatrobot/commit/95d230c309f0ff68cf911dea0624b4337a5716f6))
176
+ * **lua.endpoints:** fix test for `add` params validation types ([89c71db](https://github.com/coder/balatrobot/commit/89c71dbb7bba62100ece796007463ed2b7304635))
177
+ * **lua.endpoints:** fix type annotation for skip endpoint ([da89ca8](https://github.com/coder/balatrobot/commit/da89ca8f32f97db7624f1a1a3746bd1988cdca7f))
178
+ * **lua.endpoints:** improve wait condition for `play` endpoint ([3b905be](https://github.com/coder/balatrobot/commit/3b905be484208f62a9b24e86e54f6be6b5af8eac))
179
+ * **lua.endpoints:** properly check that the items in shop loaded ([67f5808](https://github.com/coder/balatrobot/commit/67f58085017789118f5af48ef312829f7a874417))
180
+ * **lua.endpoints:** properly wait for ROUND_EVAL and SHOP states in load ([19f3a21](https://github.com/coder/balatrobot/commit/19f3a211547fef9a66700f9bf65a0e7bf2f2bf8c))
181
+ * **lua.endpoints:** properly wait for ROUND_EVAL state ([f2184e7](https://github.com/coder/balatrobot/commit/f2184e7bffb0fb837d25bc47fe8faeef9a7aa43f))
182
+ * **lua.endpoints:** remove card count condition from `use` endpoint ([8dc5fed](https://github.com/coder/balatrobot/commit/8dc5fed8f69424e1c5fdb4b5a8df827817d3fd6f))
183
+ * **lua.endpoints:** remove no_delete flag from events for which it is not needed ([f5f9340](https://github.com/coder/balatrobot/commit/f5f934052f44f26c51b01b82326270c4240a1415))
184
+ * **lua.endpoints:** short circuit load if controller is locked or state is not complete ([d30a991](https://github.com/coder/balatrobot/commit/d30a991a02ecd51d3d6f1e26127175d950a7ca1f))
185
+ * **lua.endpoints:** skip materialize and check CONTROLLER state in `add` endpoint ([82c1003](https://github.com/coder/balatrobot/commit/82c100303a1d6622abb0b7f761c75f19570d0c91))
186
+ * **lua.endpoints:** suppress "Card area not instantiated" warnings during load ([4ff9c59](https://github.com/coder/balatrobot/commit/4ff9c59756f67989101448f561d9e265a503f023))
187
+ * **lua.endpoints:** use of area.config.card_count which is more reliable ([98bd561](https://github.com/coder/balatrobot/commit/98bd5613cad77cc2f12ab93157cb29e8c055d0c5))
188
+ * **lua.endpoints:** use port in temp file name in save and load endpoints ([cec88fe](https://github.com/coder/balatrobot/commit/cec88fe3f2a84fec1c8dbfdfc78adbfd20adbe86))
189
+ * **lua.endpoints:** wait for blind_select to properly finish ([43ad5e1](https://github.com/coder/balatrobot/commit/43ad5e17915668177d955dc2923acf4ce84752de))
190
+ * **lua.utils:** remove " Card" suffix from enhancement in gamestate ([766d90c](https://github.com/coder/balatrobot/commit/766d90c07f2fdb729493242d8348d7f593199dcd))
191
+ * **lua.utils:** set the proper type for requires_state (`integer[]?`) ([5e494b1](https://github.com/coder/balatrobot/commit/5e494b1e6eef432d9d4fd5b1605526cb1e1fe04f))
192
+ * **lua.utils:** use BB.DEBUGGER as prefix for debug messages in debugger.lua ([149cdcd](https://github.com/coder/balatrobot/commit/149cdcda9f2c050a3079e6f9db1050643dfcd765))
193
+ * **lua.utils:** use Card.Value.Rank|Suit instead Rank|Suit ([8174168](https://github.com/coder/balatrobot/commit/817416813e4923bbb435c6b26fa4fcb58918f158))
194
+ * **lua:** add missing test endpoint ([557fab1](https://github.com/coder/balatrobot/commit/557fab14edcea094f64a8b8fa0643f819db13cf5))
195
+ * **lua:** fix headless mode ([2fa55be](https://github.com/coder/balatrobot/commit/2fa55be55033f799f996035d51a2ebf41ff81d1f))
196
+ * make use of shutil.move instead of os.rename ([c908326](https://github.com/coder/balatrobot/commit/c908326adf45671ce4f7c368473a0da6a12b2813))
197
+ * prevent memory leaks generating UI descriptions ([e8d62e1](https://github.com/coder/balatrobot/commit/e8d62e1146fd156e44b1af4d124270bbda5b2c16))
198
+ * remove resize from screenshot ([83876d7](https://github.com/coder/balatrobot/commit/83876d70018098c0368f4388360ef9ac0228cb5c))
199
+ * remove unused out of place test ([163e4a8](https://github.com/coder/balatrobot/commit/163e4a8149a55b63f22da8193872f301a1147676))
200
+ * revert shop() -> cash_out() ([a2555a4](https://github.com/coder/balatrobot/commit/a2555a420284dfffced4c47c22d562fc2ac50f8a))
201
+ * **scripts:** wait for port to be ready in launcher scripts ([57508e7](https://github.com/coder/balatrobot/commit/57508e7f880a8c04beddbc8c65fd11939c2a6f2f))
202
+ * shop check ([c77c52b](https://github.com/coder/balatrobot/commit/c77c52ba84310595ac7c7106f873314ed9eb64a0))
203
+ * skip tutorial ([190ae71](https://github.com/coder/balatrobot/commit/190ae714c879baefbbf91fa9292ebd41e91a89b6))
204
+ * spelling for `debuf` to `debuff` ([e18ebfe](https://github.com/coder/balatrobot/commit/e18ebfe021611c3a381b75c1c99033552458cc7f))
205
+ * tmp fix for 8k luasocket buffer size ([#103](https://github.com/coder/balatrobot/issues/103)) ([d6f6cde](https://github.com/coder/balatrobot/commit/d6f6cdee29a2eaf861bee870947a225454b60cfc))
206
+ * typo in field in game state ([3f111b2](https://github.com/coder/balatrobot/commit/3f111b283a2578412b34a4e36b19201107e0bd0d))
207
+ * update `debuff` name in game state ([d2a4769](https://github.com/coder/balatrobot/commit/d2a4769299d442d9ce2ad362cf50187f0ac17601))
208
+ * update makefile to use new --ports option ([3c76367](https://github.com/coder/balatrobot/commit/3c763676faf45c1e51c86c7e8e8ef2bc14ea47e3))
209
+ * update makefile to use the correct path for basedpyright ([e02ae34](https://github.com/coder/balatrobot/commit/e02ae34f023846a2a5cfa69373ae1068a544ffce))
210
+ * use comma-separated list of ports ([42a566a](https://github.com/coder/balatrobot/commit/42a566a85bf119c5657e89de0fca73d194aad62b))
211
+ * **utils:** add won field to gamestate ([b80af60](https://github.com/coder/balatrobot/commit/b80af606157b9851d9b26b6a5fffe0a4a48e264a))
212
+ * **utils:** improve gamestate get_blinds_info and make it public ([5e4d071](https://github.com/coder/balatrobot/commit/5e4d07196ba78f2d839aa85ec36ff4e0de126c4b))
213
+ * **utils:** improve gamestate get_blinds_info and make it public ([5e4d071](https://github.com/coder/balatrobot/commit/5e4d07196ba78f2d839aa85ec36ff4e0de126c4b))
214
+ * validate that index is an integer ([e9ccc62](https://github.com/coder/balatrobot/commit/e9ccc62466eb1cc5b5c557051a11b5c5d6bdbc25))
215
+
216
+
217
+ ### Performance Improvements
218
+
219
+ * **lua.endpoints:** go back to menu only if not already in menu ([bc34e13](https://github.com/coder/balatrobot/commit/bc34e13a08197c76669f9148a4ddd600def45796))
220
+
221
+
222
+ ### Documentation
223
+
224
+ * add assets for balatrobot, balatrollm, and balatrobench ([d80fba1](https://github.com/coder/balatrobot/commit/d80fba1a58a6642c9ef0c13e1ce30774bc6df811))
225
+ * add audio option to docs for contributing ([045bcf7](https://github.com/coder/balatrobot/commit/045bcf71bae2f9a12ab483c6dc00ebb680f79120))
226
+ * add badges to readme ([fdfdb7d](https://github.com/coder/balatrobot/commit/fdfdb7d003474658d5fe5aa23e442d9671531567))
227
+ * add cli reference ([266b51d](https://github.com/coder/balatrobot/commit/266b51d6d2404fe25679e369ca13835b7def6d2a))
228
+ * add cli reference to mkdocs config ([8cba067](https://github.com/coder/balatrobot/commit/8cba06771c6e2f2e08d4a448119d938014675522))
229
+ * add docs/api.md ([5fd345c](https://github.com/coder/balatrobot/commit/5fd345c1b62a38485df8bbe275a6875ec1616283))
230
+ * add MIT license ([6ee693c](https://github.com/coder/balatrobot/commit/6ee693c5d2ae703e712a9e4b9cf38edd8a6202c7))
231
+ * add pypi badge ([accb2df](https://github.com/coder/balatrobot/commit/accb2df7ee98c540170328aa51e30a96bb33d010))
232
+ * add python syntax highlighting ([abe7cf4](https://github.com/coder/balatrobot/commit/abe7cf4c853d8afdf34d269570124e047914680f))
233
+ * add rearrange consumables to protocol api ([d1ec66f](https://github.com/coder/balatrobot/commit/d1ec66f3d274f330336eeef565a24a2ca9854909))
234
+ * add related projects and v1 warning ([7be30b4](https://github.com/coder/balatrobot/commit/7be30b43de63c608dbc6ed535b2a7b47d64328d0))
235
+ * add sell consumable endpoint to protocol-api.md ([209b0d8](https://github.com/coder/balatrobot/commit/209b0d8c4519090d1a1bfdc4db580c372f0cebc4))
236
+ * add sell joker to protocol-api.md ([ce99b11](https://github.com/coder/balatrobot/commit/ce99b11f7b7ac8c82158d496133ece055f6d1a8c))
237
+ * add stirby to contributors in balatrobot.json ([3187e0a](https://github.com/coder/balatrobot/commit/3187e0ae73b89246d28d7bbf1b1dd6faa0b26f59))
238
+ * add use_consumable to protocol-api.md ([20915c7](https://github.com/coder/balatrobot/commit/20915c76ee152cccf059810ad4f78a5125b5dbaa))
239
+ * **cli:** add hyprland config tip ([f848dff](https://github.com/coder/balatrobot/commit/f848dffa24c4da3391644618acab80191f070213))
240
+ * **cli:** remove --parallel option ([b870437](https://github.com/coder/balatrobot/commit/b870437c429f1e65d69e7aea281a202cc1967658))
241
+ * **contributing:** add note about running tests separately ([684dbcc](https://github.com/coder/balatrobot/commit/684dbcc79e6284e84a49adacd9d25edb284a9d28))
242
+ * **contributing:** add windows/linux (proton) support ([e9807ad](https://github.com/coder/balatrobot/commit/e9807ad5ea2201614b7607426528dbf7a38df932))
243
+ * fix english grammar ([d14d9b2](https://github.com/coder/balatrobot/commit/d14d9b2d10cc7c3a1866f9900f2d419b8b2eebd4))
244
+ * fix formatting for contributing.md ([987de25](https://github.com/coder/balatrobot/commit/987de257d3013398ee6967ac03850db7aaec2ae5))
245
+ * fix minor english issues ([369372c](https://github.com/coder/balatrobot/commit/369372c59fbd9c3a0c014cb4e7e9bf1707566188))
246
+ * **installation:** add version requirements ([b567359](https://github.com/coder/balatrobot/commit/b567359d48e2e114a02ca4023a36cf69650ec6c9))
247
+ * **lua.utils:** add missing descriptions to enums ([21f47c9](https://github.com/coder/balatrobot/commit/21f47c9fcbe419d93921fec357d3c32ec275e844))
248
+ * **lua.utils:** be more explicit about supported modifiers ([ffefcd2](https://github.com/coder/balatrobot/commit/ffefcd23eda828784b8b0974807d26d6ace96f5b))
249
+ * **lua.utils:** document error name conversion ([98a72fa](https://github.com/coder/balatrobot/commit/98a72fabeb440cb74ee9e2a41de4242f6eecc757))
250
+ * minor section rename in index.md ([1bf0cc7](https://github.com/coder/balatrobot/commit/1bf0cc7d86174a6fa4bf0d9c89b00253622c8738))
251
+ * remove pre-1.0 notice ([4c232d0](https://github.com/coder/balatrobot/commit/4c232d01568b311860aba5b619ec5cbc4b2303df))
252
+ * setup favicon and logo for the docs ([c086549](https://github.com/coder/balatrobot/commit/c08654999632973a013aa64a78f6936bbb3d08bf))
253
+ * simplify the contributing guide ([b3a729b](https://github.com/coder/balatrobot/commit/b3a729bdad7200e58089ee146ed6f94c2fb22c46))
254
+ * update badges in readme ([1353177](https://github.com/coder/balatrobot/commit/1353177c0926e652fefb049ba275edcab963a561))
255
+ * update CLAUDE.md with new files and tests structure ([72c6026](https://github.com/coder/balatrobot/commit/72c602653523136e87b05414dacc0fa0afe7e959))
256
+ * update CLAUDE.md with new make commands ([0f6c1e6](https://github.com/coder/balatrobot/commit/0f6c1e65bfce47d79d6d9c4dc4a10b1e01e59afc))
257
+ * update contributing.md with new instructions for running tests in parallel ([44306dd](https://github.com/coder/balatrobot/commit/44306dd2ef41ba460eece0f5eed325b795f61a3f))
258
+ * update docs for new BalatroBot API ([d80b9ba](https://github.com/coder/balatrobot/commit/d80b9ba3cc1d50ece6f03c80ae2e74154eb64436))
259
+ * update installation guide with new launcher scripts ([2b3eea4](https://github.com/coder/balatrobot/commit/2b3eea499bd6c07e7bbc4d5095cb5b087d35fa18))
260
+ * update links the from S1M0N38 to coder ([7b77fae](https://github.com/coder/balatrobot/commit/7b77faebf00030e6c4390062a89f5cd8f04f58fc))
261
+ * update the overview in README.md and update the main image ([e471cf0](https://github.com/coder/balatrobot/commit/e471cf0d6ce65b311143143b418a16cc2ba73fd1))
262
+ * update warning banner with new CLI ([bb3b346](https://github.com/coder/balatrobot/commit/bb3b3461b52fe17123fed339285a9a57312a5a08))
263
+
264
+
265
+ ### Miscellaneous Chores
266
+
267
+ * force 1.0.0 release ([a887d1c](https://github.com/coder/balatrobot/commit/a887d1c516756856bff4ff61b628266495086605))
268
+
269
+ ## [0.7.5](https://github.com/coder/balatrobot/compare/v0.7.4...v0.7.5) (2025-10-30)
270
+
271
+
272
+ ### Bug Fixes
273
+
274
+ * prevent memory leaks generating UI descriptions ([e8d62e1](https://github.com/coder/balatrobot/commit/e8d62e1146fd156e44b1af4d124270bbda5b2c16))
275
+
276
+ ## [0.7.4](https://github.com/coder/balatrobot/compare/v0.7.3...v0.7.4) (2025-10-28)
277
+
278
+
279
+ ### Bug Fixes
280
+
281
+ * add timeout to socket.recv ([12d086a](https://github.com/coder/balatrobot/commit/12d086a80294f08fe449012c2a3a27708d7aada0))
282
+
283
+ ## [0.7.3](https://github.com/coder/balatrobot/compare/v0.7.2...v0.7.3) (2025-10-25)
284
+
285
+
286
+ ### Bug Fixes
287
+
288
+ * use comma-separated list of ports ([42a566a](https://github.com/coder/balatrobot/commit/42a566a85bf119c5657e89de0fca73d194aad62b))
289
+
290
+ ## [0.7.2](https://github.com/coder/balatrobot/compare/v0.7.1...v0.7.2) (2025-10-24)
291
+
292
+
293
+ ### Bug Fixes
294
+
295
+ * increase TCP socket timeout from 60s to 300s ([de3ba54](https://github.com/coder/balatrobot/commit/de3ba54656e1a378cb7e93dc1a6798e0eb946ed6))
296
+
297
+ ## [0.7.1](https://github.com/coder/balatrobot/compare/v0.7.0...v0.7.1) (2025-10-23)
298
+
299
+
300
+ ### Bug Fixes
301
+
302
+ * remove resize from screenshot ([83876d7](https://github.com/coder/balatrobot/commit/83876d70018098c0368f4388360ef9ac0228cb5c))
303
+
304
+
305
+ ### Documentation
306
+
307
+ * add pypi badge ([accb2df](https://github.com/coder/balatrobot/commit/accb2df7ee98c540170328aa51e30a96bb33d010))
308
+
309
+ ## [0.7.0](https://github.com/coder/balatrobot/compare/v0.6.1...v0.7.0) (2025-10-23)
310
+
311
+
312
+ ### Features
313
+
314
+ * add new description field to card objects ([0a55df6](https://github.com/coder/balatrobot/commit/0a55df6bd6f5923f397197be729e681ea272a37f))
315
+
316
+
317
+ ### Bug Fixes
318
+
319
+ * typo in field in game state ([3f111b2](https://github.com/coder/balatrobot/commit/3f111b283a2578412b34a4e36b19201107e0bd0d))
320
+
3
321
  ## [0.6.1](https://github.com/coder/balatrobot/compare/v0.6.0...v0.6.1) (2025-10-23)
4
322
 
5
323