dev-bubble 0.7.10__tar.gz → 0.7.11__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.7.10/dev_bubble.egg-info → dev_bubble-0.7.11}/PKG-INFO +1 -1
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/__init__.py +1 -1
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/ai.py +1 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/finalization.py +14 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/github_token.py +5 -3
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/provisioning.py +5 -4
- {dev_bubble-0.7.10 → dev_bubble-0.7.11/dev_bubble.egg-info}/PKG-INFO +1 -1
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.claude/CLAUDE.md +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.github/workflows/ci.yml +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.github/workflows/publish.yml +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.gitignore +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/CHANGELOG.md +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/LICENSE +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/README.md +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/SPEC.md +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/__main__.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/auth_proxy.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/automation.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/clean.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/cli.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/clone.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/cloud.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/cloud_types.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/__init__.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/cloud_cmd.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/completion.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/doctor.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/images.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/infrastructure.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/lifecycle.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/list_cmd.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/relay_cmd.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/remote_cmd.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/security_cmd.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/settings.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/status_cmd.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/config.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/container_helpers.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/data/skill.md +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/default_repos.json +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/git_store.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/graphql_validator.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/hooks/__init__.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/hooks/lean.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/hooks/python.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/image_management.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/__init__.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/builder.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/base.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/cloud-init.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/lean-toolchain.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/lean.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/python.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/claude.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/codex.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/elan.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/emacs.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/gh.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/neovim.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/pins.json +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/vscode.sh +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/lean.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/lifecycle.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/naming.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/native.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/network.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/notices.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/output.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/relay.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/remote.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/repo_registry.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/__init__.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/base.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/colima.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/incus.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/security.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/setup.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/skill.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/spinner.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/target.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/token_store.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/tools.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/tunnel.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/vscode.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/config/com.bubble.git-update.plist +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/config/com.bubble.image-refresh.plist +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/config/com.bubble.relay-daemon.plist +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/conftest.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/SOURCES.txt +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/dependency_links.txt +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/entry_points.txt +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/requires.txt +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/top_level.txt +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/pyproject.toml +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/setup.cfg +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/conftest.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_ai.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_auth_proxy.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_branch_no_target.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_build_lock.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_claude_projects_symlink.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_cloud.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_completion.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_config.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_customize.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_editor.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_git_store.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_github_token.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_graphql_validator.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_hooks.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_integration.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_lifecycle.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_list_columns.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_list_remote.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_mounts.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_multi_target.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_naming.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_native.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_network.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_notices.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_relay.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_remote.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_repo_registry.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_security.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_skill.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_spinner.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_status.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_target.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_tools.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_tunnel.py +0 -0
- {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_vscode.py +0 -0
|
@@ -42,6 +42,20 @@ def finalize_bubble(
|
|
|
42
42
|
if hook:
|
|
43
43
|
hook.post_clone(runtime, name, project_dir)
|
|
44
44
|
|
|
45
|
+
# Add a "github" remote with SSH-format URL for gh CLI host discovery.
|
|
46
|
+
# The global url.insteadOf rewrites HTTPS github.com URLs to the proxy,
|
|
47
|
+
# so `git remote -v` shows proxy URLs that gh can't match to github.com.
|
|
48
|
+
# SSH-format URLs (git@github.com:...) bypass the HTTPS insteadOf rule,
|
|
49
|
+
# letting gh discover the host without needing to actually use the remote.
|
|
50
|
+
if t.owner and t.repo:
|
|
51
|
+
q_repo = shlex.quote(f"git@github.com:{t.owner}/{t.repo}.git")
|
|
52
|
+
q_dir = shlex.quote(project_dir)
|
|
53
|
+
add_cmd = f"cd {q_dir} && git remote add github {q_repo} 2>/dev/null || true"
|
|
54
|
+
try:
|
|
55
|
+
runtime.exec(name, ["su", "-", "user", "-c", add_cmd])
|
|
56
|
+
except Exception:
|
|
57
|
+
pass
|
|
58
|
+
|
|
45
59
|
# Pre-populate Claude Code settings to skip the first-run wizard
|
|
46
60
|
from .ai import setup_claude_settings
|
|
47
61
|
|
|
@@ -38,7 +38,7 @@ import subprocess
|
|
|
38
38
|
|
|
39
39
|
from .output import detail
|
|
40
40
|
from .runtime.base import ContainerRuntime
|
|
41
|
-
from .runtime.colima import
|
|
41
|
+
from .runtime.colima import colima_bind_ip
|
|
42
42
|
|
|
43
43
|
# Port inside the container where the auth proxy is exposed (TCP, for git)
|
|
44
44
|
_CONTAINER_PROXY_PORT = 7654
|
|
@@ -237,9 +237,11 @@ def setup_auth_proxy(
|
|
|
237
237
|
)
|
|
238
238
|
|
|
239
239
|
# Add Incus proxy device: expose host TCP port into container
|
|
240
|
-
# On macOS (Colima), need to use the
|
|
240
|
+
# On macOS (Colima), need to use the bridge IP where the auth proxy
|
|
241
|
+
# actually listens (colima_bind_ip), not host.lima.internal which may
|
|
242
|
+
# resolve to a different interface (vz NAT) that the proxy doesn't bind to.
|
|
241
243
|
if platform.system() == "Darwin":
|
|
242
|
-
host_ip =
|
|
244
|
+
host_ip = colima_bind_ip()
|
|
243
245
|
else:
|
|
244
246
|
host_ip = "127.0.0.1"
|
|
245
247
|
|
|
@@ -282,14 +282,15 @@ def provision_container(
|
|
|
282
282
|
|
|
283
283
|
if is_enabled(config, "relay"):
|
|
284
284
|
from .relay import RELAY_PORT_FILE, RELAY_SOCK
|
|
285
|
-
from .runtime.colima import
|
|
285
|
+
from .runtime.colima import colima_bind_ip
|
|
286
286
|
|
|
287
287
|
# macOS/Colima: Unix sockets can't traverse virtio-fs, use TCP.
|
|
288
|
-
#
|
|
289
|
-
#
|
|
288
|
+
# Use the bridge IP where the relay daemon actually listens
|
|
289
|
+
# (colima_bind_ip), not host.lima.internal which may resolve to
|
|
290
|
+
# a different interface.
|
|
290
291
|
if platform.system() == "Darwin" and RELAY_PORT_FILE.exists():
|
|
291
292
|
port = RELAY_PORT_FILE.read_text().strip()
|
|
292
|
-
host_ip =
|
|
293
|
+
host_ip = colima_bind_ip()
|
|
293
294
|
connect_addr = f"tcp:{host_ip}:{port}"
|
|
294
295
|
elif RELAY_SOCK.exists():
|
|
295
296
|
connect_addr = f"unix:{RELAY_SOCK}"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|