cloudwright-ai-cli 0.2.23__tar.gz → 0.2.25__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 (37) hide show
  1. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/.gitignore +5 -1
  2. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/PKG-INFO +1 -1
  3. cloudwright_ai_cli-0.2.25/cloudwright_cli/__init__.py +1 -0
  4. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/chat.py +0 -1
  5. cloudwright_ai_cli-0.2.25/cloudwright_cli/commands/databricks_cmd.py +56 -0
  6. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/main.py +2 -0
  7. cloudwright_ai_cli-0.2.23/CLAUDE.md +0 -23
  8. cloudwright_ai_cli-0.2.23/cloudwright_cli/__init__.py +0 -1
  9. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/README.md +0 -0
  10. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/__main__.py +0 -0
  11. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/__init__.py +0 -0
  12. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/analyze_cmd.py +0 -0
  13. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/catalog_cmd.py +0 -0
  14. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/compare.py +0 -0
  15. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/cost.py +0 -0
  16. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/design.py +0 -0
  17. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/diff.py +0 -0
  18. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/drift_cmd.py +0 -0
  19. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/export.py +0 -0
  20. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/import_cmd.py +0 -0
  21. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/init_cmd.py +0 -0
  22. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/lint_cmd.py +0 -0
  23. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/modify_cmd.py +0 -0
  24. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/policy.py +0 -0
  25. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/refresh_cmd.py +0 -0
  26. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/score_cmd.py +0 -0
  27. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/commands/validate.py +0 -0
  28. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/project.py +0 -0
  29. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/py.typed +0 -0
  30. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/cloudwright_cli/utils.py +0 -0
  31. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/pyproject.toml +0 -0
  32. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/__init__.py +0 -0
  33. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_cli.py +0 -0
  34. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_drift_cmd.py +0 -0
  35. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_init.py +0 -0
  36. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_modify_cmd.py +0 -0
  37. {cloudwright_ai_cli-0.2.23 → cloudwright_ai_cli-0.2.25}/tests/test_project.py +0 -0
@@ -12,5 +12,9 @@ node_modules/
12
12
  .pytest_cache/
13
13
  .mypy_cache/
14
14
 
15
- # Codebase intelligence (auto-generated)
15
+ # AI tooling
16
+ .claude/
16
17
  .planning/
18
+ CLAUDE.md
19
+ packages/*/CLAUDE.md
20
+ docs/fix-plan.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudwright-ai-cli
3
- Version: 0.2.23
3
+ Version: 0.2.25
4
4
  Summary: CLI for Cloudwright architecture intelligence
5
5
  Project-URL: Homepage, https://github.com/xmpuspus/cloudwright
6
6
  Project-URL: Repository, https://github.com/xmpuspus/cloudwright
@@ -0,0 +1 @@
1
+ __version__ = "0.2.25"
@@ -247,7 +247,6 @@ def _run_validate(spec: ArchSpec, framework: str | None) -> None:
247
247
  console.print(f" [dim]{check.recommendation}[/dim]")
248
248
 
249
249
 
250
-
251
250
  def _print_cost_summary(spec: ArchSpec) -> None:
252
251
  from rich.table import Table
253
252
 
@@ -0,0 +1,56 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import Annotated
5
+
6
+ import typer
7
+ from rich.console import Console
8
+
9
+ console = Console()
10
+
11
+
12
+ def databricks_validate(
13
+ ctx: typer.Context,
14
+ spec_file: Annotated[Path, typer.Argument(help="Path to architecture spec YAML file", exists=True)],
15
+ host: Annotated[
16
+ str | None, typer.Option("--host", envvar="DATABRICKS_HOST", help="Databricks workspace URL")
17
+ ] = None,
18
+ token: Annotated[
19
+ str | None, typer.Option("--token", envvar="DATABRICKS_TOKEN", help="Databricks access token")
20
+ ] = None,
21
+ ) -> None:
22
+ """Validate Databricks components against a live workspace."""
23
+ from cloudwright import ArchSpec
24
+
25
+ spec = ArchSpec.from_file(spec_file)
26
+
27
+ dbx_components = [c for c in spec.components if c.provider == "databricks"]
28
+ if not dbx_components:
29
+ console.print("No Databricks components found in spec.")
30
+ raise typer.Exit(0)
31
+
32
+ try:
33
+ from cloudwright.adapters.databricks import DatabricksWorkspaceAdapter
34
+
35
+ adapter = DatabricksWorkspaceAdapter(host=host, token=token)
36
+ except ImportError:
37
+ console.print(
38
+ "[red]Error:[/red] databricks-sdk not installed. Run: pip install cloudwright-ai[databricks]",
39
+ err=True,
40
+ )
41
+ raise typer.Exit(1)
42
+
43
+ with console.status(f"Validating {len(dbx_components)} Databricks component(s)..."):
44
+ issues = adapter.validate_spec(spec)
45
+
46
+ if not issues:
47
+ console.print("[green]All Databricks components validated successfully.[/green]")
48
+ else:
49
+ severity_style = {"error": "red", "warning": "yellow", "info": "cyan"}
50
+ for issue in issues:
51
+ sev = issue["severity"]
52
+ style = severity_style.get(sev, "white")
53
+ console.print(f" [{style}][{sev.upper()}][/{style}] {issue['component']}: {issue['message']}")
54
+
55
+ has_errors = any(i["severity"] == "error" for i in issues)
56
+ raise typer.Exit(1 if has_errors else 0)
@@ -6,6 +6,7 @@ from cloudwright_cli.commands.catalog_cmd import catalog_app
6
6
  from cloudwright_cli.commands.chat import chat
7
7
  from cloudwright_cli.commands.compare import compare
8
8
  from cloudwright_cli.commands.cost import cost
9
+ from cloudwright_cli.commands.databricks_cmd import databricks_validate
9
10
  from cloudwright_cli.commands.design import design
10
11
  from cloudwright_cli.commands.diff import diff
11
12
  from cloudwright_cli.commands.drift_cmd import drift
@@ -63,4 +64,5 @@ app.command()(score)
63
64
  app.command()(analyze)
64
65
  app.command()(refresh)
65
66
  app.command()(lint)
67
+ app.command()(databricks_validate)
66
68
  app.add_typer(catalog_app, name="catalog")
@@ -1,23 +0,0 @@
1
- # cloudwright-cli
2
-
3
- CLI interface for Cloudwright. Wraps core package with Typer commands and Rich formatting.
4
-
5
- ## Commands
6
-
7
- All commands are in `cloudwright_cli/commands/`. Each is a standalone module registered in `main.py`.
8
-
9
- - `design` — Generate architecture from natural language
10
- - `cost` — Price an ArchSpec, optional multi-cloud comparison
11
- - `compare` — Full multi-cloud architecture comparison
12
- - `validate` — Compliance and Well-Architected checks
13
- - `export` — Export to Terraform, CFN, Mermaid, SBOM, AIBOM
14
- - `diff` — Compare two ArchSpec files
15
- - `chat` — Interactive terminal chat or web UI launcher
16
- - `catalog` — Subgroup with `search` and `compare` subcommands
17
-
18
- ## Conventions
19
-
20
- - Typer for argument parsing, Rich for output formatting
21
- - All output goes through Rich Console for consistent formatting
22
- - Errors shown as `[red]Error:[/red] message`
23
- - Tables for data, Panels for summaries, Syntax blocks for YAML/HCL
@@ -1 +0,0 @@
1
- __version__ = "0.2.23"