dev-bubble 0.6.9__tar.gz → 0.6.17__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.
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/.claude/CLAUDE.md +2 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/CHANGELOG.md +46 -0
- {dev_bubble-0.6.9/dev_bubble.egg-info → dev_bubble-0.6.17}/PKG-INFO +1 -1
- dev_bubble-0.6.17/SPEC.md +1202 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/__init__.py +1 -1
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/cli.py +56 -18
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/cloud.py +10 -10
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/images.py +54 -3
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/settings.py +6 -6
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/config.py +117 -130
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/container_helpers.py +15 -3
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/finalization.py +1 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/image_management.py +15 -6
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/builder.py +47 -8
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/cloud-init.sh +20 -3
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/elan.sh +5 -2
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/vscode.sh +100 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/lifecycle.py +3 -0
- dev_bubble-0.6.17/bubble/notices.py +33 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/relay.py +7 -7
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/remote.py +10 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/runtime/base.py +11 -2
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/runtime/incus.py +9 -7
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/security.py +5 -3
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/setup.py +99 -64
- {dev_bubble-0.6.9 → dev_bubble-0.6.17/dev_bubble.egg-info}/PKG-INFO +1 -1
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/dev_bubble.egg-info/SOURCES.txt +4 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/pyproject.toml +4 -0
- dev_bubble-0.6.17/tests/test_branch_no_target.py +136 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_claude_projects_symlink.py +62 -5
- dev_bubble-0.6.17/tests/test_cloud.py +396 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_config.py +16 -16
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_lifecycle.py +12 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_mounts.py +47 -47
- dev_bubble-0.6.17/tests/test_notices.py +51 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_remote.py +26 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_security.py +8 -9
- dev_bubble-0.6.9/tests/test_cloud.py +0 -202
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/.github/workflows/ci.yml +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/.github/workflows/publish.yml +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/.gitignore +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/LICENSE +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/README.md +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/__main__.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/auth_proxy.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/automation.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/claude.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/clean.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/clone.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/cloud_types.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/__init__.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/cloud_cmd.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/doctor.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/infrastructure.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/lifecycle.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/list_cmd.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/relay_cmd.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/remote_cmd.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/commands/security_cmd.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/data/skill.md +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/default_repos.json +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/git_store.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/github_token.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/hooks/__init__.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/hooks/lean.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/hooks/python.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/__init__.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/base.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/lean-toolchain.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/lean.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/python.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/claude.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/codex.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/emacs.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/neovim.sh +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/images/scripts/tools/pins.json +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/naming.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/native.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/network.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/provisioning.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/repo_registry.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/runtime/__init__.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/runtime/colima.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/skill.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/target.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/tools.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/tunnel.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/bubble/vscode.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/config/com.bubble.git-update.plist +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/config/com.bubble.image-refresh.plist +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/config/com.bubble.relay-daemon.plist +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/conftest.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/dev_bubble.egg-info/dependency_links.txt +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/dev_bubble.egg-info/entry_points.txt +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/dev_bubble.egg-info/requires.txt +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/dev_bubble.egg-info/top_level.txt +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/setup.cfg +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/conftest.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_auth_proxy.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_build_lock.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_claude.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_customize.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_editor.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_git_store.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_github_token.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_hooks.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_integration.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_list_remote.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_multi_target.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_naming.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_native.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_network.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_relay.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_repo_registry.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_skill.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_target.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_tools.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_tunnel.py +0 -0
- {dev_bubble-0.6.9 → dev_bubble-0.6.17}/tests/test_vscode.py +0 -0
|
@@ -155,6 +155,8 @@ Before committing, run `uv run ruff check --fix . && uv run ruff format .` to en
|
|
|
155
155
|
|
|
156
156
|
Always use `uv run pytest` to run tests (not bare `pytest` or `python3 -m pytest`).
|
|
157
157
|
|
|
158
|
+
**NEVER run `uv pip install -e .` in a worktree.** The `VIRTUAL_ENV` environment variable may point to the main worktree's venv (`~/projects/bubble/.venv`), so `uv pip install` will corrupt it by installing an editable pointing to the wrong directory. Use `uv run` instead — it creates a per-directory `.venv` automatically and ignores mismatched `VIRTUAL_ENV`.
|
|
159
|
+
|
|
158
160
|
## How to Add a New Command
|
|
159
161
|
|
|
160
162
|
1. Add a `@main.command()` function in `cli.py`
|
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.17 — 2026-03-12
|
|
4
|
+
- Use `action.wait_until_finished()` instead of `time.sleep(3)` after `power_on()` in cloud server start (#156)
|
|
5
|
+
- Ensures Hetzner confirms the server is running before fetching IP, preventing stale IP on reassignment
|
|
6
|
+
- Extracted shared `_power_on_and_wait()` helper used by both `start_server()` and `get_cloud_remote_host()`
|
|
7
|
+
|
|
8
|
+
## 0.6.16 — 2026-03-12
|
|
9
|
+
- Standardize error handling across the codebase (#155)
|
|
10
|
+
- `IncusRuntime.exec()` now raises `IncusError` (a `RuntimeError` subclass) instead of bare `RuntimeError`, matching `_run()`
|
|
11
|
+
- Document `ContainerRuntime` exception contract in `base.py`
|
|
12
|
+
- Wrap bare `check=True` subprocess calls in `setup.py` with try/except for friendly error messages
|
|
13
|
+
- Narrow broad `except Exception` catches in `relay.py` to specific types (`OSError`, `subprocess.SubprocessError`, etc.)
|
|
14
|
+
|
|
15
|
+
## 0.6.15
|
|
16
|
+
|
|
17
|
+
- Store `project_dir` in registry at creation time instead of guessing via `ls` at reattach (#131)
|
|
18
|
+
- `detect_project_dir` now looks up the registry first, falling back to the `ls` heuristic for pre-existing bubbles
|
|
19
|
+
|
|
20
|
+
## 0.6.14 — 2026-03-12
|
|
21
|
+
- Fix `symlink-claude-projects`: abort on file conflicts instead of deleting skipped files (#118)
|
|
22
|
+
- Merge now tracks skipped files and aborts if any conflicts remain, preventing data loss
|
|
23
|
+
- Softened messaging from "replace" to "link" to better reflect non-destructive behavior
|
|
24
|
+
|
|
25
|
+
## 0.6.13 — 2026-03-12
|
|
26
|
+
- Install Claude Code VS Code extension (`anthropic.claude-code`) when both `claude` and `vscode` tools are enabled (#116)
|
|
27
|
+
|
|
28
|
+
## 0.6.12 — 2026-03-12
|
|
29
|
+
- Fix cloud idle auto-shutdown not working (#12)
|
|
30
|
+
- Fix SSH detection: `dport` (peer port) → `sport` (local port) so incoming connections are detected
|
|
31
|
+
- Fix `ss` header line causing `grep` to always match even with zero connections (add `-H` flag)
|
|
32
|
+
- Use `poweroff` instead of `shutdown -h` for reliable ACPI power-off signal to Hetzner hypervisor
|
|
33
|
+
- Add `/var/log/bubble-idle.log` for debugging idle check behavior
|
|
34
|
+
|
|
35
|
+
## 0.6.11 — 2026-03-12
|
|
36
|
+
- Forward `--claude-credentials` and `--codex-credentials` flags to remote/cloud bubbles (#106)
|
|
37
|
+
- Fix VS Code server not being pre-baked into container images
|
|
38
|
+
- `build_image()` returned early when the image already existed, so rebuild triggers (tools hash change, VS Code commit drift, customize script change) never actually rebuilt
|
|
39
|
+
- Added `--force` flag to `bubble images build` and `force` parameter to `build_image()` for rebuild paths
|
|
40
|
+
- Fixed wrong lock name (`"base-vscode"` → `"base"`) in VS Code commit drift detection
|
|
41
|
+
- Fixed `exit 0` in `elan.sh` that could terminate the entire combined tool script
|
|
42
|
+
|
|
43
|
+
## 0.6.10 — 2026-03-12
|
|
44
|
+
- Support `bubble -b branch_name` without explicit target (#99)
|
|
45
|
+
- Infers owner/repo from current directory's git remote when `-b` is used without a target
|
|
46
|
+
- `bubble -b my_branch` now works like `bubble -b my_branch owner/repo`
|
|
47
|
+
- `bubble -b my_branch --base some_branch` also works without an explicit target
|
|
48
|
+
|
|
3
49
|
## 0.6.9 — 2026-03-12
|
|
4
50
|
- Make relay default to on in auto mode (#102)
|
|
5
51
|
|