agenticdome-python-sdk 1.2.36__tar.gz → 1.2.37__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.
Files changed (98) hide show
  1. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/PKG-INFO +11 -2
  2. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/README.md +10 -1
  3. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_python_sdk.egg-info/PKG-INFO +11 -2
  4. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/catalog_snapshot.json +6 -6
  5. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/hook_catalog.py +1 -1
  6. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/onboarding_cli.py +83 -0
  7. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/customer-onboarding.md +27 -1
  8. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/pyproject.toml +1 -1
  9. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/CONTRIBUTING.md +0 -0
  10. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/LICENSE +0 -0
  11. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/MANIFEST.in +0 -0
  12. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/NOTICE +0 -0
  13. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/SECURITY.md +0 -0
  14. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_python_sdk.egg-info/SOURCES.txt +0 -0
  15. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
  16. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_python_sdk.egg-info/entry_points.txt +0 -0
  17. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_python_sdk.egg-info/requires.txt +0 -0
  18. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
  19. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/__init__.py +0 -0
  20. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/_framework_firewall.py +0 -0
  21. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/_mode.py +0 -0
  22. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/action_path_proof.py +0 -0
  23. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/agno.py +0 -0
  24. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/attestation.py +0 -0
  25. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/autogen.py +0 -0
  26. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/aws_bedrock.py +0 -0
  27. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/claude.py +0 -0
  28. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/client.py +0 -0
  29. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/connect.py +0 -0
  30. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/copilot_ir.py +0 -0
  31. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/copilot_ir_collector.cjs +0 -0
  32. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/crewai.py +0 -0
  33. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/demo.py +0 -0
  34. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/existing_integration.py +0 -0
  35. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/framework_edits.py +0 -0
  36. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/generic_python.py +0 -0
  37. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/google_adk.py +0 -0
  38. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/guided_integration.py +0 -0
  39. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/identity.py +0 -0
  40. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/langgraph.py +0 -0
  41. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/lifecycle.py +0 -0
  42. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/llamaindex.py +0 -0
  43. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/mcp_host.py +0 -0
  44. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/mcp_http_gateway.py +0 -0
  45. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/mcp_rehearsal_server.py +0 -0
  46. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/mcp_verification.py +0 -0
  47. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/microsoft_agent_framework.py +0 -0
  48. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/microsoft_ai_foundry.py +0 -0
  49. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/openai_agents.py +0 -0
  50. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/outcomes.py +0 -0
  51. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/proof.py +0 -0
  52. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/pydantic.py +0 -0
  53. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/simulation.py +0 -0
  54. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/agenticdome_sdk/smolagents.py +0 -0
  55. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/README.md +0 -0
  56. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/agno.md +0 -0
  57. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/autogen.md +0 -0
  58. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/aws-bedrock.md +0 -0
  59. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/claude-agent-sdk.md +0 -0
  60. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/crewai.md +0 -0
  61. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/custom-python.md +0 -0
  62. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/google-adk.md +0 -0
  63. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/langgraph.md +0 -0
  64. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/llamaindex.md +0 -0
  65. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/microsoft-agent-framework.md +0 -0
  66. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/microsoft-ai-foundry.md +0 -0
  67. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/openai-agents.md +0 -0
  68. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/pydanticai.md +0 -0
  69. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/frameworks/smolagents.md +0 -0
  70. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/mcp-integration.md +0 -0
  71. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/performance-evidence.md +0 -0
  72. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/docs/runtime-deployment.md +0 -0
  73. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/PRODUCTION_INTEGRATION.md +0 -0
  74. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/README.md +0 -0
  75. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/attack_demo.py +0 -0
  76. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/crewai_agenticdome_firewall.py +0 -0
  77. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/README.md +0 -0
  78. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/_shared.py +0 -0
  79. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/agno.py +0 -0
  80. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/autogen.py +0 -0
  81. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/aws_bedrock.py +0 -0
  82. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/claude_agent_sdk.py +0 -0
  83. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/crewai.py +0 -0
  84. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/custom_python.py +0 -0
  85. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/google_adk.py +0 -0
  86. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/langgraph.py +0 -0
  87. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/llamaindex.py +0 -0
  88. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/mcp.py +0 -0
  89. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/microsoft_agent_framework.py +0 -0
  90. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/microsoft_ai_foundry.py +0 -0
  91. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/openai_agents.py +0 -0
  92. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/pydanticai.py +0 -0
  93. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/frameworks/smolagents.py +0 -0
  94. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/langgraph_agenticdome_firewall.py +0 -0
  95. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/local_simulation_gallery.py +0 -0
  96. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/examples/mcp_gateway_action_firewall.py +0 -0
  97. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/setup.cfg +0 -0
  98. {agenticdome_python_sdk-1.2.36 → agenticdome_python_sdk-1.2.37}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agenticdome-python-sdk
3
- Version: 1.2.36
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
- Preview obtains the private, signed, catalog-bound semantic plan and keeps
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
- Preview obtains the private, signed, catalog-bound semantic plan and keeps
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.36
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
- Preview obtains the private, signed, catalog-bound semantic plan and keeps
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-09-29",
5
- "python_sdk_version": "1.2.36",
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.36",
10
- "url": "https://pypi.org/project/agenticdome-python-sdk/1.2.36/"
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.6",
25
- "url": "https://www.npmjs.com/package/openclaw/v/2026.9.6"
24
+ "version": "2026.9.7",
25
+ "url": "https://www.npmjs.com/package/openclaw/v/2026.9.7"
26
26
  }
27
27
  }
28
28
  }
@@ -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.6"
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)
@@ -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.36"
7
+ version = "1.2.37"
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"