agenticdome-python-sdk 1.2.36__py3-none-any.whl → 1.2.37__py3-none-any.whl
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.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/METADATA +11 -2
- {agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/RECORD +10 -10
- agenticdome_sdk/catalog_snapshot.json +6 -6
- agenticdome_sdk/hook_catalog.py +1 -1
- agenticdome_sdk/onboarding_cli.py +83 -0
- {agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/WHEEL +0 -0
- {agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/entry_points.txt +0 -0
- {agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/licenses/LICENSE +0 -0
- {agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/licenses/NOTICE +0 -0
- {agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/top_level.txt +0 -0
{agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.37
|
|
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,5 +1,5 @@
|
|
|
1
|
-
agenticdome_python_sdk-1.2.
|
|
2
|
-
agenticdome_python_sdk-1.2.
|
|
1
|
+
agenticdome_python_sdk-1.2.37.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
2
|
+
agenticdome_python_sdk-1.2.37.dist-info/licenses/NOTICE,sha256=obvKP6kV1Ny5R8_INFOpf0X5um9U2X43LGwQFobO9kg,550
|
|
3
3
|
agenticdome_sdk/__init__.py,sha256=1JY5ELhtp0zg-82xhgt6NxZ7k5CWL5e_Tm6BrsuCFXc,1102
|
|
4
4
|
agenticdome_sdk/_framework_firewall.py,sha256=W3gy7WsK50scE7ypJrmVJhHUOBsr0zAWQ85rghqaJk4,31963
|
|
5
5
|
agenticdome_sdk/_mode.py,sha256=XvOgh5sW-FG8S39V483h3uLiFh8wSt14OmYXz_6eDO8,1283
|
|
@@ -8,7 +8,7 @@ agenticdome_sdk/agno.py,sha256=L3yfjTBHW47xzT67a1DsjtwmvrAoYBkbxADpsr85Cp0,60766
|
|
|
8
8
|
agenticdome_sdk/attestation.py,sha256=ij4cMff7nzLaIS0W02d2WURFcyKe72bcUlSz-dYkaLE,10310
|
|
9
9
|
agenticdome_sdk/autogen.py,sha256=KP4qlIcsNXB-4ZT9D7Slc1xWEeWXRIWkc5HGW0U6k2c,29018
|
|
10
10
|
agenticdome_sdk/aws_bedrock.py,sha256=2zD9j7xi0jna0sMeMf-hKZdc3Y4RPwzj6tMVOUGgIDQ,69581
|
|
11
|
-
agenticdome_sdk/catalog_snapshot.json,sha256=
|
|
11
|
+
agenticdome_sdk/catalog_snapshot.json,sha256=51ls_eO8qy5BCZRamVz6G7F265WYFO2LaOEerO1zcA0,951
|
|
12
12
|
agenticdome_sdk/claude.py,sha256=XeY9AUu61SYcJjQVz_AtL_WaN6X4KqP5nprEbbr4Q6A,17456
|
|
13
13
|
agenticdome_sdk/client.py,sha256=SQk7BROrcedyHAfubGiwGNNGycq7W7L-Ncjroj1ugBg,69815
|
|
14
14
|
agenticdome_sdk/connect.py,sha256=MY30wXYA6OaZhs__E67KcFXEy7mZMBxMSV06BnlBjRg,18766
|
|
@@ -21,7 +21,7 @@ agenticdome_sdk/framework_edits.py,sha256=4BgWHxWKEkex8_DMhjVxjovpUVkrMF7TsCZzlS
|
|
|
21
21
|
agenticdome_sdk/generic_python.py,sha256=JtXRcYEZ6_Dgxnnv4QgqeMZR8dFVr8EqFDM-XYQ-GMA,6823
|
|
22
22
|
agenticdome_sdk/google_adk.py,sha256=2TA-tUhY0lOnkGcs1BN9CUEz67ebVX4HJ7mnNoRPcZs,57258
|
|
23
23
|
agenticdome_sdk/guided_integration.py,sha256=m7EsgLrPEJhfrVMaVWO2DtjYp6S8PwpCKDYZPNbVZ2o,52259
|
|
24
|
-
agenticdome_sdk/hook_catalog.py,sha256=
|
|
24
|
+
agenticdome_sdk/hook_catalog.py,sha256=XRc_MeEE3LArX1R0xfO3Vo6nZbF3U-4cOkTOMfMOZS8,29272
|
|
25
25
|
agenticdome_sdk/identity.py,sha256=mrymGgZSVsKJ9THRde54qGmMT7j_uZHmPJ-HtWk7PXE,4635
|
|
26
26
|
agenticdome_sdk/langgraph.py,sha256=FUvF6DSA5aZP3eoBoNeldgGtPrz-dO5xcVmrPPSBEhI,84312
|
|
27
27
|
agenticdome_sdk/lifecycle.py,sha256=9LvxmUU1LC_tMchb5uVFBnZIkVFUxOv3VH9wG_9gPtA,12855
|
|
@@ -32,15 +32,15 @@ agenticdome_sdk/mcp_rehearsal_server.py,sha256=cox4XqUTL8d0gaDzqxDZcEALkaz8otjOj
|
|
|
32
32
|
agenticdome_sdk/mcp_verification.py,sha256=WtRhAFVPTBqGOcHNf_db1m4jX9_TO0oxP98XWk4_ISY,14551
|
|
33
33
|
agenticdome_sdk/microsoft_agent_framework.py,sha256=GfIIuk0n-VhsZaTyoB7P6ilpz9bFLD95TWuX0rFSWeU,67219
|
|
34
34
|
agenticdome_sdk/microsoft_ai_foundry.py,sha256=YlO968s1dbAYcaEqhqufL92NFR66GuTtngnCv7-1mYc,56911
|
|
35
|
-
agenticdome_sdk/onboarding_cli.py,sha256=
|
|
35
|
+
agenticdome_sdk/onboarding_cli.py,sha256=V1MKiiYudC48SgaZNYMmUysgRjwARGG6S0VUf4ZLLtU,150677
|
|
36
36
|
agenticdome_sdk/openai_agents.py,sha256=0z-7FDBIG4usxnILpan6yjQHF4zXIzm9YLsh3-bW8Lw,57678
|
|
37
37
|
agenticdome_sdk/outcomes.py,sha256=jadWDzQaZXrHNvpPme8lQY0jihYLCoM3s4CihAq0JRo,2507
|
|
38
38
|
agenticdome_sdk/proof.py,sha256=ECKc14xSE0V1HHmcpZjfVz8-Q2H_fooah3BfdblFV8M,2878
|
|
39
39
|
agenticdome_sdk/pydantic.py,sha256=WKb8X0Fgydfid-ep8E-M8Yslz2pWcCP6w7n_aBxt1rI,54961
|
|
40
40
|
agenticdome_sdk/simulation.py,sha256=UCbZy3u9AzfxQCfY38SCV3CxGxhinV9EA4aHMPlK4mc,8426
|
|
41
41
|
agenticdome_sdk/smolagents.py,sha256=wjMA1HVAQ-9wRNM38Jr9wlCpKMhF-9vxtTk6R-kwQhs,19094
|
|
42
|
-
agenticdome_python_sdk-1.2.
|
|
43
|
-
agenticdome_python_sdk-1.2.
|
|
44
|
-
agenticdome_python_sdk-1.2.
|
|
45
|
-
agenticdome_python_sdk-1.2.
|
|
46
|
-
agenticdome_python_sdk-1.2.
|
|
42
|
+
agenticdome_python_sdk-1.2.37.dist-info/METADATA,sha256=MYsYXQMJm4WcWtRlr7bhEtug7k6TuLhJHknT8WjPhoE,145282
|
|
43
|
+
agenticdome_python_sdk-1.2.37.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
44
|
+
agenticdome_python_sdk-1.2.37.dist-info/entry_points.txt,sha256=cRfCphkr5gLrkGIzXJEtL50HdHLajoZLbZtcMLE8NoY,113
|
|
45
|
+
agenticdome_python_sdk-1.2.37.dist-info/top_level.txt,sha256=LZbbjXco5mqDrGwlTJpIKI5Sp6R_njzHHjExxAs9c3s,16
|
|
46
|
+
agenticdome_python_sdk-1.2.37.dist-info/RECORD,,
|
|
@@ -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.37",
|
|
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.37",
|
|
10
|
+
"url": "https://pypi.org/project/agenticdome-python-sdk/1.2.37/"
|
|
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_sdk/hook_catalog.py
CHANGED
|
@@ -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
|
|
|
@@ -2471,6 +2471,77 @@ def verify_project(root: Path, live: bool = False, run_tests: bool = False,
|
|
|
2471
2471
|
return (0 if result["ready"] else 2), result
|
|
2472
2472
|
|
|
2473
2473
|
|
|
2474
|
+
def validate_ai_integration_report(root: Path, report_path: Path) -> Tuple[int, Dict[str, Any]]:
|
|
2475
|
+
"""Validate an AI-assisted edit with the existing semantic and test gates.
|
|
2476
|
+
|
|
2477
|
+
Markdown is a customer-authored inventory, never an authorization or proof
|
|
2478
|
+
source. Only its digest is added to the source-free evidence exports.
|
|
2479
|
+
"""
|
|
2480
|
+
if report_path.name != "AgenticDome_Integration.md" or report_path.is_symlink() or not report_path.is_file():
|
|
2481
|
+
raise SystemExit("Select this workload's AgenticDome_Integration.md (regular file, exact name).")
|
|
2482
|
+
if not report_path.resolve().is_relative_to(root) or report_path.stat().st_size > 524288:
|
|
2483
|
+
raise SystemExit("The integration report must be inside this workload and no larger than 512 KB.")
|
|
2484
|
+
try:
|
|
2485
|
+
markdown = report_path.read_text(encoding="utf-8")
|
|
2486
|
+
except (UnicodeError, OSError) as exc:
|
|
2487
|
+
raise SystemExit("Read AgenticDome_Integration.md as UTF-8 and retry; the file could not be read safely.") from exc
|
|
2488
|
+
if not markdown or "\x00" in markdown:
|
|
2489
|
+
raise SystemExit("AgenticDome_Integration.md is empty or contains unsupported binary content.")
|
|
2490
|
+
scope_match = re.search(r"^Workload scope:\s*([^\r\n]+)", markdown, re.IGNORECASE | re.MULTILINE)
|
|
2491
|
+
if not scope_match:
|
|
2492
|
+
raise SystemExit("Add a Workload scope line naming this deployable workload to AgenticDome_Integration.md.")
|
|
2493
|
+
quoted = re.search(r"`([^`]+)`", scope_match.group(1))
|
|
2494
|
+
scope = (quoted.group(1) if quoted else scope_match.group(1).split()[0]).strip().rstrip("/")
|
|
2495
|
+
if Path(scope).name.casefold() != root.name.casefold() or ".." in Path(scope).parts:
|
|
2496
|
+
raise SystemExit("The report's Workload scope does not match this workload root. Run from the correct deployable service.")
|
|
2497
|
+
rows = re.findall(r"^\|\s*([1-8])\.([^\r\n]*)", markdown, re.MULTILINE)
|
|
2498
|
+
if len(rows) != 8 or {number for number, _ in rows} != {str(index) for index in range(1, 9)}:
|
|
2499
|
+
raise SystemExit("The integration report needs one valid row for each of the eight interception categories.")
|
|
2500
|
+
for _, cells_text in rows:
|
|
2501
|
+
cells = [cell.strip().replace("*", "").replace(",", "") for cell in cells_text.strip().strip("|").split("|")]
|
|
2502
|
+
if len(cells) != 6 or any(not re.fullmatch(r"\d{1,5}", cell) for cell in cells[1:]):
|
|
2503
|
+
raise SystemExit("Each interception row needs five non-negative counts after its category.")
|
|
2504
|
+
found, existing, new, unprotected, live = (int(cell) for cell in cells[1:])
|
|
2505
|
+
if any(value > 10000 for value in (found, existing, new, unprotected, live)) or existing + new + unprotected != found or live > existing + new:
|
|
2506
|
+
raise SystemExit("The report counts do not reconcile. Correct the AI integration inventory before validation.")
|
|
2507
|
+
digest = hashlib.sha256(markdown.encode("utf-8")).hexdigest()
|
|
2508
|
+
|
|
2509
|
+
inspection = _exportable_inspection(inspect_repository(root))
|
|
2510
|
+
if inspection.get("scope", {}).get("complete") is not True:
|
|
2511
|
+
raise SystemExit(_scope_gap_message(inspection))
|
|
2512
|
+
if inspection.get("mcp_protection", {}).get("detected") is True or inspection.get("openclaw_protection", {}).get("ready") is True:
|
|
2513
|
+
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.")
|
|
2514
|
+
inspection["ai_integration_report_sha256"] = digest
|
|
2515
|
+
inspection.pop("report_sha256", None)
|
|
2516
|
+
inspection["report_sha256"] = hashlib.sha256(
|
|
2517
|
+
json.dumps(inspection, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
|
2518
|
+
).hexdigest()
|
|
2519
|
+
plan = integration_plan(root)
|
|
2520
|
+
plan["inspection_report_sha256"] = inspection["report_sha256"]
|
|
2521
|
+
exit_code, verification = verify_project(root, run_tests=True, plan=plan)
|
|
2522
|
+
verification["ai_integration_report_sha256"] = digest
|
|
2523
|
+
verification.pop("report_sha256", None)
|
|
2524
|
+
verification["report_sha256"] = hashlib.sha256(
|
|
2525
|
+
json.dumps(verification, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
|
2526
|
+
).hexdigest()
|
|
2527
|
+
|
|
2528
|
+
inspection_path = root / "agenticdome-inspection.json"
|
|
2529
|
+
verification_path = root / ".agenticdome" / "verification.json"
|
|
2530
|
+
for output in (inspection_path, verification_path):
|
|
2531
|
+
if output.is_symlink() or not output.resolve().is_relative_to(root):
|
|
2532
|
+
raise SystemExit("An evidence output path is a symlink or leaves this workload; remove that path and retry.")
|
|
2533
|
+
_write_json(inspection_path, inspection)
|
|
2534
|
+
_write_json(verification_path, verification)
|
|
2535
|
+
return exit_code, {
|
|
2536
|
+
"status": "validation_passed" if verification["ready"] else "validation_needs_attention",
|
|
2537
|
+
"inspection": str(inspection_path.relative_to(root)),
|
|
2538
|
+
"verification": str(verification_path.relative_to(root)),
|
|
2539
|
+
"ai_integration_report_sha256": digest,
|
|
2540
|
+
"ready": verification["ready"],
|
|
2541
|
+
"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.",
|
|
2542
|
+
}
|
|
2543
|
+
|
|
2544
|
+
|
|
2474
2545
|
def _print(value: Any, as_json: bool = False) -> None:
|
|
2475
2546
|
if as_json or isinstance(value, (dict, list)):
|
|
2476
2547
|
print(json.dumps(value, indent=2, sort_keys=True))
|
|
@@ -2575,6 +2646,11 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
2575
2646
|
)
|
|
2576
2647
|
verify_parser.add_argument("--output")
|
|
2577
2648
|
|
|
2649
|
+
ai_validate_parser = subparsers.add_parser(
|
|
2650
|
+
"validate-report", help="Validate a coding-assistant integration report against this workload; no source upload or code edit."
|
|
2651
|
+
)
|
|
2652
|
+
ai_validate_parser.add_argument("--report", default="AgenticDome_Integration.md")
|
|
2653
|
+
|
|
2578
2654
|
action_parser = subparsers.add_parser(
|
|
2579
2655
|
"verify-action",
|
|
2580
2656
|
help="Run one safe customer test and correlate the real SDK hook, live verdict and handler spy.",
|
|
@@ -2754,6 +2830,13 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
|
|
|
2754
2830
|
record_verification(root, result)
|
|
2755
2831
|
_print(result)
|
|
2756
2832
|
return exit_code
|
|
2833
|
+
if args.command == "validate-report":
|
|
2834
|
+
report_path = Path(args.report)
|
|
2835
|
+
if not report_path.is_absolute():
|
|
2836
|
+
report_path = root / report_path
|
|
2837
|
+
exit_code, result = validate_ai_integration_report(root, report_path)
|
|
2838
|
+
_print(result)
|
|
2839
|
+
return exit_code
|
|
2757
2840
|
if args.command == "verify-action":
|
|
2758
2841
|
from .action_path_proof import run_action_path_test
|
|
2759
2842
|
command = list(args.test_command)
|
|
File without changes
|
{agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/licenses/NOTICE
RENAMED
|
File without changes
|
{agenticdome_python_sdk-1.2.36.dist-info → agenticdome_python_sdk-1.2.37.dist-info}/top_level.txt
RENAMED
|
File without changes
|