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.
Files changed (131) hide show
  1. {dev_bubble-0.7.10/dev_bubble.egg-info → dev_bubble-0.7.11}/PKG-INFO +1 -1
  2. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/__init__.py +1 -1
  3. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/ai.py +1 -0
  4. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/finalization.py +14 -0
  5. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/github_token.py +5 -3
  6. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/provisioning.py +5 -4
  7. {dev_bubble-0.7.10 → dev_bubble-0.7.11/dev_bubble.egg-info}/PKG-INFO +1 -1
  8. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.claude/CLAUDE.md +0 -0
  9. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.github/workflows/ci.yml +0 -0
  10. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.github/workflows/publish.yml +0 -0
  11. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/.gitignore +0 -0
  12. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/CHANGELOG.md +0 -0
  13. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/LICENSE +0 -0
  14. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/README.md +0 -0
  15. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/SPEC.md +0 -0
  16. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/__main__.py +0 -0
  17. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/auth_proxy.py +0 -0
  18. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/automation.py +0 -0
  19. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/clean.py +0 -0
  20. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/cli.py +0 -0
  21. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/clone.py +0 -0
  22. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/cloud.py +0 -0
  23. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/cloud_types.py +0 -0
  24. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/__init__.py +0 -0
  25. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/cloud_cmd.py +0 -0
  26. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/completion.py +0 -0
  27. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/doctor.py +0 -0
  28. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/images.py +0 -0
  29. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/infrastructure.py +0 -0
  30. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/lifecycle.py +0 -0
  31. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/list_cmd.py +0 -0
  32. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/relay_cmd.py +0 -0
  33. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/remote_cmd.py +0 -0
  34. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/security_cmd.py +0 -0
  35. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/settings.py +0 -0
  36. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/commands/status_cmd.py +0 -0
  37. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/config.py +0 -0
  38. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/container_helpers.py +0 -0
  39. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/data/skill.md +0 -0
  40. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/default_repos.json +0 -0
  41. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/git_store.py +0 -0
  42. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/graphql_validator.py +0 -0
  43. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/hooks/__init__.py +0 -0
  44. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/hooks/lean.py +0 -0
  45. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/hooks/python.py +0 -0
  46. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/image_management.py +0 -0
  47. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/__init__.py +0 -0
  48. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/builder.py +0 -0
  49. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/base.sh +0 -0
  50. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/cloud-init.sh +0 -0
  51. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/lean-toolchain.sh +0 -0
  52. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/lean.sh +0 -0
  53. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/python.sh +0 -0
  54. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/claude.sh +0 -0
  55. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/codex.sh +0 -0
  56. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/elan.sh +0 -0
  57. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/emacs.sh +0 -0
  58. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/gh.sh +0 -0
  59. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/neovim.sh +0 -0
  60. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/pins.json +0 -0
  61. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/images/scripts/tools/vscode.sh +0 -0
  62. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/lean.py +0 -0
  63. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/lifecycle.py +0 -0
  64. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/naming.py +0 -0
  65. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/native.py +0 -0
  66. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/network.py +0 -0
  67. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/notices.py +0 -0
  68. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/output.py +0 -0
  69. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/relay.py +0 -0
  70. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/remote.py +0 -0
  71. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/repo_registry.py +0 -0
  72. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/__init__.py +0 -0
  73. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/base.py +0 -0
  74. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/colima.py +0 -0
  75. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/runtime/incus.py +0 -0
  76. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/security.py +0 -0
  77. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/setup.py +0 -0
  78. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/skill.py +0 -0
  79. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/spinner.py +0 -0
  80. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/target.py +0 -0
  81. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/token_store.py +0 -0
  82. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/tools.py +0 -0
  83. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/tunnel.py +0 -0
  84. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/bubble/vscode.py +0 -0
  85. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/config/com.bubble.git-update.plist +0 -0
  86. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/config/com.bubble.image-refresh.plist +0 -0
  87. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/config/com.bubble.relay-daemon.plist +0 -0
  88. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/conftest.py +0 -0
  89. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/SOURCES.txt +0 -0
  90. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/dependency_links.txt +0 -0
  91. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/entry_points.txt +0 -0
  92. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/requires.txt +0 -0
  93. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/dev_bubble.egg-info/top_level.txt +0 -0
  94. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/pyproject.toml +0 -0
  95. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/setup.cfg +0 -0
  96. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/conftest.py +0 -0
  97. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_ai.py +0 -0
  98. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_auth_proxy.py +0 -0
  99. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_branch_no_target.py +0 -0
  100. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_build_lock.py +0 -0
  101. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_claude_projects_symlink.py +0 -0
  102. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_cloud.py +0 -0
  103. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_completion.py +0 -0
  104. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_config.py +0 -0
  105. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_customize.py +0 -0
  106. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_editor.py +0 -0
  107. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_git_store.py +0 -0
  108. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_github_token.py +0 -0
  109. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_graphql_validator.py +0 -0
  110. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_hooks.py +0 -0
  111. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_integration.py +0 -0
  112. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_lifecycle.py +0 -0
  113. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_list_columns.py +0 -0
  114. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_list_remote.py +0 -0
  115. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_mounts.py +0 -0
  116. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_multi_target.py +0 -0
  117. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_naming.py +0 -0
  118. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_native.py +0 -0
  119. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_network.py +0 -0
  120. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_notices.py +0 -0
  121. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_relay.py +0 -0
  122. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_remote.py +0 -0
  123. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_repo_registry.py +0 -0
  124. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_security.py +0 -0
  125. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_skill.py +0 -0
  126. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_spinner.py +0 -0
  127. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_status.py +0 -0
  128. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_target.py +0 -0
  129. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_tools.py +0 -0
  130. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_tunnel.py +0 -0
  131. {dev_bubble-0.7.10 → dev_bubble-0.7.11}/tests/test_vscode.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dev-bubble
3
- Version: 0.7.10
3
+ Version: 0.7.11
4
4
  Summary: Containerized development environments powered by Incus
5
5
  Author-email: Kim Morrison <kim@tqft.net>
6
6
  License-Expression: Apache-2.0
@@ -1,3 +1,3 @@
1
1
  """bubble: Containerized development environments."""
2
2
 
3
- __version__ = "0.7.10"
3
+ __version__ = "0.7.11"
@@ -301,6 +301,7 @@ _CLAUDE_JSON_SAFE_KEYS = frozenset(
301
301
  "numStartups",
302
302
  "preferredNotifChannel",
303
303
  "autoUpdaterStatus",
304
+ "effortCalloutV2Dismissed",
304
305
  }
305
306
  )
306
307
 
@@ -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 colima_host_ip
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 host IP from the VM's perspective
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 = colima_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 colima_host_ip
285
+ from .runtime.colima import colima_bind_ip
286
286
 
287
287
  # macOS/Colima: Unix sockets can't traverse virtio-fs, use TCP.
288
- # incus proxy needs an IP (not hostname), so resolve host.lima.internal
289
- # from the VM — this is the host's IP as seen from incusd.
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 = colima_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}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dev-bubble
3
- Version: 0.7.10
3
+ Version: 0.7.11
4
4
  Summary: Containerized development environments powered by Incus
5
5
  Author-email: Kim Morrison <kim@tqft.net>
6
6
  License-Expression: Apache-2.0
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