gibson-cli 0.8.1__tar.gz → 0.8.3__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.
- {gibson_cli-0.8.1/gibson_cli.egg-info → gibson_cli-0.8.3}/PKG-INFO +1 -1
- gibson_cli-0.8.3/bin/release.sh +5 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/api/BaseApi.py +1 -5
- gibson_cli-0.8.3/gibson/api/DataApi.py +18 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/api/ProjectApi.py +0 -1
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/bin/gibson.py +6 -4
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/auth/Logout.py +2 -2
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/mcp/McpServer.py +1 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/CommandRouter.py +4 -1
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Configuration.py +11 -4
- gibson_cli-0.8.3/gibson/services/mcp/server.py +145 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3/gibson_cli.egg-info}/PKG-INFO +1 -1
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/SOURCES.txt +1 -1
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/pyproject.toml +1 -1
- gibson_cli-0.8.1/bin/gibson +0 -26
- gibson_cli-0.8.1/bin/release.sh +0 -5
- gibson_cli-0.8.1/gibson/services/mcp/server.py +0 -87
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/.gitignore +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/.pre-commit-config.yaml +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/README.md +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/bin/build.sh +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/bin/clean.sh +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/api/Cli.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/BaseCommand.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Build.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Conf.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Count.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Dev.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Forget.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Help.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Merge.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Modify.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Question.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Remove.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Show.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Tree.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Version.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/auth/Auth.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/auth/Login.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Api.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Base.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Code.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Model.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Models.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Schema.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Schemas.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Test.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Tests.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/importer/Import.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/importer/OpenApi.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/list/Entities.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/list/List.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/list/Projects.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/new/Module.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/new/New.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/new/Project.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/rename/Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/rename/Rename.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/rewrite/Rewrite.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/tests/test_command_BaseCommand.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/tests/test_command_Conf.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Api.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Code.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Custom.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Datastore.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Dependencies.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Dev.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Frameworks.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Modeler.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Paths.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Platform.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Project.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Version.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Api.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Base.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Model.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Schema.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/tests/test_conf_Dependencies.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/tests/test_conf_Platform.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Colors.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Completions.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Conversation.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Diff.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Env.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Memory.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/PythonPath.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Spinner.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/TimeKeeper.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/utils.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/bash-completion.tmpl +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/mysql/default-ref-table.tmpl +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/mysql/default-table.tmpl +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/postgresql/default-ref-table.tmpl +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/postgresql/default-table.tmpl +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/db/TableExceptions.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/db/tests/test_db_TableExceptions.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/dev/Dev.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/Header.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/WorkspaceFooter.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/WorkspaceHeader.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/tests/test_display_Header.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/tests/test_display_WorkspaceFooter.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/tests/test_display_WorkspaceHeader.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/lang/Python.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/lang/tests/test_lang_Python.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/auth/Server.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/DataDictionary.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/EntityKeys.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/Manager.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/tests/test_code_context_schema_DataDictionary.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/tests/test_code_context_schema_EntityKeys.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/tests/test_code_context_schema_Manager.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/Authenticator.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/BaseCustomization.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/CustomizationManager.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/Index.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/tests/test_code_customization_Authenticator.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/tests/test_code_customization_BaseCustomization.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/constraints/ReferenceConstraint.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/ForeignKey.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/Index.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/IndexAttribute.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_ForeignKey.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_Index.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_IndexAttribute.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/testing.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/tests/test_structure_mysql_Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/References.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/table/ForeignKey.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/table/tests/test_structure_postgresql_table_ForeignKey.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/testing.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/tests/test_structure_postgresql_Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/tests/test_structure_Entity.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/tests/test_Env.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/tests/test_Memory.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/tests/test_utils.py +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/dependency_links.txt +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/entry_points.txt +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/requires.txt +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/top_level.txt +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/requirements.txt +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/setup.cfg +0 -0
- {gibson_cli-0.8.1 → gibson_cli-0.8.3}/venv/bin/activate_this.py +0 -0
@@ -2,7 +2,6 @@ import pprint
|
|
2
2
|
|
3
3
|
import requests
|
4
4
|
|
5
|
-
import gibson.core.Colors as Colors
|
6
5
|
from gibson.core.Configuration import Configuration
|
7
6
|
|
8
7
|
|
@@ -103,10 +102,7 @@ class BaseApi:
|
|
103
102
|
|
104
103
|
def __raise_for_status(self, r):
|
105
104
|
if r.status_code == 401:
|
106
|
-
self.configuration.
|
107
|
-
f"\nYou need to log in to continue. Please run {Colors.command(self.configuration.command, 'auth', args='login')} and then try again.\n"
|
108
|
-
)
|
109
|
-
exit(1)
|
105
|
+
self.configuration.login_required()
|
110
106
|
|
111
107
|
try:
|
112
108
|
r.raise_for_status()
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from gibson.api.BaseApi import BaseApi
|
2
|
+
from gibson.core.Configuration import Configuration
|
3
|
+
|
4
|
+
|
5
|
+
class DataApi(BaseApi):
|
6
|
+
PREFIX = "-"
|
7
|
+
|
8
|
+
def __init__(self, configuration: Configuration, api_key: str):
|
9
|
+
self.configuration = configuration
|
10
|
+
self.api_key = api_key or self.configuration.project.api.key
|
11
|
+
|
12
|
+
def headers(self):
|
13
|
+
headers = super().headers()
|
14
|
+
headers["X-Gibson-API-Key"] = self.api_key
|
15
|
+
return headers
|
16
|
+
|
17
|
+
def query(self, query: str):
|
18
|
+
return self.post("query", {"query": query}).json()
|
@@ -1,16 +1,18 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
|
3
|
+
import os
|
4
|
+
|
3
5
|
from gibson.core.CommandRouter import CommandRouter
|
4
6
|
from gibson.core.Configuration import Configuration
|
7
|
+
from gibson.display.Header import Header
|
5
8
|
|
6
9
|
|
7
10
|
def main():
|
11
|
+
if os.getenv("GIBSON_CLI_DEV"):
|
12
|
+
print(f"{Header().render('dev mode')}\n")
|
8
13
|
try:
|
9
14
|
configuration = Configuration()
|
10
|
-
|
11
|
-
configuration.initialize()
|
12
|
-
else:
|
13
|
-
CommandRouter(configuration).run()
|
15
|
+
CommandRouter(configuration).run()
|
14
16
|
except KeyboardInterrupt:
|
15
17
|
exit(1)
|
16
18
|
|
@@ -3,6 +3,6 @@ from gibson.command.BaseCommand import BaseCommand
|
|
3
3
|
|
4
4
|
class Logout(BaseCommand):
|
5
5
|
def execute(self):
|
6
|
-
self.configuration.
|
7
|
-
self.conversation.type(
|
6
|
+
self.configuration.set_auth_tokens(None, None)
|
7
|
+
self.conversation.type("You are now logged out.")
|
8
8
|
self.conversation.newline()
|
@@ -12,6 +12,7 @@ class McpServer(BaseCommand):
|
|
12
12
|
# Setup signal handlers to exit the server
|
13
13
|
signal.signal(signal.SIGTERM, lambda signo, frame: sys.exit(0))
|
14
14
|
signal.signal(signal.SIGINT, lambda signo, frame: sys.exit(0))
|
15
|
+
self.conversation.type("GibsonAI MCP server running...\n")
|
15
16
|
mcp.run()
|
16
17
|
else:
|
17
18
|
self.usage()
|
@@ -33,7 +33,10 @@ class CommandRouter:
|
|
33
33
|
|
34
34
|
def run(self):
|
35
35
|
if len(sys.argv) == 1:
|
36
|
-
|
36
|
+
if self.configuration.settings is None:
|
37
|
+
self.configuration.initialize()
|
38
|
+
else:
|
39
|
+
Help(self.configuration).execute()
|
37
40
|
return self
|
38
41
|
|
39
42
|
Env().verify(self.configuration)
|
@@ -17,11 +17,12 @@ class Configuration:
|
|
17
17
|
VERSION = 2
|
18
18
|
API_ENV = os.environ.get("GIBSONAI_API_ENV", "production")
|
19
19
|
|
20
|
-
def __init__(self):
|
20
|
+
def __init__(self, interactive=True):
|
21
21
|
self.command = None
|
22
22
|
if len(sys.argv) >= 1:
|
23
23
|
self.command = sys.argv[0].split("/")[-1]
|
24
24
|
|
25
|
+
self.interactive = interactive
|
25
26
|
self.conversation = Conversation()
|
26
27
|
self.platform = Platform()
|
27
28
|
self.project = None
|
@@ -132,7 +133,7 @@ class Configuration:
|
|
132
133
|
os.remove(test_file)
|
133
134
|
|
134
135
|
return path
|
135
|
-
except:
|
136
|
+
except Exception:
|
136
137
|
self.conversation.newline()
|
137
138
|
self.conversation.type(
|
138
139
|
" Well this is embarrassing. I cannot write to that path.\n"
|
@@ -304,6 +305,13 @@ class Configuration:
|
|
304
305
|
self.set_auth_tokens(access_token, refresh_token)
|
305
306
|
return True
|
306
307
|
|
308
|
+
def login_required(self):
|
309
|
+
if self.interactive:
|
310
|
+
self.conversation.message_login_required(self)
|
311
|
+
exit(1)
|
312
|
+
|
313
|
+
return self
|
314
|
+
|
307
315
|
def read_config(self):
|
308
316
|
try:
|
309
317
|
with open(self.paths.config, "r") as f:
|
@@ -317,8 +325,7 @@ class Configuration:
|
|
317
325
|
|
318
326
|
def require_login(self):
|
319
327
|
if self.get_access_token() is None:
|
320
|
-
self.
|
321
|
-
exit(1)
|
328
|
+
self.login_required()
|
322
329
|
|
323
330
|
return self
|
324
331
|
|
@@ -0,0 +1,145 @@
|
|
1
|
+
from typing import Dict, List
|
2
|
+
|
3
|
+
from mcp.server.fastmcp import FastMCP
|
4
|
+
from requests.exceptions import HTTPError
|
5
|
+
|
6
|
+
from gibson.api.DataApi import DataApi
|
7
|
+
from gibson.api.ProjectApi import ProjectApi
|
8
|
+
from gibson.core.Configuration import Configuration
|
9
|
+
|
10
|
+
mcp = FastMCP("GibsonAI")
|
11
|
+
|
12
|
+
# Note: Resources are not yet supported by Cursor, everything must be implemented as a tool
|
13
|
+
# See https://docs.cursor.com/context/model-context-protocol#limitations
|
14
|
+
|
15
|
+
|
16
|
+
def error_handler(e: HTTPError) -> Dict:
|
17
|
+
"""Handle HTTP errors from the API"""
|
18
|
+
status_code = e.response.status_code
|
19
|
+
message = e.response.json()
|
20
|
+
if status_code == 401:
|
21
|
+
message = "Authentication required. Run `uvx --from gibson-cli@latest gibson auth login` to authenticate then try again."
|
22
|
+
return {"status_code": status_code, "error": message}
|
23
|
+
|
24
|
+
|
25
|
+
@mcp.tool()
|
26
|
+
def get_projects() -> List[Dict]:
|
27
|
+
"""Get all GibsonAI projects"""
|
28
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
29
|
+
try:
|
30
|
+
return project_api.list()
|
31
|
+
except HTTPError as e:
|
32
|
+
return error_handler(e)
|
33
|
+
|
34
|
+
|
35
|
+
@mcp.tool()
|
36
|
+
def create_project() -> Dict:
|
37
|
+
"""Create a new GibsonAI project"""
|
38
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
39
|
+
try:
|
40
|
+
return project_api.create()
|
41
|
+
except HTTPError as e:
|
42
|
+
return error_handler(e)
|
43
|
+
|
44
|
+
|
45
|
+
@mcp.tool()
|
46
|
+
def get_project_details(uuid: str) -> Dict:
|
47
|
+
"""Get a GibsonAI project's details"""
|
48
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
49
|
+
try:
|
50
|
+
return project_api.lookup(uuid=uuid)
|
51
|
+
except HTTPError as e:
|
52
|
+
return error_handler(e)
|
53
|
+
|
54
|
+
|
55
|
+
@mcp.tool()
|
56
|
+
def get_project_hosted_api_details(uuid: str) -> str:
|
57
|
+
"""
|
58
|
+
Get a GibsonAI project's hosted API details
|
59
|
+
This includes necessary context for an LLM to understand and generate API calls related to fetching or modifying the project's data
|
60
|
+
"""
|
61
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
62
|
+
try:
|
63
|
+
return project_api.mcp(uuid=uuid)
|
64
|
+
except HTTPError as e:
|
65
|
+
return error_handler(e)
|
66
|
+
|
67
|
+
|
68
|
+
@mcp.tool()
|
69
|
+
def update_project(uuid: str, project_name: str) -> Dict:
|
70
|
+
"""
|
71
|
+
Update a GibsonAI project's details
|
72
|
+
This currently only updates the project's name
|
73
|
+
Returns the updated project details
|
74
|
+
"""
|
75
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
76
|
+
try:
|
77
|
+
return project_api.update(uuid=uuid, name=project_name)
|
78
|
+
except HTTPError as e:
|
79
|
+
return error_handler(e)
|
80
|
+
|
81
|
+
|
82
|
+
@mcp.tool()
|
83
|
+
def submit_data_modeling_request(uuid: str, data_modeling_request: str) -> Dict:
|
84
|
+
"""
|
85
|
+
Submit a data modeling request for a GibsonAI project
|
86
|
+
This tool fully handles all data modeling, you should provide the user's request as-is
|
87
|
+
Returns the response from the LLM
|
88
|
+
"""
|
89
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
90
|
+
try:
|
91
|
+
return project_api.submit_message(uuid=uuid, message=data_modeling_request)
|
92
|
+
except HTTPError as e:
|
93
|
+
return error_handler(e)
|
94
|
+
|
95
|
+
|
96
|
+
@mcp.tool()
|
97
|
+
def deploy_project(uuid: str) -> None:
|
98
|
+
"""
|
99
|
+
Deploy a GibsonAI project's hosted databases
|
100
|
+
This deploys both the development and production databases simultaneously and automatically handles the migrations
|
101
|
+
"""
|
102
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
103
|
+
try:
|
104
|
+
return project_api.deploy(uuid=uuid)
|
105
|
+
except HTTPError as e:
|
106
|
+
return error_handler(e)
|
107
|
+
|
108
|
+
|
109
|
+
@mcp.tool()
|
110
|
+
def get_project_schema(uuid: str) -> str:
|
111
|
+
"""
|
112
|
+
Get the schema for a GibsonAI project
|
113
|
+
This includes any changes made to the schema since the last deployment
|
114
|
+
"""
|
115
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
116
|
+
try:
|
117
|
+
return project_api.schema(uuid=uuid)
|
118
|
+
except HTTPError as e:
|
119
|
+
return error_handler(e)
|
120
|
+
|
121
|
+
|
122
|
+
@mcp.tool()
|
123
|
+
def get_deployed_schema(uuid: str) -> str:
|
124
|
+
"""
|
125
|
+
Get the deployed schema for a GibsonAI project
|
126
|
+
This is the schema that is currently live on the project's hosted databases
|
127
|
+
"""
|
128
|
+
project_api = ProjectApi(Configuration(interactive=False))
|
129
|
+
try:
|
130
|
+
return project_api.database_schema(uuid=uuid)
|
131
|
+
except HTTPError as e:
|
132
|
+
return error_handler(e)
|
133
|
+
|
134
|
+
|
135
|
+
@mcp.tool()
|
136
|
+
def query_database(api_key: str, query: str) -> List[Dict] | None | Dict:
|
137
|
+
"""
|
138
|
+
Query a GibsonAI project's hosted database using SQL
|
139
|
+
Note: the environment-specific API key must be provided
|
140
|
+
"""
|
141
|
+
data_api = DataApi(Configuration(interactive=False), api_key=api_key)
|
142
|
+
try:
|
143
|
+
return data_api.query(query=query)
|
144
|
+
except HTTPError as e:
|
145
|
+
return error_handler(e)
|
gibson_cli-0.8.1/bin/gibson
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
#!/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
|
4
|
-
# This file is identical to what pip creates when you install an executable package, but it adds a dev mode banner.
|
5
|
-
# To easily switch between dev mode and installed mode, add the following functions to your .zshrc or .bashrc:
|
6
|
-
#
|
7
|
-
# cli_dev_on() {
|
8
|
-
# export PATH="$HOME/src/gibson/cli/bin:$PATH"
|
9
|
-
# export PYTHONPATH="$HOME/src/gibson/cli:$PYTHONPATH"
|
10
|
-
# }
|
11
|
-
#
|
12
|
-
# cli_dev_off() {
|
13
|
-
# export PATH=${PATH//$HOME\/src\/gibson\/cli\/bin:/}
|
14
|
-
# export PYTHONPATH=${PYTHONPATH//$HOME\/src\/gibson\/cli:/}
|
15
|
-
# }
|
16
|
-
|
17
|
-
import re
|
18
|
-
import sys
|
19
|
-
|
20
|
-
from gibson.bin.gibson import main
|
21
|
-
from gibson.display.Header import Header
|
22
|
-
|
23
|
-
if __name__ == "__main__":
|
24
|
-
print(f"{Header().render('dev mode')}\n")
|
25
|
-
sys.argv[0] = re.sub(r"(-script\.pyw|\.exe)?$", "", sys.argv[0])
|
26
|
-
sys.exit(main())
|
gibson_cli-0.8.1/bin/release.sh
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
from typing import Dict, List
|
2
|
-
|
3
|
-
from mcp.server.fastmcp import FastMCP
|
4
|
-
|
5
|
-
from gibson.api.ProjectApi import ProjectApi
|
6
|
-
from gibson.core.Configuration import Configuration
|
7
|
-
|
8
|
-
mcp = FastMCP("GibsonAI")
|
9
|
-
|
10
|
-
project_api = ProjectApi(Configuration())
|
11
|
-
|
12
|
-
# Note: Resources are not yet supported by Cursor, everything must be implemented as a tool
|
13
|
-
# See https://docs.cursor.com/context/model-context-protocol#limitations
|
14
|
-
|
15
|
-
|
16
|
-
@mcp.tool()
|
17
|
-
def get_projects() -> List[Dict]:
|
18
|
-
"""Get all GibsonAI projects"""
|
19
|
-
return project_api.list()
|
20
|
-
|
21
|
-
|
22
|
-
@mcp.tool()
|
23
|
-
def create_project() -> Dict:
|
24
|
-
"""Create a new GibsonAI project"""
|
25
|
-
return project_api.create()
|
26
|
-
|
27
|
-
|
28
|
-
@mcp.tool()
|
29
|
-
def get_project_details(uuid: str) -> Dict:
|
30
|
-
"""Get a GibsonAI project's details"""
|
31
|
-
return project_api.lookup(uuid=uuid)
|
32
|
-
|
33
|
-
|
34
|
-
@mcp.tool()
|
35
|
-
def get_project_hosted_api_details(uuid: str) -> str:
|
36
|
-
"""
|
37
|
-
Get a GibsonAI project's hosted API details
|
38
|
-
This includes necessary context for an LLM to understand and generate API calls related to fetching or modifying the project's data
|
39
|
-
"""
|
40
|
-
return project_api.mcp(uuid=uuid)
|
41
|
-
|
42
|
-
|
43
|
-
@mcp.tool()
|
44
|
-
def update_project(uuid: str, project_name: str) -> Dict:
|
45
|
-
"""
|
46
|
-
Update a GibsonAI project's details
|
47
|
-
This currently only updates the project's name
|
48
|
-
Returns the updated project details
|
49
|
-
"""
|
50
|
-
return project_api.update(uuid=uuid, name=project_name)
|
51
|
-
|
52
|
-
|
53
|
-
@mcp.tool()
|
54
|
-
def submit_data_modeling_request(uuid: str, data_modeling_request: str) -> Dict:
|
55
|
-
"""
|
56
|
-
Submit a data modeling request for a GibsonAI project
|
57
|
-
This tool fully handles all data modeling, you should provide the user's request as-is
|
58
|
-
Returns the response from the LLM
|
59
|
-
"""
|
60
|
-
return project_api.submit_message(uuid=uuid, message=data_modeling_request)
|
61
|
-
|
62
|
-
|
63
|
-
@mcp.tool()
|
64
|
-
def deploy_project(uuid: str) -> None:
|
65
|
-
"""
|
66
|
-
Deploy a GibsonAI project's hosted databases
|
67
|
-
This deploys both the development and production databases simultaneously and automatically handles the migrations
|
68
|
-
"""
|
69
|
-
project_api.deploy(uuid=uuid)
|
70
|
-
|
71
|
-
|
72
|
-
@mcp.tool()
|
73
|
-
def get_project_schema(uuid: str) -> str:
|
74
|
-
"""
|
75
|
-
Get the schema for a GibsonAI project
|
76
|
-
This includes any changes made to the schema since the last deployment
|
77
|
-
"""
|
78
|
-
return project_api.schema(uuid=uuid)
|
79
|
-
|
80
|
-
|
81
|
-
@mcp.tool()
|
82
|
-
def get_deployed_schema(uuid: str) -> str:
|
83
|
-
"""
|
84
|
-
Get the deployed schema for a GibsonAI project
|
85
|
-
This is the schema that is currently live on the project's hosted databases
|
86
|
-
"""
|
87
|
-
return project_api.database_schema(uuid=uuid)
|
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
|
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
|
{gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/BaseCustomization.py
RENAMED
File without changes
|
{gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/CustomizationManager.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/constraints/ReferenceConstraint.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/tests/test_structure_mysql_Entity.py
RENAMED
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
|