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.
Files changed (147) hide show
  1. {gibson_cli-0.8.1/gibson_cli.egg-info → gibson_cli-0.8.3}/PKG-INFO +1 -1
  2. gibson_cli-0.8.3/bin/release.sh +5 -0
  3. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/api/BaseApi.py +1 -5
  4. gibson_cli-0.8.3/gibson/api/DataApi.py +18 -0
  5. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/api/ProjectApi.py +0 -1
  6. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/bin/gibson.py +6 -4
  7. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/auth/Logout.py +2 -2
  8. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/mcp/McpServer.py +1 -0
  9. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/CommandRouter.py +4 -1
  10. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Configuration.py +11 -4
  11. gibson_cli-0.8.3/gibson/services/mcp/server.py +145 -0
  12. {gibson_cli-0.8.1 → gibson_cli-0.8.3/gibson_cli.egg-info}/PKG-INFO +1 -1
  13. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/SOURCES.txt +1 -1
  14. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/pyproject.toml +1 -1
  15. gibson_cli-0.8.1/bin/gibson +0 -26
  16. gibson_cli-0.8.1/bin/release.sh +0 -5
  17. gibson_cli-0.8.1/gibson/services/mcp/server.py +0 -87
  18. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/.gitignore +0 -0
  19. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/.pre-commit-config.yaml +0 -0
  20. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/README.md +0 -0
  21. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/bin/build.sh +0 -0
  22. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/bin/clean.sh +0 -0
  23. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/api/Cli.py +0 -0
  24. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/BaseCommand.py +0 -0
  25. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Build.py +0 -0
  26. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Conf.py +0 -0
  27. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Count.py +0 -0
  28. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Dev.py +0 -0
  29. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Forget.py +0 -0
  30. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Help.py +0 -0
  31. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Merge.py +0 -0
  32. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Modify.py +0 -0
  33. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Question.py +0 -0
  34. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Remove.py +0 -0
  35. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Show.py +0 -0
  36. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Tree.py +0 -0
  37. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/Version.py +0 -0
  38. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/auth/Auth.py +0 -0
  39. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/auth/Login.py +0 -0
  40. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Api.py +0 -0
  41. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Base.py +0 -0
  42. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Code.py +0 -0
  43. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Entity.py +0 -0
  44. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Model.py +0 -0
  45. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Models.py +0 -0
  46. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Schema.py +0 -0
  47. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Schemas.py +0 -0
  48. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Test.py +0 -0
  49. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/code/Tests.py +0 -0
  50. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/importer/Import.py +0 -0
  51. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/importer/OpenApi.py +0 -0
  52. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/list/Entities.py +0 -0
  53. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/list/List.py +0 -0
  54. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/list/Projects.py +0 -0
  55. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/new/Module.py +0 -0
  56. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/new/New.py +0 -0
  57. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/new/Project.py +0 -0
  58. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/rename/Entity.py +0 -0
  59. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/rename/Rename.py +0 -0
  60. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/rewrite/Rewrite.py +0 -0
  61. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/tests/test_command_BaseCommand.py +0 -0
  62. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/command/tests/test_command_Conf.py +0 -0
  63. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Api.py +0 -0
  64. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Code.py +0 -0
  65. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Custom.py +0 -0
  66. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Datastore.py +0 -0
  67. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Dependencies.py +0 -0
  68. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Dev.py +0 -0
  69. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Frameworks.py +0 -0
  70. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Modeler.py +0 -0
  71. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Paths.py +0 -0
  72. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Platform.py +0 -0
  73. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Project.py +0 -0
  74. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/Version.py +0 -0
  75. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Api.py +0 -0
  76. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Base.py +0 -0
  77. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Model.py +0 -0
  78. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/dev/Schema.py +0 -0
  79. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/tests/test_conf_Dependencies.py +0 -0
  80. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/conf/tests/test_conf_Platform.py +0 -0
  81. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Colors.py +0 -0
  82. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Completions.py +0 -0
  83. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Conversation.py +0 -0
  84. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Diff.py +0 -0
  85. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Env.py +0 -0
  86. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Memory.py +0 -0
  87. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/PythonPath.py +0 -0
  88. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/Spinner.py +0 -0
  89. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/TimeKeeper.py +0 -0
  90. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/core/utils.py +0 -0
  91. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/bash-completion.tmpl +0 -0
  92. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/mysql/default-ref-table.tmpl +0 -0
  93. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/mysql/default-table.tmpl +0 -0
  94. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/postgresql/default-ref-table.tmpl +0 -0
  95. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/data/postgresql/default-table.tmpl +0 -0
  96. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/db/TableExceptions.py +0 -0
  97. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/db/tests/test_db_TableExceptions.py +0 -0
  98. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/dev/Dev.py +0 -0
  99. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/Header.py +0 -0
  100. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/WorkspaceFooter.py +0 -0
  101. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/WorkspaceHeader.py +0 -0
  102. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/tests/test_display_Header.py +0 -0
  103. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/tests/test_display_WorkspaceFooter.py +0 -0
  104. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/display/tests/test_display_WorkspaceHeader.py +0 -0
  105. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/lang/Python.py +0 -0
  106. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/lang/tests/test_lang_Python.py +0 -0
  107. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/auth/Server.py +0 -0
  108. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/DataDictionary.py +0 -0
  109. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/EntityKeys.py +0 -0
  110. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/Manager.py +0 -0
  111. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/tests/test_code_context_schema_DataDictionary.py +0 -0
  112. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/tests/test_code_context_schema_EntityKeys.py +0 -0
  113. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/context/schema/tests/test_code_context_schema_Manager.py +0 -0
  114. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/Authenticator.py +0 -0
  115. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/BaseCustomization.py +0 -0
  116. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/CustomizationManager.py +0 -0
  117. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/Index.py +0 -0
  118. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/tests/test_code_customization_Authenticator.py +0 -0
  119. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/services/code/customization/tests/test_code_customization_BaseCustomization.py +0 -0
  120. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/Entity.py +0 -0
  121. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/Entity.py +0 -0
  122. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/constraints/ReferenceConstraint.py +0 -0
  123. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/ForeignKey.py +0 -0
  124. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/Index.py +0 -0
  125. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/IndexAttribute.py +0 -0
  126. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_ForeignKey.py +0 -0
  127. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_Index.py +0 -0
  128. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_IndexAttribute.py +0 -0
  129. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/testing.py +0 -0
  130. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/mysql/tests/test_structure_mysql_Entity.py +0 -0
  131. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/Entity.py +0 -0
  132. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/References.py +0 -0
  133. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/table/ForeignKey.py +0 -0
  134. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/table/tests/test_structure_postgresql_table_ForeignKey.py +0 -0
  135. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/testing.py +0 -0
  136. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/postgresql/tests/test_structure_postgresql_Entity.py +0 -0
  137. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/structure/tests/test_structure_Entity.py +0 -0
  138. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/tests/test_Env.py +0 -0
  139. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/tests/test_Memory.py +0 -0
  140. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson/tests/test_utils.py +0 -0
  141. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/dependency_links.txt +0 -0
  142. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/entry_points.txt +0 -0
  143. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/requires.txt +0 -0
  144. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/gibson_cli.egg-info/top_level.txt +0 -0
  145. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/requirements.txt +0 -0
  146. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/setup.cfg +0 -0
  147. {gibson_cli-0.8.1 → gibson_cli-0.8.3}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gibson-cli
3
- Version: 0.8.1
3
+ Version: 0.8.3
4
4
  Summary: Gibson Command Line Interface
5
5
  Author-email: GibsonAI <noc@gibsonai.com>
6
6
  Project-URL: Homepage, https://gibsonai.com/
@@ -0,0 +1,5 @@
1
+ sh bin/clean.sh
2
+ sh bin/build.sh
3
+ read -p "Enter the PyPI token: " token
4
+ uv publish --username __token__ --password $token
5
+ sh bin/clean.sh
@@ -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.conversation.type(
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()
@@ -7,7 +7,6 @@ class ProjectApi(BaseApi):
7
7
 
8
8
  def __init__(self, configuration: Configuration):
9
9
  self.configuration = configuration
10
- self.configuration.require_login()
11
10
 
12
11
  def list(self):
13
12
  return self.get()["projects"]
@@ -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
- if configuration.settings is None:
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.set_access_token(None)
7
- self.conversation.type(f"You are now logged out.")
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
- Help(self.configuration).execute()
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.conversation.message_login_required(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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gibson-cli
3
- Version: 0.8.1
3
+ Version: 0.8.3
4
4
  Summary: Gibson Command Line Interface
5
5
  Author-email: GibsonAI <noc@gibsonai.com>
6
6
  Project-URL: Homepage, https://gibsonai.com/
@@ -5,10 +5,10 @@ pyproject.toml
5
5
  requirements.txt
6
6
  bin/build.sh
7
7
  bin/clean.sh
8
- bin/gibson
9
8
  bin/release.sh
10
9
  gibson/api/BaseApi.py
11
10
  gibson/api/Cli.py
11
+ gibson/api/DataApi.py
12
12
  gibson/api/ProjectApi.py
13
13
  gibson/bin/gibson.py
14
14
  gibson/command/BaseCommand.py
@@ -15,7 +15,7 @@ classifiers = [
15
15
  "Intended Audience :: Developers",
16
16
  "Programming Language :: Python :: 3.10",
17
17
  ]
18
- version = "0.8.1"
18
+ version = "0.8.3"
19
19
 
20
20
  [tool.setuptools.packages.find]
21
21
  where = ["."]
@@ -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())
@@ -1,5 +0,0 @@
1
- sh bin/clean.sh
2
- sh bin/build.sh
3
- uv publish
4
- # python3 -m twine upload --repository pypi dist/*
5
- sh bin/clean.sh
@@ -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