augint-shell 0.84.0__tar.gz → 0.84.2__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 (34) hide show
  1. {augint_shell-0.84.0 → augint_shell-0.84.2}/PKG-INFO +1 -1
  2. {augint_shell-0.84.0 → augint_shell-0.84.2}/pyproject.toml +1 -1
  3. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/__init__.py +1 -1
  4. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/container.py +43 -4
  5. {augint_shell-0.84.0 → augint_shell-0.84.2}/README.md +0 -0
  6. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/assets/__init__.py +0 -0
  7. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/assets/comfyui/__init__.py +0 -0
  8. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/assets/comfyui/provision.sh +0 -0
  9. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/cli/__init__.py +0 -0
  10. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/cli/__main__.py +0 -0
  11. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/cli/commands/__init__.py +0 -0
  12. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/cli/commands/llm.py +0 -0
  13. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/cli/commands/manage.py +0 -0
  14. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/cli/commands/tools.py +0 -0
  15. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/config.py +0 -0
  16. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/defaults.py +0 -0
  17. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/exceptions.py +0 -0
  18. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/gpu.py +0 -0
  19. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/interactive.py +0 -0
  20. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/local_chrome.py +0 -0
  21. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/scaffold.py +0 -0
  22. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/selector.py +0 -0
  23. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/__init__.py +0 -0
  24. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/ai-shell.toml +0 -0
  25. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/ai-shell.yaml +0 -0
  26. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/aider/__init__.py +0 -0
  27. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/claude/__init__.py +0 -0
  28. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/claude/settings.json +0 -0
  29. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/codex/__init__.py +0 -0
  30. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/n8n/workflows/chat_with_ollama.json +0 -0
  31. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/n8n/workflows/text_to_speech.json +0 -0
  32. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/n8n/workflows/transcribe_audio.json +0 -0
  33. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/templates/opencode/__init__.py +0 -0
  34. {augint_shell-0.84.0 → augint_shell-0.84.2}/src/ai_shell/tmux.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: augint-shell
3
- Version: 0.84.0
3
+ Version: 0.84.2
4
4
  Summary: Launch AI coding tools and local LLMs in Docker containers
5
5
  Author: svange
6
6
  Requires-Dist: docker>=7.0.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "augint-shell"
3
- version = "0.84.0"
3
+ version = "0.84.2"
4
4
  description = "Launch AI coding tools and local LLMs in Docker containers"
5
5
  authors = [{name = "svange"}]
6
6
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  """augint-shell (ai-shell) - Launch AI coding tools and local LLMs in Docker containers."""
2
2
 
3
- __version__ = "0.84.0"
3
+ __version__ = "0.84.2"
4
4
 
5
5
  __all__ = [
6
6
  "__version__",
@@ -142,16 +142,22 @@ class ContainerManager:
142
142
 
143
143
  If the container exists but is stopped, it is started.
144
144
  If it doesn't exist, it is created with the full configuration.
145
+ If using the ``latest`` tag and a newer image is available, the
146
+ existing container is replaced automatically.
145
147
 
146
148
  Returns the container name.
147
149
  """
148
150
  name, container = self.resolve_dev_container()
149
151
 
150
152
  if container is not None:
151
- if container.status != "running":
152
- logger.info("Starting existing container: %s", name)
153
- container.start()
154
- return name
153
+ if self._recreate_if_image_stale(container, name):
154
+ # Container was removed; fall through to create a new one.
155
+ container = None
156
+ else:
157
+ if container.status != "running":
158
+ logger.info("Starting existing container: %s", name)
159
+ container.start()
160
+ return name
155
161
 
156
162
  logger.info("Creating dev container: %s", name)
157
163
  self._pull_image_if_needed(self.config.full_image)
@@ -306,6 +312,39 @@ class ContainerManager:
306
312
  container.remove(force=True)
307
313
  return True
308
314
 
315
+ def _recreate_if_image_stale(self, container: Container, name: str) -> bool:
316
+ """Pull the latest image and recreate the container if it is outdated.
317
+
318
+ Only acts when the configured tag is ``latest``. For pinned
319
+ version tags the image is immutable so staleness doesn't apply.
320
+
321
+ Returns True if the container was removed (caller must recreate).
322
+ """
323
+ tag = self.config.image_tag
324
+ if tag != "latest":
325
+ return False
326
+
327
+ image_ref = self.config.full_image
328
+ try:
329
+ pulled = self.client.images.pull(*image_ref.rsplit(":", 1))
330
+ except APIError:
331
+ logger.debug("Could not pull %s — skipping staleness check", image_ref)
332
+ return False
333
+
334
+ container_image_id = container.image.id
335
+ pulled_image_id = pulled.id
336
+
337
+ if container_image_id == pulled_image_id:
338
+ return False
339
+
340
+ logger.warning(
341
+ "Dev container %s uses an outdated image — recreating with %s",
342
+ name,
343
+ image_ref,
344
+ )
345
+ container.remove(force=True)
346
+ return True
347
+
309
348
  def _ensure_llm_network(self) -> str:
310
349
  """Get or create the shared Docker network for the LLM stack."""
311
350
  try:
File without changes