dbagent-cli 0.9.5__tar.gz → 0.9.6__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.
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/PKG-INFO +1 -1
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/__init__.py +1 -1
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/generator.py +10 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/pipeline.py +8 -2
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/connectors/base.py +4 -1
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent_cli.egg-info/PKG-INFO +1 -1
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/pyproject.toml +1 -1
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/README.md +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/confidence.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/conversation.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/doctor.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/error_classifier.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/recommender.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/agent/validator.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/cli.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/config.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/connectors/factory.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/connectors/mongo.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/connectors/relational.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/__init__.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/cache.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/changeset.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/cost.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/recovery.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/sandbox.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/execution/streaming.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/anthropic_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/auto_setup.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/base.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/deepseek_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/factory.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/gemini_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/groq_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/mistral_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/mock_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/ollama_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/openai_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/llm/openrouter_provider.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/cache.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/formatter.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/graph.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/ground_truth.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/models.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/retriever.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/schema/selector.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/security/__init__.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/security/audit.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/security/environment.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/security/masking.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/security/modes.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/security/rbac.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/semantic/__init__.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/semantic/dictionary.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/semantic/knowledge.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/semantic/templates.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/sql/__init__.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/sql/optimizer.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/sql/validator.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/ui/chat_screen.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/ui/console.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/ui/grid_window.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/ui/viewer.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent/ui/visualizer.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent_cli.egg-info/SOURCES.txt +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent_cli.egg-info/dependency_links.txt +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent_cli.egg-info/entry_points.txt +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent_cli.egg-info/requires.txt +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/dbagent_cli.egg-info/top_level.txt +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/setup.cfg +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_cache.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_cli.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_connectors.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_direct_sql.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_doctor_and_viz.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_generator.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_graph.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_knowledge.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_providers.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_recovery.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_safety.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_sandbox.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_schema.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_security.py +0 -0
- {dbagent_cli-0.9.5 → dbagent_cli-0.9.6}/tests/test_semantic.py +0 -0
|
@@ -168,11 +168,21 @@ class ScriptGenerator:
|
|
|
168
168
|
"mappings also", "find all mappings", "check links", "check mappings",
|
|
169
169
|
"is fk_", "are fk_", "is pk_", "are pk_", "difference between", "compare",
|
|
170
170
|
"tell me", "check it and tell me", "check and tell me", "same or different",
|
|
171
|
+
"flow diagram", "flow chart", "give the flow diagram", "give the diagram",
|
|
172
|
+
"show flow diagram", "give diagram", "show diagram", "architecture diagram",
|
|
171
173
|
]
|
|
172
174
|
for kw in analysis_keywords:
|
|
173
175
|
if kw in prompt_lower:
|
|
174
176
|
return "analysis"
|
|
175
177
|
|
|
178
|
+
# Regex for "how <X> and <Y> were/are linked/connected/related"
|
|
179
|
+
if re.search(r'\bhow\b.*\b(?:linked|connected|related|mapped|joined)\b', prompt_lower):
|
|
180
|
+
return "analysis"
|
|
181
|
+
|
|
182
|
+
# Regex for diagram / blueprint requests
|
|
183
|
+
if re.search(r'\b(?:flow\s+diagram|diagram|flow\s+chart|blueprint|er\s+diagram)\b', prompt_lower):
|
|
184
|
+
return "analysis"
|
|
185
|
+
|
|
176
186
|
# Comparative analysis questions (e.g. "is fk_site_group_id and fk_group_id same", "are table_a and table_b related")
|
|
177
187
|
if re.search(r'\b(?:is|are)\b.*\b(?:same|different|difference|related|equal|linked)\b', prompt_lower):
|
|
178
188
|
return "analysis"
|
|
@@ -241,7 +241,7 @@ class QueryPipeline:
|
|
|
241
241
|
if not exact and not fuzzy:
|
|
242
242
|
inherited = self.conversation.get_active_tables()
|
|
243
243
|
if inherited:
|
|
244
|
-
exact = inherited[:
|
|
244
|
+
exact = inherited[:8]
|
|
245
245
|
|
|
246
246
|
sub_schema, join_steps = self._get_fast_schema_context(user_prompt, exact, fuzzy)
|
|
247
247
|
result.schema = sub_schema
|
|
@@ -594,10 +594,16 @@ class QueryPipeline:
|
|
|
594
594
|
)
|
|
595
595
|
|
|
596
596
|
if result.success:
|
|
597
|
+
sql_tables = set()
|
|
598
|
+
if result.sql:
|
|
599
|
+
import re as _re
|
|
600
|
+
for m in _re.findall(r'\b(?:FROM|JOIN)\s+([a-zA-Z0-9_]+)', result.sql, _re.IGNORECASE):
|
|
601
|
+
sql_tables.add(m.lower())
|
|
602
|
+
turn_tables = list(set((exact or []) + (fuzzy or []) + list(sql_tables)))
|
|
597
603
|
self.conversation.add_turn(
|
|
598
604
|
user_prompt=user_prompt,
|
|
599
605
|
sql=result.sql,
|
|
600
|
-
tables=
|
|
606
|
+
tables=turn_tables,
|
|
601
607
|
is_chat=False,
|
|
602
608
|
)
|
|
603
609
|
|
|
@@ -63,7 +63,10 @@ class BaseConnector(ABC):
|
|
|
63
63
|
"onto", "over", "under", "before", "after", "during", "since", "until", "across", "along",
|
|
64
64
|
"throughout", "outside", "inside", "above", "below", "behind", "beyond", "plus", "except",
|
|
65
65
|
"but", "against", "towards", "upon", "within", "without", "give", "also", "explain", "look",
|
|
66
|
-
"know", "make", "take", "help", "view", "count", "done", "good", "nice", "okay", "fine"
|
|
66
|
+
"know", "make", "take", "help", "view", "count", "done", "good", "nice", "okay", "fine",
|
|
67
|
+
"flow", "diagram", "chart", "graph", "link", "links", "structure", "design", "model", "blueprint",
|
|
68
|
+
"mapping", "mappings", "overview", "query", "code", "script", "report", "summary", "relation",
|
|
69
|
+
"relations", "relationship", "relationships", "architecture"
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
raw_tokens = set(re.findall(r'\b[a-zA-Z0-9_]+\b', prompt_lower))
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dbagent-cli"
|
|
7
|
-
version = "0.9.
|
|
7
|
+
version = "0.9.6"
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|