agenticdome-python-sdk 1.2.37__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.37 → agenticdome_python_sdk-1.2.38}/PKG-INFO +1 -1
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/PKG-INFO +1 -1
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/catalog_snapshot.json +3 -3
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/onboarding_cli.py +98 -7
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/pyproject.toml +1 -1
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/CONTRIBUTING.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/LICENSE +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/MANIFEST.in +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/NOTICE +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/README.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/SECURITY.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/SOURCES.txt +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/entry_points.txt +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/requires.txt +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/__init__.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/_framework_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/_mode.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/action_path_proof.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/agno.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/attestation.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/autogen.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/aws_bedrock.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/claude.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/client.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/connect.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/copilot_ir.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/copilot_ir_collector.cjs +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/crewai.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/demo.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/existing_integration.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/framework_edits.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/generic_python.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/google_adk.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/guided_integration.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/hook_catalog.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/identity.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/langgraph.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/lifecycle.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/llamaindex.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_host.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_http_gateway.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_rehearsal_server.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_verification.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/microsoft_agent_framework.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/microsoft_ai_foundry.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/openai_agents.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/outcomes.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/proof.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/pydantic.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/simulation.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/smolagents.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/customer-onboarding.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/README.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/agno.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/autogen.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/aws-bedrock.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/claude-agent-sdk.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/crewai.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/custom-python.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/google-adk.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/langgraph.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/llamaindex.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/microsoft-agent-framework.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/microsoft-ai-foundry.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/openai-agents.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/pydanticai.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/smolagents.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/mcp-integration.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/performance-evidence.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/runtime-deployment.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/PRODUCTION_INTEGRATION.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/README.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/attack_demo.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/crewai_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/README.md +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/_shared.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/agno.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/autogen.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/aws_bedrock.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/claude_agent_sdk.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/crewai.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/custom_python.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/google_adk.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/langgraph.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/llamaindex.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/mcp.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/microsoft_agent_framework.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/microsoft_ai_foundry.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/openai_agents.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/pydanticai.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/smolagents.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/langgraph_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/local_simulation_gallery.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/mcp_gateway_action_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/setup.cfg +0 -0
- {agenticdome_python_sdk-1.2.37 → 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
|
|
@@ -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
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"schema": "agenticdome.catalog-snapshot.v1",
|
|
3
3
|
"catalog_schema": "agenticdome.hook-catalog.v1",
|
|
4
4
|
"verified_at": "2026-10-02",
|
|
5
|
-
"python_sdk_version": "1.2.
|
|
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",
|
{agenticdome_python_sdk-1.2.37 → 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)
|
|
@@ -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
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/action_path_proof.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/attestation.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → 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.37 → 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.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/framework_edits.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/generic_python.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/google_adk.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/hook_catalog.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/langgraph.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/lifecycle.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/llamaindex.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/mcp_http_gateway.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → 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.37 → 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.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/simulation.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/agenticdome_sdk/smolagents.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/aws-bedrock.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/claude-agent-sdk.md
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/custom-python.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/google-adk.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/langgraph.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → 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.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/openai-agents.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/pydanticai.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/frameworks/smolagents.md
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/docs/performance-evidence.md
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → 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.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/README.md
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/_shared.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/autogen.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/aws_bedrock.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/crewai.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/custom_python.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/google_adk.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/langgraph.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → 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.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/openai_agents.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/pydanticai.py
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/frameworks/smolagents.py
RENAMED
|
File without changes
|
|
File without changes
|
{agenticdome_python_sdk-1.2.37 → agenticdome_python_sdk-1.2.38}/examples/local_simulation_gallery.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|