bun-off 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 (100) hide show
  1. bun_off-0.1.0/.gitignore +290 -0
  2. bun_off-0.1.0/CHANGELOG.md +48 -0
  3. bun_off-0.1.0/LICENSE +674 -0
  4. bun_off-0.1.0/PKG-INFO +1229 -0
  5. bun_off-0.1.0/README.md +1197 -0
  6. bun_off-0.1.0/pyproject.toml +114 -0
  7. bun_off-0.1.0/src/boff/__init__.py +8 -0
  8. bun_off-0.1.0/src/boff/__main__.py +6 -0
  9. bun_off-0.1.0/src/boff/adapters/__init__.py +43 -0
  10. bun_off-0.1.0/src/boff/adapters/antigravity.py +287 -0
  11. bun_off-0.1.0/src/boff/adapters/base.py +192 -0
  12. bun_off-0.1.0/src/boff/adapters/claude.py +245 -0
  13. bun_off-0.1.0/src/boff/adapters/opencode.py +236 -0
  14. bun_off-0.1.0/src/boff/artifacts/__init__.py +56 -0
  15. bun_off-0.1.0/src/boff/artifacts/agent.py +38 -0
  16. bun_off-0.1.0/src/boff/artifacts/event_hooks.py +129 -0
  17. bun_off-0.1.0/src/boff/artifacts/mcp_server.py +19 -0
  18. bun_off-0.1.0/src/boff/artifacts/permissions.py +58 -0
  19. bun_off-0.1.0/src/boff/artifacts/rule.py +43 -0
  20. bun_off-0.1.0/src/boff/artifacts/settings.py +29 -0
  21. bun_off-0.1.0/src/boff/artifacts/skill.py +18 -0
  22. bun_off-0.1.0/src/boff/artifacts/slash_command.py +18 -0
  23. bun_off-0.1.0/src/boff/cli.py +512 -0
  24. bun_off-0.1.0/src/boff/console.py +64 -0
  25. bun_off-0.1.0/src/boff/context/__init__.py +48 -0
  26. bun_off-0.1.0/src/boff/context/antigravity.py +93 -0
  27. bun_off-0.1.0/src/boff/context/base.py +126 -0
  28. bun_off-0.1.0/src/boff/context/bundle.py +200 -0
  29. bun_off-0.1.0/src/boff/context/claude.py +295 -0
  30. bun_off-0.1.0/src/boff/context/digest.py +69 -0
  31. bun_off-0.1.0/src/boff/context/ir.py +97 -0
  32. bun_off-0.1.0/src/boff/context/migrate.py +106 -0
  33. bun_off-0.1.0/src/boff/context/opencode.py +192 -0
  34. bun_off-0.1.0/src/boff/deploy.py +253 -0
  35. bun_off-0.1.0/src/boff/errors.py +28 -0
  36. bun_off-0.1.0/src/boff/executor.py +129 -0
  37. bun_off-0.1.0/src/boff/hooks.py +108 -0
  38. bun_off-0.1.0/src/boff/jsonutil.py +42 -0
  39. bun_off-0.1.0/src/boff/manifest.py +585 -0
  40. bun_off-0.1.0/src/boff/manifest_sources/__init__.py +35 -0
  41. bun_off-0.1.0/src/boff/manifest_sources/base.py +28 -0
  42. bun_off-0.1.0/src/boff/manifest_sources/git.py +171 -0
  43. bun_off-0.1.0/src/boff/manifest_sources/local.py +26 -0
  44. bun_off-0.1.0/src/boff/merge.py +135 -0
  45. bun_off-0.1.0/src/boff/platform_layout.py +112 -0
  46. bun_off-0.1.0/src/boff/py.typed +0 -0
  47. bun_off-0.1.0/src/boff/registry.py +37 -0
  48. bun_off-0.1.0/src/boff/sources/__init__.py +25 -0
  49. bun_off-0.1.0/src/boff/sources/base.py +85 -0
  50. bun_off-0.1.0/src/boff/sources/local.py +66 -0
  51. bun_off-0.1.0/src/boff/state.py +288 -0
  52. bun_off-0.1.0/src/boff/tool_installers/__init__.py +25 -0
  53. bun_off-0.1.0/src/boff/tool_installers/base.py +19 -0
  54. bun_off-0.1.0/src/boff/tool_installers/mise.py +51 -0
  55. bun_off-0.1.0/src/boff/types.py +93 -0
  56. bun_off-0.1.0/src/boff/verify.py +381 -0
  57. bun_off-0.1.0/tests/__init__.py +1 -0
  58. bun_off-0.1.0/tests/conftest.py +153 -0
  59. bun_off-0.1.0/tests/fixtures/sample_manifest/agents/reviewer.md +1 -0
  60. bun_off-0.1.0/tests/fixtures/sample_manifest/boff.yaml +84 -0
  61. bun_off-0.1.0/tests/fixtures/sample_manifest/event_hooks/lint.sh +1 -0
  62. bun_off-0.1.0/tests/fixtures/sample_manifest/hooks/say_post.py +12 -0
  63. bun_off-0.1.0/tests/fixtures/sample_manifest/hooks/say_pre.py +12 -0
  64. bun_off-0.1.0/tests/fixtures/sample_manifest/mcp_servers/raw/antigravity/context7.json +4 -0
  65. bun_off-0.1.0/tests/fixtures/sample_manifest/mcp_servers/raw/antigravity/tldr.json +4 -0
  66. bun_off-0.1.0/tests/fixtures/sample_manifest/mcp_servers/raw/claude/context7.json +4 -0
  67. bun_off-0.1.0/tests/fixtures/sample_manifest/mcp_servers/raw/claude/tldr.json +4 -0
  68. bun_off-0.1.0/tests/fixtures/sample_manifest/mcp_servers/raw/opencode/context7.json +5 -0
  69. bun_off-0.1.0/tests/fixtures/sample_manifest/mcp_servers/raw/opencode/tldr.json +5 -0
  70. bun_off-0.1.0/tests/fixtures/sample_manifest/mise/mise.toml +2 -0
  71. bun_off-0.1.0/tests/fixtures/sample_manifest/plugins/say-hi/greeting.txt +1 -0
  72. bun_off-0.1.0/tests/fixtures/sample_manifest/rules/style.md +3 -0
  73. bun_off-0.1.0/tests/fixtures/sample_manifest/skills/format.md +3 -0
  74. bun_off-0.1.0/tests/fixtures/sample_manifest/slash_commands/lint.md +3 -0
  75. bun_off-0.1.0/tests/test_adapters_antigravity.py +397 -0
  76. bun_off-0.1.0/tests/test_adapters_claude.py +347 -0
  77. bun_off-0.1.0/tests/test_adapters_opencode.py +340 -0
  78. bun_off-0.1.0/tests/test_artifacts.py +130 -0
  79. bun_off-0.1.0/tests/test_cli.py +418 -0
  80. bun_off-0.1.0/tests/test_context_antigravity.py +76 -0
  81. bun_off-0.1.0/tests/test_context_bundle.py +56 -0
  82. bun_off-0.1.0/tests/test_context_claude.py +131 -0
  83. bun_off-0.1.0/tests/test_context_cli.py +99 -0
  84. bun_off-0.1.0/tests/test_context_migrate.py +138 -0
  85. bun_off-0.1.0/tests/test_context_opencode.py +60 -0
  86. bun_off-0.1.0/tests/test_deploy.py +233 -0
  87. bun_off-0.1.0/tests/test_errors.py +250 -0
  88. bun_off-0.1.0/tests/test_executor.py +216 -0
  89. bun_off-0.1.0/tests/test_jsonutil.py +29 -0
  90. bun_off-0.1.0/tests/test_manifest.py +401 -0
  91. bun_off-0.1.0/tests/test_manifest_sources.py +166 -0
  92. bun_off-0.1.0/tests/test_merge.py +97 -0
  93. bun_off-0.1.0/tests/test_platform_layout.py +105 -0
  94. bun_off-0.1.0/tests/test_sources_base.py +56 -0
  95. bun_off-0.1.0/tests/test_sources_local.py +32 -0
  96. bun_off-0.1.0/tests/test_state.py +143 -0
  97. bun_off-0.1.0/tests/test_tool_installers_mise.py +71 -0
  98. bun_off-0.1.0/tests/test_types.py +25 -0
  99. bun_off-0.1.0/tests/test_verify.py +400 -0
  100. bun_off-0.1.0/tests/test_version.py +26 -0
@@ -0,0 +1,290 @@
1
+ *~
2
+
3
+ # Emacs transients
4
+ \#*\#
5
+ .#*
6
+
7
+ # boff bundles
8
+ bundles/
9
+
10
+ # boff-deployed output (dogfooding)
11
+ .claude/
12
+ .opencode/
13
+ .config/
14
+ .mcp.json
15
+ opencode.json
16
+ .tldr/
17
+ .tldrignore
18
+
19
+ dev/
20
+
21
+ # Byte-compiled / optimized / DLL files
22
+ __pycache__/
23
+ *.py[codz]
24
+ *$py.class
25
+
26
+ # C extensions
27
+ *.so
28
+
29
+ # Distribution / packaging
30
+ .Python
31
+ build/
32
+ develop-eggs/
33
+ dist/
34
+ downloads/
35
+ eggs/
36
+ .eggs/
37
+ lib/
38
+ lib64/
39
+ parts/
40
+ sdist/
41
+ var/
42
+ wheels/
43
+ share/python-wheels/
44
+ *.egg-info/
45
+ .installed.cfg
46
+ *.egg
47
+ MANIFEST
48
+
49
+ # PyInstaller
50
+ # Usually these files are written by a python script from a template
51
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
52
+ *.manifest
53
+ *.spec
54
+
55
+ # Installer logs
56
+ pip-log.txt
57
+ pip-delete-this-directory.txt
58
+
59
+ # Unit test / coverage reports
60
+ htmlcov/
61
+ .tox/
62
+ .nox/
63
+ .coverage
64
+ .coverage.*
65
+ .cache
66
+ nosetests.xml
67
+ coverage.xml
68
+ *.cover
69
+ *.py.cover
70
+ .hypothesis/
71
+ .pytest_cache/
72
+ cover/
73
+
74
+ # Translations
75
+ *.mo
76
+ *.pot
77
+
78
+ # Django stuff:
79
+ *.log
80
+ local_settings.py
81
+ db.sqlite3
82
+ db.sqlite3-journal
83
+
84
+ # Flask stuff:
85
+ instance/
86
+ .webassets-cache
87
+
88
+ # Scrapy stuff:
89
+ .scrapy
90
+
91
+ # Sphinx documentation
92
+ docs/_build/
93
+
94
+ # PyBuilder
95
+ .pybuilder/
96
+ target/
97
+
98
+ # Jupyter Notebook
99
+ .ipynb_checkpoints
100
+
101
+ # IPython
102
+ profile_default/
103
+ ipython_config.py
104
+
105
+ # pyenv
106
+ # For a library or package, you might want to ignore these files since the code is
107
+ # intended to run in multiple environments; otherwise, check them in:
108
+ # .python-version
109
+
110
+ # pipenv
111
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
112
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
113
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
114
+ # install all needed dependencies.
115
+ # Pipfile.lock
116
+
117
+ # UV
118
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
119
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
120
+ # commonly ignored for libraries.
121
+ # uv.lock
122
+
123
+ # poetry
124
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
125
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
126
+ # commonly ignored for libraries.
127
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
128
+ # poetry.lock
129
+ # poetry.toml
130
+
131
+ # pdm
132
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
133
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
134
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
135
+ # pdm.lock
136
+ # pdm.toml
137
+ .pdm-python
138
+ .pdm-build/
139
+
140
+ # pixi
141
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
142
+ # pixi.lock
143
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
144
+ # in the .venv directory. It is recommended not to include this directory in version control.
145
+ .pixi
146
+
147
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
148
+ __pypackages__/
149
+
150
+ # Celery stuff
151
+ celerybeat-schedule
152
+ celerybeat.pid
153
+
154
+ # Redis
155
+ *.rdb
156
+ *.aof
157
+ *.pid
158
+
159
+ # RabbitMQ
160
+ mnesia/
161
+ rabbitmq/
162
+ rabbitmq-data/
163
+
164
+ # ActiveMQ
165
+ activemq-data/
166
+
167
+ # SageMath parsed files
168
+ *.sage.py
169
+
170
+ # Environments
171
+ .env
172
+ .envrc
173
+ .venv
174
+ env/
175
+ venv/
176
+ ENV/
177
+ env.bak/
178
+ venv.bak/
179
+
180
+ # Spyder project settings
181
+ .spyderproject
182
+ .spyproject
183
+
184
+ # Rope project settings
185
+ .ropeproject
186
+
187
+ # mkdocs documentation
188
+ /site
189
+
190
+ # mypy
191
+ .mypy_cache/
192
+ .dmypy.json
193
+ dmypy.json
194
+
195
+ # Pyre type checker
196
+ .pyre/
197
+
198
+ # pytype static type analyzer
199
+ .pytype/
200
+
201
+ # Cython debug symbols
202
+ cython_debug/
203
+
204
+ # PyCharm
205
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
206
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
207
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
208
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
209
+ # .idea/
210
+
211
+ # Abstra
212
+ # Abstra is an AI-powered process automation framework.
213
+ # Ignore directories containing user credentials, local state, and settings.
214
+ # Learn more at https://abstra.io/docs
215
+ .abstra/
216
+
217
+ # Visual Studio Code
218
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
219
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
220
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
221
+ # you could uncomment the following to ignore the entire vscode folder
222
+ # .vscode/
223
+ # Temporary file for partial code execution
224
+ tempCodeRunnerFile.py
225
+
226
+ # Ruff stuff:
227
+ .ruff_cache/
228
+
229
+ # PyPI configuration file
230
+ .pypirc
231
+
232
+ # Marimo
233
+ marimo/_static/
234
+ marimo/_lsp/
235
+ __marimo__/
236
+
237
+ # Streamlit
238
+ .streamlit/secrets.toml
239
+
240
+ # BEGIN boff-managed
241
+ /.agents/skills/doc-check/SKILL.md
242
+ /.agents/skills/python-packaging/SKILL.md
243
+ /.claude/hooks/_boff_dispatch.py
244
+ /.claude/hooks/mise-install
245
+ /.claude/hooks/ruff-format
246
+ /.claude/rules/commit-conventions.md
247
+ /.claude/rules/context-management.md
248
+ /.claude/rules/documentation-style.md
249
+ /.claude/rules/explore-then-code.md
250
+ /.claude/rules/lint-exceptions.md
251
+ /.claude/rules/match-project-conventions.md
252
+ /.claude/rules/precise-context.md
253
+ /.claude/rules/python-dev/docstrings.md
254
+ /.claude/rules/python-dev/python-style.md
255
+ /.claude/rules/python-dev/python-testing.md
256
+ /.claude/rules/python-dev/python-toolchain.md
257
+ /.claude/rules/python-dev/python-typing.md
258
+ /.claude/rules/security-basics.md
259
+ /.claude/rules/vcs-etiquette.md
260
+ /.claude/rules/verify-your-work.md
261
+ /.claude/rules/writing-docs.md
262
+ /.claude/rules/writing-tests.md
263
+ /.claude/skills/doc-check/SKILL.md
264
+ /.claude/skills/python-packaging/SKILL.md
265
+ /.config/mise/conf.d/boff-0.toml
266
+ /.config/mise/conf.d/boff-1.toml
267
+ /.opencode/commands/python-packaging.md
268
+ /.opencode/hooks/mise-install
269
+ /.opencode/plugins/boff-hooks.js
270
+ /.opencode/rules/commit-conventions.md
271
+ /.opencode/rules/context-management.md
272
+ /.opencode/rules/documentation-style.md
273
+ /.opencode/rules/explore-then-code.md
274
+ /.opencode/rules/lint-exceptions.md
275
+ /.opencode/rules/match-project-conventions.md
276
+ /.opencode/rules/precise-context.md
277
+ /.opencode/rules/python-dev/docstrings.md
278
+ /.opencode/rules/python-dev/python-style.md
279
+ /.opencode/rules/python-dev/python-testing.md
280
+ /.opencode/rules/python-dev/python-toolchain.md
281
+ /.opencode/rules/python-dev/python-typing.md
282
+ /.opencode/rules/security-basics.md
283
+ /.opencode/rules/vcs-etiquette.md
284
+ /.opencode/rules/verify-your-work.md
285
+ /.opencode/rules/writing-docs.md
286
+ /.opencode/rules/writing-tests.md
287
+ /.opencode/skills/doc-check/SKILL.md
288
+ /.opencode/skills/python-packaging/SKILL.md
289
+ /GEMINI.md
290
+ # END boff-managed
@@ -0,0 +1,48 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
6
+ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+
12
+ - `boff deploy` and `boff check` accept a Git URL as their manifest argument, not only a local
13
+ path. The manifest names what to deploy; the workspace stays the current directory.
14
+ - Manifest references accept a repository URL without a `.git` suffix, and a forge's browser URL
15
+ (`https://github.com/org/repo/tree/main/sub`, GitLab's `/-/tree/`). Both `extends:` and the CLI
16
+ argument use this one scheme.
17
+
18
+ ### Fixed
19
+
20
+ - A Git URL passed to `boff deploy` resolved as a local path, failing with an unhandled
21
+ `FileNotFoundError` traceback. The CLI never consulted the manifest-source registry.
22
+ - A failed reference resolution (bad URL, failed `git` command, missing `boff.yaml`) raised a
23
+ traceback instead of a `ManifestError`, so it printed no readable message.
24
+
25
+ ## [0.1.0] - 2026-07-09
26
+
27
+ Initial public release.
28
+
29
+ ### Added
30
+
31
+ - `boff deploy`: renders a `boff.yaml` manifest to a platform's native config locations, with
32
+ `--dry-run`, `--clean`, `--wipe`, and `--no-ignore`.
33
+ - `boff check`: read-only verification of a deployed workspace, reporting missing, drifted, and
34
+ stale artifacts.
35
+ - `boff clean`: removes Bun Off's recorded footprint while preserving hand-authored files.
36
+ - `boff context`: migrates assistant context (handoff digest, memory) between platforms.
37
+ - `boff --version`.
38
+ - Platforms: `claude`, `opencode`, `antigravity`.
39
+ - Artifact types: rules, skills, slash commands, agents, MCP servers, permissions, settings,
40
+ lifecycle hooks, and event hooks.
41
+ - `extends:` manifest inheritance over local paths and git references.
42
+ - Plugin sources (`local`) and tool installers (`mise`).
43
+ - Deploy-state tracking in `.boff/state.json`, so re-deploying a different manifest cleans up the
44
+ previous one instead of accumulating drift.
45
+ - PEP 561 `py.typed` marker: the package ships its inline type annotations.
46
+
47
+ [Unreleased]: https://github.com/atom-sw/bun-off/compare/v0.1.0...HEAD
48
+ [0.1.0]: https://github.com/atom-sw/bun-off/releases/tag/v0.1.0