llamactl 0.3.14__tar.gz → 0.3.15__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 (39) hide show
  1. {llamactl-0.3.14 → llamactl-0.3.15}/PKG-INFO +3 -3
  2. {llamactl-0.3.14 → llamactl-0.3.15}/pyproject.toml +3 -3
  3. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/deployment_form.py +26 -5
  4. {llamactl-0.3.14 → llamactl-0.3.15}/README.md +0 -0
  5. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/__init__.py +0 -0
  6. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/app.py +0 -0
  7. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/auth/client.py +0 -0
  8. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/client.py +0 -0
  9. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/commands/aliased_group.py +0 -0
  10. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/commands/auth.py +0 -0
  11. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/commands/deployment.py +0 -0
  12. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/commands/env.py +0 -0
  13. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/commands/init.py +0 -0
  14. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/commands/serve.py +0 -0
  15. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/_config.py +0 -0
  16. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/_migrations.py +0 -0
  17. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/auth_service.py +0 -0
  18. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/env_service.py +0 -0
  19. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/migrations/0001_init.sql +0 -0
  20. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/migrations/0002_add_auth_fields.sql +0 -0
  21. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/migrations/__init__.py +0 -0
  22. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/config/schema.py +0 -0
  23. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/debug.py +0 -0
  24. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/env.py +0 -0
  25. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/interactive_prompts/session_utils.py +0 -0
  26. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/interactive_prompts/utils.py +0 -0
  27. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/options.py +0 -0
  28. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/py.typed +0 -0
  29. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/styles.py +0 -0
  30. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/deployment_help.py +0 -0
  31. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/deployment_monitor.py +0 -0
  32. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/git_validation.py +0 -0
  33. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/github_callback_server.py +0 -0
  34. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/llama_loader.py +0 -0
  35. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/secrets_form.py +0 -0
  36. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/textual/styles.tcss +0 -0
  37. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/utils/env_inject.py +0 -0
  38. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/utils/redact.py +0 -0
  39. {llamactl-0.3.14 → llamactl-0.3.15}/src/llama_deploy/cli/utils/version.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: llamactl
3
- Version: 0.3.14
3
+ Version: 0.3.15
4
4
  Summary: A command-line interface for managing LlamaDeploy projects and deployments
5
5
  Author: Adrian Lyjak
6
6
  Author-email: Adrian Lyjak <adrianlyjak@gmail.com>
7
7
  License: MIT
8
- Requires-Dist: llama-deploy-core[client]>=0.3.14,<0.4.0
9
- Requires-Dist: llama-deploy-appserver>=0.3.14,<0.4.0
8
+ Requires-Dist: llama-deploy-core[client]>=0.3.15,<0.4.0
9
+ Requires-Dist: llama-deploy-appserver>=0.3.15,<0.4.0
10
10
  Requires-Dist: vibe-llama-core>=0.1.0
11
11
  Requires-Dist: rich>=13.0.0
12
12
  Requires-Dist: questionary>=2.0.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "llamactl"
3
- version = "0.3.14"
3
+ version = "0.3.15"
4
4
  description = "A command-line interface for managing LlamaDeploy projects and deployments"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -9,8 +9,8 @@ authors = [
9
9
  ]
10
10
  requires-python = ">=3.11, <4"
11
11
  dependencies = [
12
- "llama-deploy-core[client]>=0.3.14,<0.4.0",
13
- "llama-deploy-appserver>=0.3.14,<0.4.0",
12
+ "llama-deploy-core[client]>=0.3.15,<0.4.0",
13
+ "llama-deploy-appserver>=0.3.15,<0.4.0",
14
14
  "vibe-llama-core>=0.1.0",
15
15
  "rich>=13.0.0",
16
16
  "questionary>=2.0.0",
@@ -82,6 +82,8 @@ class DeploymentForm:
82
82
  installed_appserver_version: str | None = None
83
83
  existing_llama_deploy_version: str | None = None
84
84
  selected_appserver_version: str | None = None
85
+ # required secret names from config
86
+ required_secret_names: list[str] = field(default_factory=list)
85
87
 
86
88
  @classmethod
87
89
  def from_deployment(cls, deployment: DeploymentResponse) -> "DeploymentForm":
@@ -319,6 +321,12 @@ class DeploymentFormWidget(Widget):
319
321
 
320
322
  def on_button_pressed(self, event: Button.Pressed) -> None:
321
323
  if event.button.id == "save":
324
+ # Ensure latest input values are captured by blurring current focus first
325
+ try:
326
+ if self.screen.focused is not None:
327
+ self.screen.focused.blur()
328
+ except Exception:
329
+ pass
322
330
  self._save()
323
331
  elif event.button.id == "change_pat":
324
332
  updated_form = dataclasses.replace(self.resolve_form_data())
@@ -343,11 +351,11 @@ class DeploymentFormWidget(Widget):
343
351
  self.post_message(StartValidationMessage(self.form_data))
344
352
 
345
353
  def _validate_form(self) -> bool:
346
- """Validate required fields"""
354
+ """Validate required fields from the current UI state"""
347
355
  name_input = self.query_one("#name", Input)
348
356
  repo_url_input = self.query_one("#repo_url", Input)
349
357
 
350
- errors = []
358
+ errors: list[str] = []
351
359
 
352
360
  # Clear previous error state
353
361
  name_input.remove_class("error")
@@ -361,12 +369,19 @@ class DeploymentFormWidget(Widget):
361
369
  repo_url_input.add_class("error")
362
370
  errors.append("Repository URL is required")
363
371
 
372
+ missing_required: list[str] = []
373
+ for secret_name in sorted(self.form_data.required_secret_names):
374
+ value = (self.form_data.secrets.get(secret_name) or "").strip()
375
+ if value == "":
376
+ missing_required.append(secret_name)
377
+ if missing_required:
378
+ errors.append("Missing required secrets: " + ", ".join(missing_required))
379
+
364
380
  if errors:
365
381
  self._show_error("; ".join(errors))
366
382
  return False
367
- else:
368
- self._show_error("")
369
- return True
383
+ self._show_error("")
384
+ return True
370
385
 
371
386
  def _show_error(self, message: str) -> None:
372
387
  """Show an error message"""
@@ -408,6 +423,7 @@ class DeploymentFormWidget(Widget):
408
423
  installed_appserver_version=self.form_data.installed_appserver_version,
409
424
  existing_llama_deploy_version=self.form_data.existing_llama_deploy_version,
410
425
  selected_appserver_version=self.form_data.selected_appserver_version,
426
+ required_secret_names=self.form_data.required_secret_names,
411
427
  )
412
428
 
413
429
 
@@ -608,11 +624,15 @@ def _initialize_deployment_data() -> DeploymentForm:
608
624
  warnings: list[str] = []
609
625
  has_git = is_git_repo()
610
626
  has_no_workflows = False
627
+ required_secret_names: list[str] = []
611
628
  try:
612
629
  config = read_deployment_config(Path("."), Path("."))
613
630
  if config.name != DEFAULT_DEPLOYMENT_NAME:
614
631
  name = config.name
615
632
  has_no_workflows = config.has_no_workflows()
633
+ # Seed required secret names from config if present
634
+ required_secret_names = config.required_env_vars
635
+
616
636
  except Exception:
617
637
  warnings.append("Could not parse local deployment config. It may be invalid.")
618
638
  if not has_git and has_no_workflows:
@@ -685,6 +705,7 @@ def _initialize_deployment_data() -> DeploymentForm:
685
705
  env_info_messages=env_info_message,
686
706
  installed_appserver_version=installed,
687
707
  selected_appserver_version=installed,
708
+ required_secret_names=required_secret_names,
688
709
  )
689
710
  return form
690
711
 
File without changes