agentic-fabriq-sdk 0.1.7__tar.gz → 0.1.9__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.

Potentially problematic release.


This version of agentic-fabriq-sdk might be problematic. Click here for more details.

Files changed (39) hide show
  1. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/PKG-INFO +6 -5
  2. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/tools.py +42 -11
  3. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/pyproject.toml +12 -6
  4. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/README.md +0 -0
  5. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/__init__.py +0 -0
  6. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/__init__.py +0 -0
  7. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/agents.py +0 -0
  8. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/auth.py +0 -0
  9. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/config.py +0 -0
  10. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/mcp_servers.py +0 -0
  11. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/secrets.py +0 -0
  12. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/__init__.py +0 -0
  13. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/client.py +0 -0
  14. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/config.py +0 -0
  15. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/oauth.py +0 -0
  16. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/output.py +0 -0
  17. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/token_storage.py +0 -0
  18. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/main.py +0 -0
  19. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/__init__.py +0 -0
  20. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/__init__.py +0 -0
  21. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/dpop.py +0 -0
  22. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/oauth.py +0 -0
  23. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/token_cache.py +0 -0
  24. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/connectors/__init__.py +0 -0
  25. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/connectors/base.py +0 -0
  26. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/connectors/registry.py +0 -0
  27. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/dx/__init__.py +0 -0
  28. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/dx/decorators.py +0 -0
  29. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/dx/runtime.py +0 -0
  30. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/events.py +0 -0
  31. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/exceptions.py +0 -0
  32. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/fabriq_client.py +0 -0
  33. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/models/__init__.py +0 -0
  34. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/models/audit.py +0 -0
  35. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/models/types.py +0 -0
  36. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/py.typed +0 -0
  37. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/transport/__init__.py +0 -0
  38. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/transport/http.py +0 -0
  39. {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/vault.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentic-fabriq-sdk
3
- Version: 0.1.7
3
+ Version: 0.1.9
4
4
  Summary: Agentic Fabriq SDK: high-level client, CLI tool, DX helpers, and auth for AI agents
5
5
  License: Apache-2.0
6
6
  Keywords: fabriq,agentic-fabriq,sdk,ai,agents,agentic,fabric,cli
@@ -16,16 +16,17 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Typing :: Typed
17
17
  Requires-Dist: PyJWT (>=2.8.0)
18
18
  Requires-Dist: aiohttp (>=3.9.0)
19
- Requires-Dist: httpx (>=0.25)
19
+ Requires-Dist: click (>=8.0.0)
20
+ Requires-Dist: httpx (>=0.25.0)
20
21
  Requires-Dist: keyring (>=25.0.0)
21
22
  Requires-Dist: nats-py (>=2.4.0)
22
23
  Requires-Dist: opentelemetry-api (>=1.20.0)
23
24
  Requires-Dist: opentelemetry-instrumentation-httpx (>=0.41b0)
24
- Requires-Dist: pydantic (>=2.4)
25
+ Requires-Dist: pydantic (>=2.4.0)
25
26
  Requires-Dist: rich (>=13.7.0)
26
27
  Requires-Dist: stevedore (>=5.1.0)
27
- Requires-Dist: typer (>=0.9.0)
28
- Requires-Dist: typing-extensions
28
+ Requires-Dist: typer[all] (>=0.9.0)
29
+ Requires-Dist: typing-extensions (>=4.0.0)
29
30
  Project-URL: Documentation, https://docs.agentic-fabric.org
30
31
  Project-URL: Homepage, https://github.com/agentic-fabric/agentic-fabric
31
32
  Project-URL: Repository, https://github.com/agentic-fabric/agentic-fabric
@@ -147,10 +147,10 @@ def invoke(
147
147
 
148
148
  @app.command()
149
149
  def add(
150
- tool: str = typer.Argument(..., help="Tool name (google, slack, notion, github, etc.)"),
150
+ tool: str = typer.Argument(..., help="Tool name (google_drive, google_slides, slack, notion, github, etc.)"),
151
151
  connection_id: str = typer.Option(..., "--connection-id", help="Unique connection ID"),
152
152
  display_name: str = typer.Option(None, "--display-name", help="Human-readable name"),
153
- method: str = typer.Option(..., "--method", help="Connection method: 'api' or 'credentials'"),
153
+ method: str = typer.Option(..., "--method", help="Connection method: 'api', 'credentials', or 'oauth'"),
154
154
 
155
155
  # API method fields
156
156
  token: str = typer.Option(None, "--token", help="API token (for api method)"),
@@ -179,9 +179,31 @@ def add(
179
179
  from af_cli.core.config import get_config
180
180
 
181
181
  with get_client() as client:
182
+ # Validate tool name - check for common mistakes
183
+ if tool.lower() == "google":
184
+ error("❌ Invalid tool name: 'google'")
185
+ info("")
186
+ info("Please specify the exact Google Workspace tool:")
187
+ info(" • google_drive - Google Drive")
188
+ info(" • google_docs - Google Docs")
189
+ info(" • google_sheets - Google Sheets")
190
+ info(" • google_slides - Google Slides")
191
+ info(" • gmail - Gmail")
192
+ info(" • google_calendar - Google Calendar")
193
+ info(" • google_meet - Google Meet")
194
+ info(" • google_forms - Google Forms")
195
+ info(" • google_classroom - Google Classroom")
196
+ info(" • google_people - Google People (Contacts)")
197
+ info(" • google_chat - Google Chat")
198
+ info(" • google_tasks - Google Tasks")
199
+ info("")
200
+ info("Example:")
201
+ info(f" afctl tools add google_drive --connection-id {connection_id} --method {method}")
202
+ raise typer.Exit(1)
203
+
182
204
  # Validate method
183
- if method not in ["api", "credentials"]:
184
- error("Method must be 'api' or 'credentials'")
205
+ if method not in ["api", "credentials", "oauth"]:
206
+ error("Method must be 'api', 'credentials', or 'oauth'")
185
207
  raise typer.Exit(1)
186
208
 
187
209
  # Validate API method requirements
@@ -215,11 +237,14 @@ def add(
215
237
  success(f"✅ Connection entry created: {connection_id}")
216
238
 
217
239
  # Step 2: Store credentials based on method
218
- if method == "credentials":
240
+ if method == "credentials" or method == "oauth":
241
+ # Determine the API base tool name (Google tools all use "google")
242
+ api_tool_name = "google" if (tool.startswith("google_") or tool == "gmail") else tool
243
+
219
244
  # Auto-generate redirect_uri if not provided
220
245
  if not redirect_uri:
221
246
  config = get_config()
222
- redirect_uri = f"{config.gateway_url}/api/v1/tools/{tool}/oauth/callback"
247
+ redirect_uri = f"{config.gateway_url}/api/v1/tools/{api_tool_name}/oauth/callback"
223
248
  info(f"Using default redirect URI: {redirect_uri}")
224
249
 
225
250
  # Store OAuth app config
@@ -232,7 +257,7 @@ def add(
232
257
  config_payload["redirect_uri"] = redirect_uri
233
258
 
234
259
  client.post(
235
- f"/api/v1/tools/{tool}/config?connection_id={connection_id}",
260
+ f"/api/v1/tools/{api_tool_name}/config?connection_id={connection_id}",
236
261
  data=config_payload
237
262
  )
238
263
  success("✅ OAuth app credentials stored")
@@ -295,10 +320,10 @@ def connect(
295
320
  tool = connection["tool"]
296
321
  method = connection["method"]
297
322
 
298
- # Only credentials method needs OAuth completion
299
- if method != "credentials":
323
+ # Only credentials/oauth method needs OAuth completion
324
+ if method not in ["credentials", "oauth"]:
300
325
  error(f"Connection '{connection_id}' uses '{method}' method")
301
- info("Only 'credentials' method connections need OAuth setup")
326
+ info("Only 'credentials' or 'oauth' method connections need OAuth setup")
302
327
  info("API connections are already connected after 'afctl tools add'")
303
328
  raise typer.Exit(1)
304
329
 
@@ -309,11 +334,17 @@ def connect(
309
334
  if not confirm:
310
335
  return
311
336
 
337
+ # Determine the API base tool name (Google tools all use "google")
338
+ api_tool_name = "google" if (tool.startswith("google_") or tool == "gmail") else tool
339
+
312
340
  # Initiate OAuth flow
313
341
  info(f"Initiating OAuth for {tool}...")
314
342
 
343
+ # For Google tools, pass the specific tool_type parameter
344
+ tool_type_param = f"&tool_type={tool}" if tool != api_tool_name else ""
345
+
315
346
  result = client.post(
316
- f"/api/v1/tools/{tool}/connect/initiate?connection_id={connection_id}",
347
+ f"/api/v1/tools/{api_tool_name}/connect/initiate?connection_id={connection_id}{tool_type_param}",
317
348
  data={}
318
349
  )
319
350
 
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
5
5
 
6
6
  [tool.poetry]
7
7
  name = "agentic-fabriq-sdk"
8
- version = "0.1.7"
8
+ version = "0.1.9"
9
9
  description = "Agentic Fabriq SDK: high-level client, CLI tool, DX helpers, and auth for AI agents"
10
10
  readme = "README.md"
11
11
  license = "Apache-2.0"
@@ -28,19 +28,25 @@ include = ["af_sdk/py.typed"]
28
28
 
29
29
  [tool.poetry.dependencies]
30
30
  python = ">=3.11,<3.13"
31
- httpx = ">=0.25"
32
- pydantic = ">=2.4"
33
- typing-extensions = "*"
34
- stevedore = ">=5.1.0"
31
+ # Core SDK dependencies
32
+ httpx = ">=0.25.0"
33
+ pydantic = ">=2.4.0"
34
+ typing-extensions = ">=4.0.0"
35
35
  PyJWT = ">=2.8.0"
36
+ # OpenTelemetry for tracing
36
37
  opentelemetry-api = ">=1.20.0"
37
38
  opentelemetry-instrumentation-httpx = ">=0.41b0"
39
+ # NATS for event streaming
38
40
  nats-py = ">=2.4.0"
41
+ # Additional HTTP client support
39
42
  aiohttp = ">=3.9.0"
43
+ # Plugin/extension system
44
+ stevedore = ">=5.1.0"
40
45
  # CLI dependencies
41
- typer = ">=0.9.0"
46
+ typer = {extras = ["all"], version = ">=0.9.0"}
42
47
  rich = ">=13.7.0"
43
48
  keyring = ">=25.0.0"
49
+ click = ">=8.0.0"
44
50
 
45
51
  [tool.poetry.scripts]
46
52
  afctl = "af_cli.main:app"