claude-opencode-sessions 0.1.0__tar.gz → 0.1.2__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 (34) hide show
  1. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/PKG-INFO +63 -76
  2. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/README.rst +58 -71
  3. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/pyproject.toml +5 -5
  4. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/.gitignore +0 -0
  5. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/CHANGELOG.rst +0 -0
  6. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/LICENSE +0 -0
  7. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/__init__.py +0 -0
  8. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/__main__.py +0 -0
  9. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/cli.py +0 -0
  10. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/cli_backend.py +0 -0
  11. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/errors.py +0 -0
  12. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/import_command.py +0 -0
  13. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/importer.py +0 -0
  14. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/locate.py +0 -0
  15. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/models.py +0 -0
  16. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/parse.py +0 -0
  17. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/py.typed +0 -0
  18. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/render.py +0 -0
  19. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/scope.py +0 -0
  20. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/service.py +0 -0
  21. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/sqlite_backend.py +0 -0
  22. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/__init__.py +0 -0
  23. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/conftest.py +0 -0
  24. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/fixtures/schema_1x.sql +0 -0
  25. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/fixtures/schema_2x.sql +0 -0
  26. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_cli.py +0 -0
  27. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_cli_backend.py +0 -0
  28. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_importer.py +0 -0
  29. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_launcher.py +0 -0
  30. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_locate.py +0 -0
  31. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_parse.py +0 -0
  32. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_render.py +0 -0
  33. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_scope.py +0 -0
  34. {claude_opencode_sessions-0.1.0 → claude_opencode_sessions-0.1.2}/src/claude_opencode_sessions/tests/test_sqlite_backend.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: claude-opencode-sessions
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Import your opencode sessions for the current repository into Claude Code, so they open with /resume.
5
- Project-URL: Homepage, https://github.com/barseghyanartur/claude-plugin-opencode-sessions
6
- Project-URL: Repository, https://github.com/barseghyanartur/claude-plugin-opencode-sessions
7
- Project-URL: Issues, https://github.com/barseghyanartur/claude-plugin-opencode-sessions/issues
8
- Project-URL: Changelog, https://github.com/barseghyanartur/claude-plugin-opencode-sessions/blob/main/CHANGELOG.rst
5
+ Project-URL: Homepage, https://github.com/barseghyanartur/claude-opencode-sessions
6
+ Project-URL: Repository, https://github.com/barseghyanartur/claude-opencode-sessions
7
+ Project-URL: Issues, https://github.com/barseghyanartur/claude-opencode-sessions/issues
8
+ Project-URL: Changelog, https://github.com/barseghyanartur/claude-opencode-sessions/blob/main/CHANGELOG.rst
9
9
  Author-email: Artur Barseghyan <artur.barseghyan@gmail.com>
10
10
  License-Expression: MIT
11
11
  License-File: LICENSE
@@ -30,13 +30,44 @@ Description-Content-Type: text/x-rst
30
30
  ========================
31
31
  claude-opencode-sessions
32
32
  ========================
33
- Bring your `opencode <https://opencode.ai>`_ sessions into **Claude Code**.
33
+ .. External references
34
34
 
35
- In Claude Code, run ``/opencode-sessions:import``. Your opencode sessions for
36
- the current repository become regular Claude Code conversations, titled
37
- ``[opencode] …``. Then use ``/resume`` (or ``claude --resume``) to browse
38
- them, and press Enter to continue one.
35
+ .. _opencode: https://opencode.ai
36
+ .. _Claude Code: https://code.claude.com
37
+ .. _uv: https://docs.astral.sh/uv/
39
38
 
39
+ .. Internal references
40
+
41
+ .. _claude-opencode-sessions: https://github.com/barseghyanartur/claude-opencode-sessions/
42
+ .. _docs/design.md: https://github.com/barseghyanartur/claude-opencode-sessions/blob/main/docs/design.md
43
+ .. _docs/schema-notes.md: https://github.com/barseghyanartur/claude-opencode-sessions/blob/main/docs/schema-notes.md
44
+
45
+ Bring your `opencode`_ sessions into `Claude Code`_.
46
+
47
+ .. image:: https://img.shields.io/pypi/v/claude-opencode-sessions.svg
48
+ :target: https://pypi.python.org/pypi/claude-opencode-sessions
49
+ :alt: PyPI Version
50
+
51
+ .. image:: https://img.shields.io/pypi/pyversions/claude-opencode-sessions.svg
52
+ :target: https://pypi.python.org/pypi/claude-opencode-sessions/
53
+ :alt: Supported Python versions
54
+
55
+ .. image:: https://github.com/barseghyanartur/claude-opencode-sessions/actions/workflows/ci.yml/badge.svg?branch=main
56
+ :target: https://github.com/barseghyanartur/claude-opencode-sessions/actions
57
+ :alt: Build Status
58
+
59
+ .. image:: https://img.shields.io/badge/license-MIT-blue.svg
60
+ :target: https://github.com/barseghyanartur/claude-opencode-sessions/#License
61
+ :alt: MIT
62
+
63
+ `claude-opencode-sessions`_ is a Claude Code plugin (and a command-line
64
+ tool) that imports your opencode sessions for the current repository into
65
+ Claude Code. Run ``/opencode-sessions:import``, then use ``/resume`` (or
66
+ ``claude --resume``) to browse the imported ``[opencode] …`` conversations
67
+ and press Enter to continue one.
68
+
69
+ Features
70
+ ========
40
71
  - **No model call, no tokens.** The import runs in a Claude Code hook and
41
72
  prints its report directly. Tokens are only spent once you resume a session
42
73
  and start typing, just like any other conversation.
@@ -48,28 +79,26 @@ them, and press Enter to continue one.
48
79
  worktree by default, or ``--worktrees`` for all worktrees of the repo.
49
80
  - Reads opencode's SQLite database **read-only**: opencode 1.2+ (1.x and 2.x
50
81
  layouts), with ``opencode export`` as a fallback.
51
- - Python 3.10+, standard library only. No network access.
52
- - The same package also works as a command-line tool:
53
- ``claude-opencode-sessions`` runs ``import`` and ``list`` in the terminal.
82
+ - No dependencies, no network access.
54
83
 
55
- .. contents:: Table of contents
56
- :depth: 2
57
- :local:
84
+ Prerequisites
85
+ =============
86
+ Python 3.10+
58
87
 
59
- Install
60
- =======
88
+ Installation
89
+ ============
61
90
  As a Claude Code plugin
62
91
  -----------------------
63
92
  .. code-block:: sh
64
93
 
65
- claude plugin marketplace add barseghyanartur/claude-plugin-opencode-sessions
94
+ claude plugin marketplace add barseghyanartur/claude-opencode-sessions
66
95
  claude plugin install opencode-sessions@barseghyanartur
67
96
 
68
97
  Or inside a Claude Code session:
69
98
 
70
99
  .. code-block:: text
71
100
 
72
- /plugin marketplace add barseghyanartur/claude-plugin-opencode-sessions
101
+ /plugin marketplace add barseghyanartur/claude-opencode-sessions
73
102
  /plugin install opencode-sessions@barseghyanartur
74
103
 
75
104
  Update later with ``claude plugin update opencode-sessions@barseghyanartur``,
@@ -78,7 +107,7 @@ or turn on auto-update for the marketplace under **Marketplaces** in
78
107
 
79
108
  The plugin runs the code bundled in the plugin itself, so it does not need
80
109
  the PyPI package. It needs a Python >= 3.10 on ``PATH`` (``python3``,
81
- ``python3.1x``) or `uv <https://docs.astral.sh/uv/>`_. Note that
110
+ ``python3.1x``) or `uv`_. Note that
82
111
  ``/usr/bin/python3`` on macOS is 3.9. ``brew install python`` or
83
112
  ``uv python install 3.12`` fixes that, or set ``OCS_PYTHON=/path/to/python``.
84
113
 
@@ -206,9 +235,8 @@ How it works
206
235
  It runs ``opencode session list --format json`` and
207
236
  ``opencode export <id>``.
208
237
 
209
- See `docs/design.md <docs/design.md>`_ for the design and
210
- `docs/schema-notes.md <docs/schema-notes.md>`_ for the tables and fields
211
- that are read.
238
+ See `docs/design.md`_ for the design and `docs/schema-notes.md`_ for the
239
+ tables and fields that are read.
212
240
 
213
241
  Development
214
242
  ===========
@@ -221,58 +249,6 @@ Development
221
249
  make dev # claude --plugin-dir . (live plugin; /reload-plugins after edits)
222
250
  make install-local / make uninstall-local
223
251
 
224
- Publishing
225
- ==========
226
- One version number covers both the PyPI package and the plugin. It lives in
227
- ``pyproject.toml`` (managed with ``uv version``), and ``make bump`` copies it
228
- into ``.claude-plugin/plugin.json``.
229
-
230
- How each channel works
231
- ----------------------
232
- - **Claude Code plugin:** there is no registry upload. This repository *is*
233
- the marketplace (``.claude-plugin/marketplace.json``), so pushing to
234
- ``main`` publishes. Users only receive an update when the ``version`` in
235
- ``plugin.json`` changes, so every release must bump it.
236
- - **PyPI:** ``claude-opencode-sessions`` is uploaded with ``twine``, using
237
- the credentials in ``~/.pypirc``, so you don't type them each time.
238
- - **Anthropic community marketplace (optional):** a reviewed listing in
239
- ``anthropics/claude-plugins-community``, pinned to a commit. Submit through
240
- the form that ``make submit`` prints the details for.
241
-
242
- One-time setup
243
- --------------
244
- Put API tokens for PyPI and TestPyPI in ``~/.pypirc`` (``chmod 600``):
245
-
246
- .. code-block:: ini
247
-
248
- [distutils]
249
- index-servers =
250
- pypi
251
- testpypi
252
-
253
- [pypi]
254
- username = __token__
255
- password = pypi-...
256
-
257
- [testpypi]
258
- repository = https://test.pypi.org/legacy/
259
- username = __token__
260
- password = pypi-...
261
-
262
- Release checklist
263
- -----------------
264
- .. code-block:: sh
265
-
266
- make bump BUMP=minor # or BUMP=patch|major, or VERSION=0.2.0
267
- $EDITOR CHANGELOG.rst # add the release notes
268
- git commit -am "Release $(uv version --short)"
269
- make test-release # check, build, twine check, upload to TestPyPI
270
- make release # the same, upload to PyPI
271
- make tag # tag vX.Y.Z and push (plugin users get the update)
272
-
273
- For the community marketplace, run ``make submit`` after the release and
274
- file the form.
275
-
276
252
  Troubleshooting
277
253
  ===============
278
254
  If ``/opencode-sessions:import`` makes Claude answer instead of printing a
@@ -285,3 +261,14 @@ scope roots for the current directory.
285
261
  License
286
262
  =======
287
263
  MIT
264
+
265
+ Support
266
+ =======
267
+ For security issues contact me at the e-mail given in the `Author`_ section.
268
+
269
+ For overall issues, go to
270
+ `GitHub <https://github.com/barseghyanartur/claude-opencode-sessions/issues>`_.
271
+
272
+ Author
273
+ ======
274
+ Artur Barseghyan <artur.barseghyan@gmail.com>
@@ -1,13 +1,44 @@
1
1
  ========================
2
2
  claude-opencode-sessions
3
3
  ========================
4
- Bring your `opencode <https://opencode.ai>`_ sessions into **Claude Code**.
4
+ .. External references
5
5
 
6
- In Claude Code, run ``/opencode-sessions:import``. Your opencode sessions for
7
- the current repository become regular Claude Code conversations, titled
8
- ``[opencode] …``. Then use ``/resume`` (or ``claude --resume``) to browse
9
- them, and press Enter to continue one.
6
+ .. _opencode: https://opencode.ai
7
+ .. _Claude Code: https://code.claude.com
8
+ .. _uv: https://docs.astral.sh/uv/
10
9
 
10
+ .. Internal references
11
+
12
+ .. _claude-opencode-sessions: https://github.com/barseghyanartur/claude-opencode-sessions/
13
+ .. _docs/design.md: https://github.com/barseghyanartur/claude-opencode-sessions/blob/main/docs/design.md
14
+ .. _docs/schema-notes.md: https://github.com/barseghyanartur/claude-opencode-sessions/blob/main/docs/schema-notes.md
15
+
16
+ Bring your `opencode`_ sessions into `Claude Code`_.
17
+
18
+ .. image:: https://img.shields.io/pypi/v/claude-opencode-sessions.svg
19
+ :target: https://pypi.python.org/pypi/claude-opencode-sessions
20
+ :alt: PyPI Version
21
+
22
+ .. image:: https://img.shields.io/pypi/pyversions/claude-opencode-sessions.svg
23
+ :target: https://pypi.python.org/pypi/claude-opencode-sessions/
24
+ :alt: Supported Python versions
25
+
26
+ .. image:: https://github.com/barseghyanartur/claude-opencode-sessions/actions/workflows/ci.yml/badge.svg?branch=main
27
+ :target: https://github.com/barseghyanartur/claude-opencode-sessions/actions
28
+ :alt: Build Status
29
+
30
+ .. image:: https://img.shields.io/badge/license-MIT-blue.svg
31
+ :target: https://github.com/barseghyanartur/claude-opencode-sessions/#License
32
+ :alt: MIT
33
+
34
+ `claude-opencode-sessions`_ is a Claude Code plugin (and a command-line
35
+ tool) that imports your opencode sessions for the current repository into
36
+ Claude Code. Run ``/opencode-sessions:import``, then use ``/resume`` (or
37
+ ``claude --resume``) to browse the imported ``[opencode] …`` conversations
38
+ and press Enter to continue one.
39
+
40
+ Features
41
+ ========
11
42
  - **No model call, no tokens.** The import runs in a Claude Code hook and
12
43
  prints its report directly. Tokens are only spent once you resume a session
13
44
  and start typing, just like any other conversation.
@@ -19,28 +50,26 @@ them, and press Enter to continue one.
19
50
  worktree by default, or ``--worktrees`` for all worktrees of the repo.
20
51
  - Reads opencode's SQLite database **read-only**: opencode 1.2+ (1.x and 2.x
21
52
  layouts), with ``opencode export`` as a fallback.
22
- - Python 3.10+, standard library only. No network access.
23
- - The same package also works as a command-line tool:
24
- ``claude-opencode-sessions`` runs ``import`` and ``list`` in the terminal.
53
+ - No dependencies, no network access.
25
54
 
26
- .. contents:: Table of contents
27
- :depth: 2
28
- :local:
55
+ Prerequisites
56
+ =============
57
+ Python 3.10+
29
58
 
30
- Install
31
- =======
59
+ Installation
60
+ ============
32
61
  As a Claude Code plugin
33
62
  -----------------------
34
63
  .. code-block:: sh
35
64
 
36
- claude plugin marketplace add barseghyanartur/claude-plugin-opencode-sessions
65
+ claude plugin marketplace add barseghyanartur/claude-opencode-sessions
37
66
  claude plugin install opencode-sessions@barseghyanartur
38
67
 
39
68
  Or inside a Claude Code session:
40
69
 
41
70
  .. code-block:: text
42
71
 
43
- /plugin marketplace add barseghyanartur/claude-plugin-opencode-sessions
72
+ /plugin marketplace add barseghyanartur/claude-opencode-sessions
44
73
  /plugin install opencode-sessions@barseghyanartur
45
74
 
46
75
  Update later with ``claude plugin update opencode-sessions@barseghyanartur``,
@@ -49,7 +78,7 @@ or turn on auto-update for the marketplace under **Marketplaces** in
49
78
 
50
79
  The plugin runs the code bundled in the plugin itself, so it does not need
51
80
  the PyPI package. It needs a Python >= 3.10 on ``PATH`` (``python3``,
52
- ``python3.1x``) or `uv <https://docs.astral.sh/uv/>`_. Note that
81
+ ``python3.1x``) or `uv`_. Note that
53
82
  ``/usr/bin/python3`` on macOS is 3.9. ``brew install python`` or
54
83
  ``uv python install 3.12`` fixes that, or set ``OCS_PYTHON=/path/to/python``.
55
84
 
@@ -177,9 +206,8 @@ How it works
177
206
  It runs ``opencode session list --format json`` and
178
207
  ``opencode export <id>``.
179
208
 
180
- See `docs/design.md <docs/design.md>`_ for the design and
181
- `docs/schema-notes.md <docs/schema-notes.md>`_ for the tables and fields
182
- that are read.
209
+ See `docs/design.md`_ for the design and `docs/schema-notes.md`_ for the
210
+ tables and fields that are read.
183
211
 
184
212
  Development
185
213
  ===========
@@ -192,58 +220,6 @@ Development
192
220
  make dev # claude --plugin-dir . (live plugin; /reload-plugins after edits)
193
221
  make install-local / make uninstall-local
194
222
 
195
- Publishing
196
- ==========
197
- One version number covers both the PyPI package and the plugin. It lives in
198
- ``pyproject.toml`` (managed with ``uv version``), and ``make bump`` copies it
199
- into ``.claude-plugin/plugin.json``.
200
-
201
- How each channel works
202
- ----------------------
203
- - **Claude Code plugin:** there is no registry upload. This repository *is*
204
- the marketplace (``.claude-plugin/marketplace.json``), so pushing to
205
- ``main`` publishes. Users only receive an update when the ``version`` in
206
- ``plugin.json`` changes, so every release must bump it.
207
- - **PyPI:** ``claude-opencode-sessions`` is uploaded with ``twine``, using
208
- the credentials in ``~/.pypirc``, so you don't type them each time.
209
- - **Anthropic community marketplace (optional):** a reviewed listing in
210
- ``anthropics/claude-plugins-community``, pinned to a commit. Submit through
211
- the form that ``make submit`` prints the details for.
212
-
213
- One-time setup
214
- --------------
215
- Put API tokens for PyPI and TestPyPI in ``~/.pypirc`` (``chmod 600``):
216
-
217
- .. code-block:: ini
218
-
219
- [distutils]
220
- index-servers =
221
- pypi
222
- testpypi
223
-
224
- [pypi]
225
- username = __token__
226
- password = pypi-...
227
-
228
- [testpypi]
229
- repository = https://test.pypi.org/legacy/
230
- username = __token__
231
- password = pypi-...
232
-
233
- Release checklist
234
- -----------------
235
- .. code-block:: sh
236
-
237
- make bump BUMP=minor # or BUMP=patch|major, or VERSION=0.2.0
238
- $EDITOR CHANGELOG.rst # add the release notes
239
- git commit -am "Release $(uv version --short)"
240
- make test-release # check, build, twine check, upload to TestPyPI
241
- make release # the same, upload to PyPI
242
- make tag # tag vX.Y.Z and push (plugin users get the update)
243
-
244
- For the community marketplace, run ``make submit`` after the release and
245
- file the form.
246
-
247
223
  Troubleshooting
248
224
  ===============
249
225
  If ``/opencode-sessions:import`` makes Claude answer instead of printing a
@@ -256,3 +232,14 @@ scope roots for the current directory.
256
232
  License
257
233
  =======
258
234
  MIT
235
+
236
+ Support
237
+ =======
238
+ For security issues contact me at the e-mail given in the `Author`_ section.
239
+
240
+ For overall issues, go to
241
+ `GitHub <https://github.com/barseghyanartur/claude-opencode-sessions/issues>`_.
242
+
243
+ Author
244
+ ======
245
+ Artur Barseghyan <artur.barseghyan@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "claude-opencode-sessions"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Import your opencode sessions for the current repository into Claude Code, so they open with /resume."
9
9
  readme = "README.rst"
10
10
  requires-python = ">=3.10"
@@ -34,10 +34,10 @@ dependencies = []
34
34
  claude-opencode-sessions = "claude_opencode_sessions.cli:main"
35
35
 
36
36
  [project.urls]
37
- Homepage = "https://github.com/barseghyanartur/claude-plugin-opencode-sessions"
38
- Repository = "https://github.com/barseghyanartur/claude-plugin-opencode-sessions"
39
- Issues = "https://github.com/barseghyanartur/claude-plugin-opencode-sessions/issues"
40
- Changelog = "https://github.com/barseghyanartur/claude-plugin-opencode-sessions/blob/main/CHANGELOG.rst"
37
+ Homepage = "https://github.com/barseghyanartur/claude-opencode-sessions"
38
+ Repository = "https://github.com/barseghyanartur/claude-opencode-sessions"
39
+ Issues = "https://github.com/barseghyanartur/claude-opencode-sessions/issues"
40
+ Changelog = "https://github.com/barseghyanartur/claude-opencode-sessions/blob/main/CHANGELOG.rst"
41
41
 
42
42
  [dependency-groups]
43
43
  dev = [