agenticdome-python-sdk 1.2.36__tar.gz → 1.2.38__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.
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/PKG-INFO +11 -2
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/README.md +10 -1
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/PKG-INFO +11 -2
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/catalog_snapshot.json +6 -6
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/hook_catalog.py +1 -1
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/onboarding_cli.py +181 -7
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/customer-onboarding.md +27 -1
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/pyproject.toml +1 -1
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/CONTRIBUTING.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/LICENSE +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/MANIFEST.in +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/NOTICE +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/SECURITY.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/SOURCES.txt +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/entry_points.txt +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/requires.txt +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/__init__.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/_framework_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/_mode.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/action_path_proof.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/agno.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/attestation.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/autogen.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/aws_bedrock.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/claude.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/client.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/connect.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/copilot_ir.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/copilot_ir_collector.cjs +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/crewai.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/demo.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/existing_integration.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/framework_edits.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/generic_python.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/google_adk.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/guided_integration.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/identity.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/langgraph.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/lifecycle.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/llamaindex.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_host.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_http_gateway.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_rehearsal_server.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_verification.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/microsoft_agent_framework.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/microsoft_ai_foundry.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/openai_agents.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/outcomes.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/proof.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/pydantic.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/simulation.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/smolagents.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/README.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/agno.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/autogen.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/aws-bedrock.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/claude-agent-sdk.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/crewai.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/custom-python.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/google-adk.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/langgraph.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/llamaindex.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/microsoft-agent-framework.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/microsoft-ai-foundry.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/openai-agents.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/pydanticai.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/smolagents.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/mcp-integration.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/performance-evidence.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/runtime-deployment.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/PRODUCTION_INTEGRATION.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/README.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/attack_demo.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/crewai_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/README.md +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/_shared.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/agno.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/autogen.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/aws_bedrock.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/claude_agent_sdk.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/crewai.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/custom_python.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/google_adk.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/langgraph.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/llamaindex.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/mcp.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/microsoft_agent_framework.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/microsoft_ai_foundry.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/openai_agents.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/pydanticai.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/smolagents.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/langgraph_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/local_simulation_gallery.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/mcp_gateway_action_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/setup.cfg +0 -0
- {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.38
|
|
4
4
|
Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
|
|
5
5
|
Author: AgenticDome
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -182,7 +182,16 @@ certified onboarding path, obtain the assigned sidecar and a dedicated
|
|
|
182
182
|
local exact diff and change summary, explicitly approve a supported edit or
|
|
183
183
|
attach other boundaries manually, then run
|
|
184
184
|
`agenticdome verify --run-tests --output .agenticdome/verification.json`.
|
|
185
|
-
|
|
185
|
+
|
|
186
|
+
If a coding assistant has already made and tested the application edits,
|
|
187
|
+
import its canonical `AgenticDome_Integration.md` in the customer portal and
|
|
188
|
+
run `agenticdome validate-report --report AgenticDome_Integration.md` from
|
|
189
|
+
that same deployable workload. Import the two generated, hash-bound JSON files
|
|
190
|
+
in Onboarding. This avoids repeating the guided edit plan; the Markdown counts
|
|
191
|
+
remain AI-reported and a real action-path test is still required before
|
|
192
|
+
claiming protection. See the [customer onboarding guide](docs/customer-onboarding.md).
|
|
193
|
+
|
|
194
|
+
For the Pilot path, preview obtains the private, signed, catalog-bound semantic plan and keeps
|
|
186
195
|
application source on your machine. `agenticdome integrate apply` creates a
|
|
187
196
|
local Git review branch but never commits, pushes or deploys. Existing-source
|
|
188
197
|
automatic edits cover unambiguous CrewAI bootstrap, PydanticAI `Agent(...)`,
|
|
@@ -69,7 +69,16 @@ certified onboarding path, obtain the assigned sidecar and a dedicated
|
|
|
69
69
|
local exact diff and change summary, explicitly approve a supported edit or
|
|
70
70
|
attach other boundaries manually, then run
|
|
71
71
|
`agenticdome verify --run-tests --output .agenticdome/verification.json`.
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
If a coding assistant has already made and tested the application edits,
|
|
74
|
+
import its canonical `AgenticDome_Integration.md` in the customer portal and
|
|
75
|
+
run `agenticdome validate-report --report AgenticDome_Integration.md` from
|
|
76
|
+
that same deployable workload. Import the two generated, hash-bound JSON files
|
|
77
|
+
in Onboarding. This avoids repeating the guided edit plan; the Markdown counts
|
|
78
|
+
remain AI-reported and a real action-path test is still required before
|
|
79
|
+
claiming protection. See the [customer onboarding guide](docs/customer-onboarding.md).
|
|
80
|
+
|
|
81
|
+
For the Pilot path, preview obtains the private, signed, catalog-bound semantic plan and keeps
|
|
73
82
|
application source on your machine. `agenticdome integrate apply` creates a
|
|
74
83
|
local Git review branch but never commits, pushes or deploys. Existing-source
|
|
75
84
|
automatic edits cover unambiguous CrewAI bootstrap, PydanticAI `Agent(...)`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.38
|
|
4
4
|
Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
|
|
5
5
|
Author: AgenticDome
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -182,7 +182,16 @@ certified onboarding path, obtain the assigned sidecar and a dedicated
|
|
|
182
182
|
local exact diff and change summary, explicitly approve a supported edit or
|
|
183
183
|
attach other boundaries manually, then run
|
|
184
184
|
`agenticdome verify --run-tests --output .agenticdome/verification.json`.
|
|
185
|
-
|
|
185
|
+
|
|
186
|
+
If a coding assistant has already made and tested the application edits,
|
|
187
|
+
import its canonical `AgenticDome_Integration.md` in the customer portal and
|
|
188
|
+
run `agenticdome validate-report --report AgenticDome_Integration.md` from
|
|
189
|
+
that same deployable workload. Import the two generated, hash-bound JSON files
|
|
190
|
+
in Onboarding. This avoids repeating the guided edit plan; the Markdown counts
|
|
191
|
+
remain AI-reported and a real action-path test is still required before
|
|
192
|
+
claiming protection. See the [customer onboarding guide](docs/customer-onboarding.md).
|
|
193
|
+
|
|
194
|
+
For the Pilot path, preview obtains the private, signed, catalog-bound semantic plan and keeps
|
|
186
195
|
application source on your machine. `agenticdome integrate apply` creates a
|
|
187
196
|
local Git review branch but never commits, pushes or deploys. Existing-source
|
|
188
197
|
automatic edits cover unambiguous CrewAI bootstrap, PydanticAI `Agent(...)`,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "agenticdome.catalog-snapshot.v1",
|
|
3
3
|
"catalog_schema": "agenticdome.hook-catalog.v1",
|
|
4
|
-
"verified_at": "2026-
|
|
5
|
-
"python_sdk_version": "1.2.
|
|
4
|
+
"verified_at": "2026-10-02",
|
|
5
|
+
"python_sdk_version": "1.2.38",
|
|
6
6
|
"published_packages": {
|
|
7
7
|
"agenticdome-python-sdk": {
|
|
8
8
|
"registry": "pypi",
|
|
9
|
-
"version": "1.2.
|
|
10
|
-
"url": "https://pypi.org/project/agenticdome-python-sdk/1.2.
|
|
9
|
+
"version": "1.2.38",
|
|
10
|
+
"url": "https://pypi.org/project/agenticdome-python-sdk/1.2.38/"
|
|
11
11
|
},
|
|
12
12
|
"agenticdome-sdk": {
|
|
13
13
|
"registry": "npm",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
},
|
|
22
22
|
"openclaw": {
|
|
23
23
|
"registry": "npm",
|
|
24
|
-
"version": "2026.9.
|
|
25
|
-
"url": "https://www.npmjs.com/package/openclaw/v/2026.9.
|
|
24
|
+
"version": "2026.9.7",
|
|
25
|
+
"url": "https://www.npmjs.com/package/openclaw/v/2026.9.7"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
}
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/hook_catalog.py
RENAMED
|
@@ -39,7 +39,7 @@ CATALOG_VERIFIED_AT = str(_CATALOG_SNAPSHOT["verified_at"])
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
_OPENCLAW_RUNTIME_MIN_VERSION = "2026.7.1-2"
|
|
42
|
-
_OPENCLAW_RUNTIME_MAX_VERSION = "2026.9.
|
|
42
|
+
_OPENCLAW_RUNTIME_MAX_VERSION = "2026.9.7"
|
|
43
43
|
_OPENCLAW_RUNTIME_VERSION = _OPENCLAW_RUNTIME_MAX_VERSION
|
|
44
44
|
_OPENCLAW_NODE_RANGE = ">=24.16.0 <25 || >=26.1.0"
|
|
45
45
|
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/onboarding_cli.py
RENAMED
|
@@ -7,6 +7,7 @@ paths and boundary locations, never source snippets or file contents.
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
import argparse
|
|
10
|
+
import ast
|
|
10
11
|
import difflib
|
|
11
12
|
import hashlib
|
|
12
13
|
import importlib.metadata
|
|
@@ -716,6 +717,82 @@ def _mcp_evidence_id(kind: str, relative: str, line: int) -> str:
|
|
|
716
717
|
return f"{kind}-{digest}"
|
|
717
718
|
|
|
718
719
|
|
|
720
|
+
def _agenticdome_policy_probe_spans(text: str) -> Dict[int, List[Tuple[int, int]]]:
|
|
721
|
+
"""Mask only a confirmed AgenticDome policy call's MCP method literal.
|
|
722
|
+
|
|
723
|
+
A policy client can use the MCP JSON-RPC envelope without forwarding
|
|
724
|
+
customer MCP tools. Keep all other MCP calls in the same file visible.
|
|
725
|
+
Unparseable or ambiguous source receives no exception.
|
|
726
|
+
"""
|
|
727
|
+
if "tools/call" not in text or "guardrail.validate" not in text:
|
|
728
|
+
return {}
|
|
729
|
+
try:
|
|
730
|
+
module = ast.parse(text)
|
|
731
|
+
except (SyntaxError, ValueError):
|
|
732
|
+
return {}
|
|
733
|
+
|
|
734
|
+
def field(mapping: ast.AST, key: str) -> Optional[ast.AST]:
|
|
735
|
+
if not isinstance(mapping, ast.Dict):
|
|
736
|
+
return None
|
|
737
|
+
return next(
|
|
738
|
+
(value for name, value in zip(mapping.keys, mapping.values)
|
|
739
|
+
if isinstance(name, ast.Constant) and name.value == key),
|
|
740
|
+
None,
|
|
741
|
+
)
|
|
742
|
+
|
|
743
|
+
def is_literal(node: Optional[ast.AST], value: str) -> bool:
|
|
744
|
+
return isinstance(node, ast.Constant) and node.value == value
|
|
745
|
+
|
|
746
|
+
# The legacy urllib client uses an environment-overridable URL whose
|
|
747
|
+
# checked-in default is AgenticDome's own /mcp policy endpoint.
|
|
748
|
+
policy_url_names: set[str] = set()
|
|
749
|
+
for node in ast.walk(module):
|
|
750
|
+
if not isinstance(node, (ast.Assign, ast.AnnAssign)):
|
|
751
|
+
continue
|
|
752
|
+
targets = node.targets if isinstance(node, ast.Assign) else [node.target]
|
|
753
|
+
value = node.value
|
|
754
|
+
if value is None or not any(
|
|
755
|
+
isinstance(part, ast.Constant) and isinstance(part.value, str)
|
|
756
|
+
and re.fullmatch(r"https?://(?:[a-z0-9-]+\.)*agenticdome\.io(?::\d+)?/mcp/?", part.value, re.I)
|
|
757
|
+
for part in ast.walk(value)
|
|
758
|
+
):
|
|
759
|
+
continue
|
|
760
|
+
policy_url_names.update(target.id for target in targets if isinstance(target, ast.Name))
|
|
761
|
+
|
|
762
|
+
spans: Dict[int, List[Tuple[int, int]]] = {}
|
|
763
|
+
for function in ast.walk(module):
|
|
764
|
+
if not isinstance(function, (ast.FunctionDef, ast.AsyncFunctionDef)):
|
|
765
|
+
continue
|
|
766
|
+
calls = [node for node in ast.walk(function) if isinstance(node, ast.Call)]
|
|
767
|
+
for assignment in ast.walk(function):
|
|
768
|
+
if not isinstance(assignment, (ast.Assign, ast.AnnAssign)):
|
|
769
|
+
continue
|
|
770
|
+
targets = assignment.targets if isinstance(assignment, ast.Assign) else [assignment.target]
|
|
771
|
+
names = {target.id for target in targets if isinstance(target, ast.Name)}
|
|
772
|
+
method = field(assignment.value, "method") if assignment.value is not None else None
|
|
773
|
+
params = field(assignment.value, "params") if assignment.value is not None else None
|
|
774
|
+
if not names or not is_literal(method, "tools/call") or not is_literal(field(params, "name"), "guardrail.validate"):
|
|
775
|
+
continue
|
|
776
|
+
|
|
777
|
+
def sends_policy_payload(call: ast.Call) -> bool:
|
|
778
|
+
if not any(isinstance(part, ast.Name) and part.id in names for part in ast.walk(call)):
|
|
779
|
+
return False
|
|
780
|
+
if (isinstance(call.func, ast.Attribute) and call.func.attr == "_post"
|
|
781
|
+
and call.args and is_literal(call.args[0], "/mcp")):
|
|
782
|
+
return True
|
|
783
|
+
return (
|
|
784
|
+
isinstance(call.func, (ast.Name, ast.Attribute))
|
|
785
|
+
and (call.func.id if isinstance(call.func, ast.Name) else call.func.attr) == "Request"
|
|
786
|
+
and bool(call.args)
|
|
787
|
+
and isinstance(call.args[0], ast.Name)
|
|
788
|
+
and call.args[0].id in policy_url_names
|
|
789
|
+
)
|
|
790
|
+
|
|
791
|
+
if any(sends_policy_payload(call) for call in calls):
|
|
792
|
+
spans.setdefault(method.lineno, []).append((method.col_offset, method.end_col_offset))
|
|
793
|
+
return spans
|
|
794
|
+
|
|
795
|
+
|
|
719
796
|
def _detect_mcp_protection(root: Path, paths: Sequence[Path], languages: Sequence[str]) -> Dict[str, Any]:
|
|
720
797
|
"""Collect source-free MCP topology and candidate protection evidence.
|
|
721
798
|
|
|
@@ -735,15 +812,21 @@ def _detect_mcp_protection(root: Path, paths: Sequence[Path], languages: Sequenc
|
|
|
735
812
|
for path in paths:
|
|
736
813
|
relative = _relative(path, root)
|
|
737
814
|
text = _read_text(path)
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
#
|
|
741
|
-
|
|
815
|
+
python_source = path.suffix.lower() in {".py", ".pyi"}
|
|
816
|
+
policy_probe_spans = _agenticdome_policy_probe_spans(text) if python_source else {}
|
|
817
|
+
# Preserve the existing JavaScript/TypeScript policy-client exception.
|
|
818
|
+
# Unlike Python, this scanner has no AST span for those languages, so
|
|
819
|
+
# exempt only a single policy call with no other MCP integration hints.
|
|
820
|
+
if not python_source and (
|
|
742
821
|
bool(re.search(r"['\"]name['\"]\s*:\s*['\"]guardrail\.validate['\"]", text))
|
|
743
822
|
and bool(re.search(r"_post\s*\(\s*['\"]/mcp['\"]", text))
|
|
744
|
-
and
|
|
745
|
-
|
|
746
|
-
|
|
823
|
+
and len(re.findall(r"\btools/call\b", text)) == 1
|
|
824
|
+
and not re.search(
|
|
825
|
+
r"\b(?:FastMCP|McpServer|MCPClient|McpClient|ClientSession|StdioClientTransport|"
|
|
826
|
+
r"SSEClientTransport|call_tool|callTool|registerTool|tools/list|setRequestHandler)\b|@modelcontextprotocol",
|
|
827
|
+
text,
|
|
828
|
+
)
|
|
829
|
+
):
|
|
747
830
|
continue
|
|
748
831
|
if not re.search(
|
|
749
832
|
r"(?:\b(?:from\s+mcp|import\s+mcp|FastMCP|MCPClient|McpClient|McpServer|ClientSession|"
|
|
@@ -753,6 +836,14 @@ def _detect_mcp_protection(root: Path, paths: Sequence[Path], languages: Sequenc
|
|
|
753
836
|
):
|
|
754
837
|
continue
|
|
755
838
|
for line_number, line in enumerate(text.splitlines(), start=1):
|
|
839
|
+
# AST offsets are UTF-8 byte offsets. Mask the exact policy method
|
|
840
|
+
# literal, not the whole line or file: a real MCP call alongside
|
|
841
|
+
# the policy probe must still trigger specialist onboarding.
|
|
842
|
+
if line_number in policy_probe_spans:
|
|
843
|
+
encoded = bytearray(line.encode("utf-8"))
|
|
844
|
+
for start, end in policy_probe_spans[line_number]:
|
|
845
|
+
encoded[start:end] = b" " * (end - start)
|
|
846
|
+
line = encoded.decode("utf-8")
|
|
756
847
|
for role, patterns in MCP_ROLE_PATTERNS.items():
|
|
757
848
|
if any(pattern.search(line) for pattern in patterns):
|
|
758
849
|
roles.add(role)
|
|
@@ -2471,6 +2562,77 @@ def verify_project(root: Path, live: bool = False, run_tests: bool = False,
|
|
|
2471
2562
|
return (0 if result["ready"] else 2), result
|
|
2472
2563
|
|
|
2473
2564
|
|
|
2565
|
+
def validate_ai_integration_report(root: Path, report_path: Path) -> Tuple[int, Dict[str, Any]]:
|
|
2566
|
+
"""Validate an AI-assisted edit with the existing semantic and test gates.
|
|
2567
|
+
|
|
2568
|
+
Markdown is a customer-authored inventory, never an authorization or proof
|
|
2569
|
+
source. Only its digest is added to the source-free evidence exports.
|
|
2570
|
+
"""
|
|
2571
|
+
if report_path.name != "AgenticDome_Integration.md" or report_path.is_symlink() or not report_path.is_file():
|
|
2572
|
+
raise SystemExit("Select this workload's AgenticDome_Integration.md (regular file, exact name).")
|
|
2573
|
+
if not report_path.resolve().is_relative_to(root) or report_path.stat().st_size > 524288:
|
|
2574
|
+
raise SystemExit("The integration report must be inside this workload and no larger than 512 KB.")
|
|
2575
|
+
try:
|
|
2576
|
+
markdown = report_path.read_text(encoding="utf-8")
|
|
2577
|
+
except (UnicodeError, OSError) as exc:
|
|
2578
|
+
raise SystemExit("Read AgenticDome_Integration.md as UTF-8 and retry; the file could not be read safely.") from exc
|
|
2579
|
+
if not markdown or "\x00" in markdown:
|
|
2580
|
+
raise SystemExit("AgenticDome_Integration.md is empty or contains unsupported binary content.")
|
|
2581
|
+
scope_match = re.search(r"^Workload scope:\s*([^\r\n]+)", markdown, re.IGNORECASE | re.MULTILINE)
|
|
2582
|
+
if not scope_match:
|
|
2583
|
+
raise SystemExit("Add a Workload scope line naming this deployable workload to AgenticDome_Integration.md.")
|
|
2584
|
+
quoted = re.search(r"`([^`]+)`", scope_match.group(1))
|
|
2585
|
+
scope = (quoted.group(1) if quoted else scope_match.group(1).split()[0]).strip().rstrip("/")
|
|
2586
|
+
if Path(scope).name.casefold() != root.name.casefold() or ".." in Path(scope).parts:
|
|
2587
|
+
raise SystemExit("The report's Workload scope does not match this workload root. Run from the correct deployable service.")
|
|
2588
|
+
rows = re.findall(r"^\|\s*([1-8])\.([^\r\n]*)", markdown, re.MULTILINE)
|
|
2589
|
+
if len(rows) != 8 or {number for number, _ in rows} != {str(index) for index in range(1, 9)}:
|
|
2590
|
+
raise SystemExit("The integration report needs one valid row for each of the eight interception categories.")
|
|
2591
|
+
for _, cells_text in rows:
|
|
2592
|
+
cells = [cell.strip().replace("*", "").replace(",", "") for cell in cells_text.strip().strip("|").split("|")]
|
|
2593
|
+
if len(cells) != 6 or any(not re.fullmatch(r"\d{1,5}", cell) for cell in cells[1:]):
|
|
2594
|
+
raise SystemExit("Each interception row needs five non-negative counts after its category.")
|
|
2595
|
+
found, existing, new, unprotected, live = (int(cell) for cell in cells[1:])
|
|
2596
|
+
if any(value > 10000 for value in (found, existing, new, unprotected, live)) or existing + new + unprotected != found or live > existing + new:
|
|
2597
|
+
raise SystemExit("The report counts do not reconcile. Correct the AI integration inventory before validation.")
|
|
2598
|
+
digest = hashlib.sha256(markdown.encode("utf-8")).hexdigest()
|
|
2599
|
+
|
|
2600
|
+
inspection = _exportable_inspection(inspect_repository(root))
|
|
2601
|
+
if inspection.get("scope", {}).get("complete") is not True:
|
|
2602
|
+
raise SystemExit(_scope_gap_message(inspection))
|
|
2603
|
+
if inspection.get("mcp_protection", {}).get("detected") is True or inspection.get("openclaw_protection", {}).get("ready") is True:
|
|
2604
|
+
raise SystemExit("This workload needs the specialist MCP or OpenClaw onboarding path. Keep the AI report for review, then use that journey's verification commands.")
|
|
2605
|
+
inspection["ai_integration_report_sha256"] = digest
|
|
2606
|
+
inspection.pop("report_sha256", None)
|
|
2607
|
+
inspection["report_sha256"] = hashlib.sha256(
|
|
2608
|
+
json.dumps(inspection, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
|
2609
|
+
).hexdigest()
|
|
2610
|
+
plan = integration_plan(root)
|
|
2611
|
+
plan["inspection_report_sha256"] = inspection["report_sha256"]
|
|
2612
|
+
exit_code, verification = verify_project(root, run_tests=True, plan=plan)
|
|
2613
|
+
verification["ai_integration_report_sha256"] = digest
|
|
2614
|
+
verification.pop("report_sha256", None)
|
|
2615
|
+
verification["report_sha256"] = hashlib.sha256(
|
|
2616
|
+
json.dumps(verification, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
|
2617
|
+
).hexdigest()
|
|
2618
|
+
|
|
2619
|
+
inspection_path = root / "agenticdome-inspection.json"
|
|
2620
|
+
verification_path = root / ".agenticdome" / "verification.json"
|
|
2621
|
+
for output in (inspection_path, verification_path):
|
|
2622
|
+
if output.is_symlink() or not output.resolve().is_relative_to(root):
|
|
2623
|
+
raise SystemExit("An evidence output path is a symlink or leaves this workload; remove that path and retry.")
|
|
2624
|
+
_write_json(inspection_path, inspection)
|
|
2625
|
+
_write_json(verification_path, verification)
|
|
2626
|
+
return exit_code, {
|
|
2627
|
+
"status": "validation_passed" if verification["ready"] else "validation_needs_attention",
|
|
2628
|
+
"inspection": str(inspection_path.relative_to(root)),
|
|
2629
|
+
"verification": str(verification_path.relative_to(root)),
|
|
2630
|
+
"ai_integration_report_sha256": digest,
|
|
2631
|
+
"ready": verification["ready"],
|
|
2632
|
+
"next_action": "Import both JSON files in Onboarding; then run the assigned-runtime check and test a real action path. No customer action executes in these fixed decision cases.",
|
|
2633
|
+
}
|
|
2634
|
+
|
|
2635
|
+
|
|
2474
2636
|
def _print(value: Any, as_json: bool = False) -> None:
|
|
2475
2637
|
if as_json or isinstance(value, (dict, list)):
|
|
2476
2638
|
print(json.dumps(value, indent=2, sort_keys=True))
|
|
@@ -2575,6 +2737,11 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
2575
2737
|
)
|
|
2576
2738
|
verify_parser.add_argument("--output")
|
|
2577
2739
|
|
|
2740
|
+
ai_validate_parser = subparsers.add_parser(
|
|
2741
|
+
"validate-report", help="Validate a coding-assistant integration report against this workload; no source upload or code edit."
|
|
2742
|
+
)
|
|
2743
|
+
ai_validate_parser.add_argument("--report", default="AgenticDome_Integration.md")
|
|
2744
|
+
|
|
2578
2745
|
action_parser = subparsers.add_parser(
|
|
2579
2746
|
"verify-action",
|
|
2580
2747
|
help="Run one safe customer test and correlate the real SDK hook, live verdict and handler spy.",
|
|
@@ -2754,6 +2921,13 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
|
|
|
2754
2921
|
record_verification(root, result)
|
|
2755
2922
|
_print(result)
|
|
2756
2923
|
return exit_code
|
|
2924
|
+
if args.command == "validate-report":
|
|
2925
|
+
report_path = Path(args.report)
|
|
2926
|
+
if not report_path.is_absolute():
|
|
2927
|
+
report_path = root / report_path
|
|
2928
|
+
exit_code, result = validate_ai_integration_report(root, report_path)
|
|
2929
|
+
_print(result)
|
|
2930
|
+
return exit_code
|
|
2757
2931
|
if args.command == "verify-action":
|
|
2758
2932
|
from .action_path_proof import run_action_path_test
|
|
2759
2933
|
command = list(args.test_command)
|
|
@@ -36,7 +36,7 @@ runtime before activation.
|
|
|
36
36
|
|
|
37
37
|
## What is required
|
|
38
38
|
|
|
39
|
-
For a Developer Integration:
|
|
39
|
+
For a Developer Integration using the AgenticDome Onboarding Pilot:
|
|
40
40
|
|
|
41
41
|
1. **Required — initialise locally.** Discover frameworks and likely prompt,
|
|
42
42
|
tool, delegation, retrieval and output boundaries without uploading source.
|
|
@@ -52,6 +52,32 @@ For a Developer Integration:
|
|
|
52
52
|
The same discovery logic feeds the guided preview, optional advanced scaffold
|
|
53
53
|
and final verification. It does not silently apply code changes.
|
|
54
54
|
|
|
55
|
+
### Already integrated with your coding assistant?
|
|
56
|
+
|
|
57
|
+
The alternative AI Instruction path does not require repeating `init`,
|
|
58
|
+
`integrate preview` or guided apply. From the root of the one deployable
|
|
59
|
+
application workload, create and review the canonical
|
|
60
|
+
`AgenticDome_Integration.md` with all eight interception categories and an
|
|
61
|
+
explicit `Workload scope:`. Import it under Onboarding > Discover. Its counts
|
|
62
|
+
are displayed as **AI-reported**, not independently verified. Then set the
|
|
63
|
+
assigned `AGENTICDOME_API_BASE`, `AGENTICDOME_TENANT_ID` and dedicated
|
|
64
|
+
`AGENTICDOME_COPILOT_API_KEY` in your local shell and run:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
agenticdome validate-report --report AgenticDome_Integration.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This does not edit the application. It checks current source-free structure,
|
|
71
|
+
requests the tenant-bound semantic assessment and runs detected workload tests.
|
|
72
|
+
Import both generated files, `agenticdome-inspection.json` and
|
|
73
|
+
`.agenticdome/verification.json`, together in the same onboarding workload.
|
|
74
|
+
Their hashes bind them to the exact Markdown report. A changed report requires
|
|
75
|
+
rerunning validation. The portal then performs its separate assigned-runtime
|
|
76
|
+
check; test the actual customer action path before activation. MCP and
|
|
77
|
+
OpenClaw workloads use their specialist onboarding journeys rather than this
|
|
78
|
+
application shortcut. The validation command cannot turn an AI report or a
|
|
79
|
+
fixed synthetic decision into proof that real customer traffic is intercepted.
|
|
80
|
+
|
|
55
81
|
The local Integration Assistant collects source-free structure and prepares a
|
|
56
82
|
reviewable local diff. Guided `integrate preview` obtains a signed, tenant-bound
|
|
57
83
|
plan through the assigned sidecar; only source-free structural IR reaches the
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agenticdome-python-sdk"
|
|
7
|
-
version = "1.2.
|
|
7
|
+
version = "1.2.38"
|
|
8
8
|
description = "Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement."
|
|
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
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/action_path_proof.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/attestation.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/aws_bedrock.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/copilot_ir.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/framework_edits.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/generic_python.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/google_adk.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/langgraph.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/lifecycle.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/llamaindex.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_http_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_verification.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/openai_agents.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/simulation.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/smolagents.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/aws-bedrock.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/claude-agent-sdk.md
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/custom-python.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/google-adk.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/langgraph.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/llamaindex.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/openai-agents.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/pydanticai.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/frameworks/smolagents.md
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/docs/performance-evidence.md
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/PRODUCTION_INTEGRATION.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/README.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/_shared.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/autogen.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/aws_bedrock.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/crewai.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/custom_python.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/google_adk.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/langgraph.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/llamaindex.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/openai_agents.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/pydanticai.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/frameworks/smolagents.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.38}/examples/local_simulation_gallery.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|