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.
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/PKG-INFO +6 -5
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/tools.py +42 -11
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/pyproject.toml +12 -6
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/README.md +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/agents.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/auth.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/config.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/mcp_servers.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/commands/secrets.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/client.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/config.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/oauth.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/output.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/core/token_storage.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_cli/main.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/dpop.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/oauth.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/auth/token_cache.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/connectors/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/connectors/base.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/connectors/registry.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/dx/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/dx/decorators.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/dx/runtime.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/events.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/exceptions.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/fabriq_client.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/models/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/models/audit.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/models/types.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/py.typed +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/transport/__init__.py +0 -0
- {agentic_fabriq_sdk-0.1.7 → agentic_fabriq_sdk-0.1.9}/af_sdk/transport/http.py +0 -0
- {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.
|
|
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:
|
|
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 (
|
|
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 '
|
|
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 '
|
|
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/{
|
|
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/{
|
|
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
|
|
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/{
|
|
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.
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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"
|
|
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
|