dbagent-cli 0.7.3__tar.gz → 0.8.0__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 (81) hide show
  1. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/PKG-INFO +1 -1
  2. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/__init__.py +1 -1
  3. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/cli.py +12 -4
  4. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/ui/chat_screen.py +46 -26
  5. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent_cli.egg-info/PKG-INFO +1 -1
  6. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/pyproject.toml +1 -1
  7. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/README.md +0 -0
  8. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/confidence.py +0 -0
  9. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/conversation.py +0 -0
  10. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/doctor.py +0 -0
  11. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/error_classifier.py +0 -0
  12. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/generator.py +0 -0
  13. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/pipeline.py +0 -0
  14. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/recommender.py +0 -0
  15. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/agent/validator.py +0 -0
  16. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/config.py +0 -0
  17. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/connectors/base.py +0 -0
  18. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/connectors/factory.py +0 -0
  19. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/connectors/mongo.py +0 -0
  20. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/connectors/relational.py +0 -0
  21. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/__init__.py +0 -0
  22. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/cache.py +0 -0
  23. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/changeset.py +0 -0
  24. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/cost.py +0 -0
  25. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/recovery.py +0 -0
  26. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/sandbox.py +0 -0
  27. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/execution/streaming.py +0 -0
  28. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/anthropic_provider.py +0 -0
  29. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/auto_setup.py +0 -0
  30. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/base.py +0 -0
  31. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/deepseek_provider.py +0 -0
  32. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/factory.py +0 -0
  33. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/gemini_provider.py +0 -0
  34. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/groq_provider.py +0 -0
  35. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/mistral_provider.py +0 -0
  36. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/mock_provider.py +0 -0
  37. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/ollama_provider.py +0 -0
  38. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/openai_provider.py +0 -0
  39. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/llm/openrouter_provider.py +0 -0
  40. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/schema/cache.py +0 -0
  41. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/schema/formatter.py +0 -0
  42. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/schema/graph.py +0 -0
  43. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/schema/models.py +0 -0
  44. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/schema/retriever.py +0 -0
  45. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/schema/selector.py +0 -0
  46. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/security/__init__.py +0 -0
  47. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/security/audit.py +0 -0
  48. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/security/environment.py +0 -0
  49. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/security/masking.py +0 -0
  50. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/security/modes.py +0 -0
  51. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/security/rbac.py +0 -0
  52. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/semantic/__init__.py +0 -0
  53. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/semantic/dictionary.py +0 -0
  54. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/semantic/templates.py +0 -0
  55. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/sql/__init__.py +0 -0
  56. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/sql/optimizer.py +0 -0
  57. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/sql/validator.py +0 -0
  58. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/ui/console.py +0 -0
  59. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/ui/grid_window.py +0 -0
  60. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/ui/viewer.py +0 -0
  61. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent/ui/visualizer.py +0 -0
  62. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent_cli.egg-info/SOURCES.txt +0 -0
  63. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent_cli.egg-info/dependency_links.txt +0 -0
  64. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent_cli.egg-info/entry_points.txt +0 -0
  65. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent_cli.egg-info/requires.txt +0 -0
  66. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/dbagent_cli.egg-info/top_level.txt +0 -0
  67. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/setup.cfg +0 -0
  68. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_cache.py +0 -0
  69. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_cli.py +0 -0
  70. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_connectors.py +0 -0
  71. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_direct_sql.py +0 -0
  72. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_doctor_and_viz.py +0 -0
  73. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_generator.py +0 -0
  74. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_graph.py +0 -0
  75. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_providers.py +0 -0
  76. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_recovery.py +0 -0
  77. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_safety.py +0 -0
  78. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_sandbox.py +0 -0
  79. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_schema.py +0 -0
  80. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_security.py +0 -0
  81. {dbagent_cli-0.7.3 → dbagent_cli-0.8.0}/tests/test_semantic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbagent-cli
3
- Version: 0.7.3
3
+ Version: 0.8.0
4
4
  Summary: Enterprise AI Database Copilot, Schema Graph Introspector & Autonomous Recovery Agent (CLI)
5
5
  Author: Santhosh Gupta
6
6
  Requires-Python: >=3.9
@@ -2,5 +2,5 @@
2
2
  DB-Agent: Universal Database Introspection and Script Generation AI Agent (CLI).
3
3
  """
4
4
 
5
- __version__ = "0.7.3"
5
+ __version__ = "0.8.0"
6
6
  __author__ = "Santhosh Gupta"
@@ -9,6 +9,13 @@ import json
9
9
  import time
10
10
  import threading
11
11
  from pathlib import Path
12
+
13
+ if sys.platform == "win32":
14
+ try:
15
+ sys.stdout.reconfigure(encoding="utf-8")
16
+ sys.stderr.reconfigure(encoding="utf-8")
17
+ except Exception:
18
+ pass
12
19
  from typing import Optional, List, Dict, Any
13
20
  import typer
14
21
  from rich.prompt import Prompt, Confirm
@@ -508,17 +515,18 @@ def chat_command(
508
515
  def _get_bottom_toolbar():
509
516
  curr_model = model or getattr(llm, "default_model", "default")
510
517
  return HTML(
511
- f" <b><ansigreen>🟢 Connected:</ansigreen></b> {db_name} <ansidarkgray>({dialect}) • {len(table_names)} tables</ansidarkgray> │ "
512
- f"<b><ansicyan>🤖 AI:</ansicyan></b> {llm.name} <ansigreen>({curr_model})</ansigreen> │ "
518
+ f" <b><ansigreen>● Connected:</ansigreen></b> <ansibrightwhite>{db_name}</ansibrightwhite> <ansidarkgray>({dialect} • {len(table_names)} tables)</ansidarkgray> │ "
519
+ f"<b><ansicyan>🤖 {curr_model}</ansicyan></b> <ansidarkgray>({llm.name})</ansidarkgray> │ "
513
520
  f"<b><ansiyellow>🛡️ {current_mode.value}</ansiyellow></b> │ "
514
- f"<ansidarkgray>⌨️ <b>:help</b> for commands</ansidarkgray> "
521
+ f"<ansidarkgray><b>:help</b> for commands · <b>:models</b> to switch</ansidarkgray> "
515
522
  )
516
523
 
517
524
  while True:
518
525
  try:
519
526
  user_input = session.prompt(
520
- HTML("<ansicyan><b>db-agent</b></ansicyan> <ansiblue><b>❯</b></ansiblue> "),
527
+ HTML("<ansired><b>❯</b></ansired> "),
521
528
  bottom_toolbar=_get_bottom_toolbar,
529
+ placeholder=HTML("<ansidarkgray><i>Ask in plain English or paste SQL (e.g. \"list active users\")...</i></ansidarkgray>"),
522
530
  ).strip()
523
531
  if not user_input:
524
532
  continue
@@ -26,6 +26,15 @@ def clear_screen() -> None:
26
26
  os.system("cls" if os.name == "nt" else "clear")
27
27
 
28
28
 
29
+ MASCOT_ART = """
30
+ ▄ ▄
31
+ ██▀█ █▀██
32
+ █████████
33
+ █ █ █ █ █
34
+ █ █
35
+ """
36
+
37
+
29
38
  def render_chat_header(
30
39
  db_name: str,
31
40
  dialect: str,
@@ -35,33 +44,44 @@ def render_chat_header(
35
44
  mode: str = "CONFIRM",
36
45
  recommendations: Optional[List[str]] = None,
37
46
  ) -> None:
38
- """Render the top Claude-style status header card."""
39
- model_str = f" ({ai_model})" if ai_model else ""
40
-
41
- header_content = Text()
42
- header_content.append("⚡ DB-AGENT ", style="bold cyan")
43
- header_content.append(f"v{__version__}\n", style="bold green")
44
-
45
- header_content.append("🟢 Connected: ", style="bold green")
46
- header_content.append(f"{db_name} ", style="bold white")
47
- header_content.append(f"({dialect}) • {table_count} tables\n", style="dim")
48
-
49
- header_content.append("🤖 AI: ", style="bold cyan")
50
- header_content.append(f"{ai_provider}{model_str}", style="bold white")
51
- header_content.append(" | ", style="dim")
52
- header_content.append("🛡️ Mode: ", style="bold yellow")
53
- header_content.append(f"{mode}", style="bold yellow")
54
- header_content.append(" | ", style="dim")
55
- header_content.append("⌨️ Type ", style="dim")
56
- header_content.append(":help", style="bold cyan")
57
- header_content.append(" for commands", style="dim")
58
-
59
- panel = Panel(
60
- header_content,
61
- border_style="cyan",
62
- padding=(0, 1),
47
+ """Render the exact Claude Code CLI split-card header panel."""
48
+ model_str = ai_model or "gemini-3.6-flash"
49
+
50
+ # Left Column: Greeting, Mascot, Connected Model & DB Path
51
+ left_grid = Table.grid(padding=(0, 1))
52
+ left_grid.add_column(justify="center", min_width=28)
53
+ left_grid.add_row("[bold white]Welcome back![/bold white]")
54
+ left_grid.add_row(f"[bold #D97757]{MASCOT_ART.strip()}[/bold #D97757]")
55
+ left_grid.add_row(f"[dim white]{model_str} · {ai_provider}[/dim white]")
56
+ left_grid.add_row(f"[dim]{db_name} ({dialect} • {table_count} tables)[/dim]")
57
+
58
+ # Right Column: Tips for getting started + What's new in v0.8.0
59
+ right_grid = Table.grid(padding=(0, 1))
60
+ right_grid.add_column()
61
+ right_grid.add_row("[bold #D97757]Tips for getting started[/bold #D97757]")
62
+ right_grid.add_row("[dim]Ask in plain English or paste direct SQL for 0ms execution[/dim]")
63
+ right_grid.add_row("[dim]Type :help to inspect tables (:tables), relations (:fk), or diagnostics (:doctor)[/dim]")
64
+ right_grid.add_row("[dim]────────────────────────────────────────────────────────────────────────[/dim]")
65
+ right_grid.add_row("[bold #D97757]What's new in v0.8.0[/bold #D97757]")
66
+ right_grid.add_row("[dim]Added Universal AI: Claude 3.7 Sonnet, OpenAI GPT-4o, DeepSeek R1, Mistral, Gemini[/dim]")
67
+ right_grid.add_row("[dim]Added Zero-Latency Direct SQL Fast-Path with autonomous AI auto-repair on error[/dim]")
68
+ right_grid.add_row("[dim]Added Multi-turn conversational session memory graph & persistent connection pooling[/dim]")
69
+
70
+ layout_table = Table.grid(expand=True, padding=(0, 2))
71
+ layout_table.add_column(ratio=2)
72
+ layout_table.add_column(ratio=3)
73
+ layout_table.add_row(left_grid, right_grid)
74
+
75
+ header_panel = Panel(
76
+ layout_table,
77
+ title=f"[bold #D97757] DB-Agent v{__version__} [/bold #D97757]",
78
+ title_align="left",
79
+ border_style="#D97757",
80
+ padding=(1, 1),
63
81
  )
64
- console.print(panel)
82
+
83
+ console.print(header_panel)
84
+ console.print(f"[bold #D97757]│[/bold #D97757] [bold #D97757]⚡ Claude 3.7 & Gemini 3.7 are live![/bold #D97757] [dim]Type [bold white]:models[/bold white] to switch models · [bold white]:doctor[/bold white] for diagnostics[/dim]\n")
65
85
 
66
86
  if recommendations:
67
87
  console.print("[dim italic]💡 Try asking:[/dim italic]")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dbagent-cli
3
- Version: 0.7.3
3
+ Version: 0.8.0
4
4
  Summary: Enterprise AI Database Copilot, Schema Graph Introspector & Autonomous Recovery Agent (CLI)
5
5
  Author: Santhosh Gupta
6
6
  Requires-Python: >=3.9
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "dbagent-cli"
7
- version = "0.7.3"
7
+ version = "0.8.0"
8
8
  description = "Enterprise AI Database Copilot, Schema Graph Introspector & Autonomous Recovery Agent (CLI)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes