devs-common 2.0.8__tar.gz → 2.0.10__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 (42) hide show
  1. {devs_common-2.0.8 → devs_common-2.0.10}/PKG-INFO +1 -1
  2. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/config.py +0 -5
  3. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/core/container.py +13 -13
  4. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/Dockerfile +2 -3
  5. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/devcontainer.json +2 -4
  6. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common.egg-info/PKG-INFO +1 -1
  7. {devs_common-2.0.8 → devs_common-2.0.10}/pyproject.toml +1 -1
  8. {devs_common-2.0.8 → devs_common-2.0.10}/LICENSE +0 -0
  9. {devs_common-2.0.8 → devs_common-2.0.10}/README.md +0 -0
  10. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/__init__.py +0 -0
  11. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/core/__init__.py +0 -0
  12. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/core/project.py +0 -0
  13. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/core/workspace.py +0 -0
  14. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/devs_config.py +0 -0
  15. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/exceptions.py +0 -0
  16. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/copy-ssh.sh +0 -0
  17. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/post-create-wrapper.sh +0 -0
  18. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/python-venv-integration.sh +0 -0
  19. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/screenshot-webapp.sh +0 -0
  20. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/setup-workspace.sh +0 -0
  21. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/start-tunnel.sh +0 -0
  22. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/tunnel-status.sh +0 -0
  23. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/scripts/webapp-screenshot.py +0 -0
  24. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/sudo-scripts/init-firewall.sh +0 -0
  25. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/sudo-scripts/setup-devs-env.sh +0 -0
  26. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/sudo-scripts/setup-vscode-cache.sh +0 -0
  27. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/sudo-scripts/start-services.sh +0 -0
  28. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/templates/vscode-settings-reference.md +0 -0
  29. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/__init__.py +0 -0
  30. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/config_hash.py +0 -0
  31. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/console.py +0 -0
  32. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/devcontainer.py +0 -0
  33. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/devcontainer_template.py +0 -0
  34. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/docker_client.py +0 -0
  35. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/file_utils.py +0 -0
  36. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/git_utils.py +0 -0
  37. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common/utils/repo_cache.py +0 -0
  38. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common.egg-info/SOURCES.txt +0 -0
  39. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common.egg-info/dependency_links.txt +0 -0
  40. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common.egg-info/requires.txt +0 -0
  41. {devs_common-2.0.8 → devs_common-2.0.10}/devs_common.egg-info/top_level.txt +0 -0
  42. {devs_common-2.0.8 → devs_common-2.0.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devs-common
3
- Version: 2.0.8
3
+ Version: 2.0.10
4
4
  Summary: Shared utilities for devs package ecosystem
5
5
  Author: Dan Lester
6
6
  License-Expression: MIT
@@ -12,7 +12,6 @@ class BaseConfig(ABC):
12
12
  # Default directories shared across CLI and webhook
13
13
  CLAUDE_CONFIG_DIR = Path.home() / ".devs" / "claudeconfig"
14
14
  CODEX_CONFIG_DIR = Path.home() / ".devs" / "codexconfig"
15
- VSCODE_CLI_DIR = Path.home() / ".devs" / "vscode-cli"
16
15
 
17
16
  def __init__(self) -> None:
18
17
  """Initialize base configuration."""
@@ -26,9 +25,6 @@ class BaseConfig(ABC):
26
25
  codex_config_env = os.getenv("DEVS_CODEX_CONFIG_DIR")
27
26
  self.codex_config_dir = Path(codex_config_env) if codex_config_env else self.CODEX_CONFIG_DIR
28
27
 
29
- vscode_cli_env = os.getenv("DEVS_VSCODE_CLI_DIR")
30
- self.vscode_cli_dir = Path(vscode_cli_env) if vscode_cli_env else self.VSCODE_CLI_DIR
31
-
32
28
  @property
33
29
  def workspaces_dir(self) -> Path:
34
30
  """Get workspaces directory."""
@@ -104,4 +100,3 @@ class BaseConfig(ABC):
104
100
  self.bridge_dir.mkdir(parents=True, exist_ok=True)
105
101
  self.claude_config_dir.mkdir(parents=True, exist_ok=True)
106
102
  self.codex_config_dir.mkdir(parents=True, exist_ok=True)
107
- self.vscode_cli_dir.mkdir(parents=True, exist_ok=True)
@@ -588,24 +588,24 @@ class ContainerManager:
588
588
 
589
589
  def _prepare_container_exec(self, dev_name: str, workspace_dir: Path, debug: bool = False, live: bool = False, extra_env: Optional[Dict[str, str]] = None) -> Tuple[str, str]:
590
590
  """Prepare container for exec operations (shared by exec_shell and exec_command).
591
-
591
+
592
592
  Args:
593
593
  dev_name: Development environment name
594
594
  workspace_dir: Workspace directory path
595
595
  debug: Show debug output for devcontainer operations
596
596
  live: Whether the container is in live mode
597
597
  extra_env: Additional environment variables to pass to container
598
-
598
+
599
599
  Returns:
600
600
  Tuple of (container_name, container_workspace_dir)
601
-
601
+
602
602
  Raises:
603
603
  ContainerError: If container preparation fails
604
604
  """
605
605
  # Get initial container info (may be updated based on existing container mode)
606
606
  workspace_info = self._get_container_info(dev_name, live)
607
607
  container_name = workspace_info["container_name"]
608
-
608
+
609
609
  # Check if container already exists and detect its mode
610
610
  project_labels = self._get_project_labels(dev_name)
611
611
  existing_containers = self.docker.find_containers_by_labels(project_labels)
@@ -615,18 +615,18 @@ class ContainerManager:
615
615
  existing_is_live = existing_labels.get('devs.live') == 'true'
616
616
  # Use the existing container's mode
617
617
  live = existing_is_live
618
-
618
+
619
619
  # In live mode, use the host folder name; otherwise use constructed name
620
620
  if live:
621
621
  workspace_name = workspace_dir.name
622
622
  else:
623
623
  workspace_name = workspace_info["workspace_name"]
624
624
  container_workspace_dir = f"/workspaces/{workspace_name}"
625
-
625
+
626
626
  # Ensure container is running
627
627
  if not self.ensure_container_running(dev_name, workspace_dir, debug=debug, live=live, extra_env=extra_env):
628
628
  raise ContainerError(f"Failed to start container for {dev_name}")
629
-
629
+
630
630
  return container_name, container_workspace_dir
631
631
 
632
632
  def exec_shell(self, dev_name: str, workspace_dir: Path, debug: bool = False, live: bool = False) -> None:
@@ -646,7 +646,7 @@ class ContainerManager:
646
646
  container_name, container_workspace_dir = self._prepare_container_exec(
647
647
  dev_name, workspace_dir, debug=debug, live=live
648
648
  )
649
-
649
+
650
650
  console.print(f"🐚 Opening shell in: {dev_name} (container: {container_name})")
651
651
  console.print(f" Workspace: {container_workspace_dir}")
652
652
 
@@ -878,11 +878,11 @@ class ContainerManager:
878
878
  return tunnel_name
879
879
 
880
880
  def tunnel_auth(self, dev_name: str, workspace_dir: Path, debug: bool = False, live: bool = False, extra_env: Optional[Dict[str, str]] = None) -> None:
881
- """Authenticate VS Code tunnel (interactive, one-time setup).
881
+ """Authenticate VS Code tunnel (interactive, per-container setup).
882
882
 
883
883
  Runs the device code flow interactively inside the container. Auth is
884
- stored in a bind-mounted directory (~/.devs/vscode-cli/) so it persists
885
- across container recreations and is shared across all containers.
884
+ stored in the container's filesystem and persists across stop/restart
885
+ cycles (but not container removal/recreation).
886
886
 
887
887
  Args:
888
888
  dev_name: Development environment name
@@ -925,7 +925,7 @@ class ContainerManager:
925
925
  if result.returncode == 0:
926
926
  console.print("")
927
927
  console.print("[bold green]Authentication successful![/bold green]")
928
- console.print(" Auth is shared across all containers on this machine.")
928
+ console.print(" Auth persists across container stop/restart cycles.")
929
929
  console.print("")
930
930
  console.print(f" Start a tunnel: devs tunnel {dev_name}")
931
931
  console.print(f" Then connect: code --remote tunnel+{tunnel_name} {container_workspace_dir}")
@@ -972,7 +972,7 @@ class ContainerManager:
972
972
  'docker', 'exec', '-d',
973
973
  container_name,
974
974
  '/bin/sh', '-c',
975
- f'VSCODE_CLI_DATA_DIR=/home/node/.vscode/cli {tunnel_cmd} > {log_file} 2>&1'
975
+ f'{tunnel_cmd} > {log_file} 2>&1'
976
976
  ]
977
977
 
978
978
  if debug:
@@ -87,9 +87,9 @@ RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhisto
87
87
  ENV DEVCONTAINER=true
88
88
 
89
89
  # Create workspace and config directories and set permissions
90
- RUN mkdir -p /workspaces /home/node/claudeconfig /home/node/codexconfig /home/node/.vscode-server/extensions /home/node/.vscode/cli && \
90
+ RUN mkdir -p /workspaces /home/node/claudeconfig /home/node/codexconfig /home/node/.vscode-server/extensions && \
91
91
  echo '[]' > /home/node/.vscode-server/extensions/extensions.json && \
92
- chown -R node:node /workspaces /home/node /home/node/.vscode-server /home/node/.vscode && \
92
+ chown -R node:node /workspaces /home/node /home/node/.vscode-server && \
93
93
  chmod 755 /workspaces
94
94
 
95
95
  WORKDIR /workspaces
@@ -142,7 +142,6 @@ RUN ARCH=$(dpkg --print-architecture) && \
142
142
  RUN for shell_rc in /home/node/.zshrc /home/node/.bashrc; do \
143
143
  echo "export CLAUDE_CONFIG_DIR=\"/home/node/claudeconfig\"" >> "$shell_rc" && \
144
144
  echo "export CODEX_CONFIG_HOME=\"/home/node/codexconfig\"" >> "$shell_rc" && \
145
- echo "export VSCODE_CLI_DATA_DIR=\"/home/node/.vscode/cli\"" >> "$shell_rc" && \
146
145
  echo "export PATH=\"/home/node/.local/bin:\$PATH\"" >> "$shell_rc" && \
147
146
  echo "alias claude=\"claude --dangerously-skip-permissions\"" >> "$shell_rc" && \
148
147
  echo "alias codex=\"/usr/local/share/npm-global/bin/codex --full-auto\"" >> "$shell_rc" && \
@@ -83,8 +83,7 @@
83
83
  // "source=${localEnv:WORKSPACE_FOLDER_NAME}-vscode-extensions,target=/home/node/.vscode-server/extensions,type=volume",
84
84
  // .vscode-server includes extension state which we don't want to keep
85
85
  // "source=${localEnv:WORKSPACE_FOLDER_NAME}-vscode-data,target=/home/node/.vscode-server,type=volume",
86
- "source=${localEnv:WORKSPACE_FOLDER_NAME}-vscode-downloads,target=/home/node/.vscode-extensions-cache-volume,type=volume",
87
- "source=${localEnv:HOME}/.devs/vscode-cli,target=/home/node/.vscode/cli,type=bind"
86
+ "source=${localEnv:WORKSPACE_FOLDER_NAME}-vscode-downloads,target=/home/node/.vscode-extensions-cache-volume,type=volume"
88
87
  ],
89
88
  "remoteEnv": {
90
89
  "NODE_OPTIONS": "--max-old-space-size=4096",
@@ -96,8 +95,7 @@
96
95
  "DEVS_DEBUG": "${localEnv:DEVS_DEBUG}",
97
96
  "DEVS_LIVE_MODE": "${localEnv:DEVS_LIVE_MODE}",
98
97
  "DEVS_ENV_MOUNT_PATH": "${localEnv:DEVS_ENV_MOUNT_PATH}",
99
- "DEVS_BRIDGE_MOUNT_PATH": "${localEnv:DEVS_BRIDGE_MOUNT_PATH}",
100
- "VSCODE_CLI_DATA_DIR": "/home/node/.vscode/cli"
98
+ "DEVS_BRIDGE_MOUNT_PATH": "${localEnv:DEVS_BRIDGE_MOUNT_PATH}"
101
99
  },
102
100
  "workspaceFolder": "/workspaces/${localEnv:WORKSPACE_FOLDER_NAME}",
103
101
  "postCreateCommand": "/usr/local/bin/post-create-wrapper.sh",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devs-common
3
- Version: 2.0.8
3
+ Version: 2.0.10
4
4
  Summary: Shared utilities for devs package ecosystem
5
5
  Author: Dan Lester
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devs-common"
7
- version = "2.0.8"
7
+ version = "2.0.10"
8
8
  description = "Shared utilities for devs package ecosystem"
9
9
  authors = [
10
10
  {name = "Dan Lester"},
File without changes
File without changes
File without changes