controlzero 1.13.2__tar.gz → 1.13.3__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 (299) hide show
  1. {controlzero-1.13.2 → controlzero-1.13.3}/CHANGELOG.md +13 -0
  2. {controlzero-1.13.2 → controlzero-1.13.3}/PKG-INFO +1 -1
  3. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/__init__.py +1 -1
  4. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/doctor.py +83 -0
  5. controlzero-1.13.3/controlzero/cli/enforcement.py +861 -0
  6. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/antigravity.py +1 -0
  7. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/base.py +10 -0
  8. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/claude_code.py +1 -0
  9. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/codex_cli.py +1 -0
  10. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/cursor.py +1 -0
  11. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/cursor_cli.py +1 -0
  12. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/gemini_cli.py +1 -0
  13. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/kiro.py +2 -0
  14. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/main.py +200 -104
  15. {controlzero-1.13.2 → controlzero-1.13.3}/pyproject.toml +1 -1
  16. controlzero-1.13.3/tests/fixtures/adapter-contracts/antigravity.json +21 -0
  17. controlzero-1.13.3/tests/fixtures/adapter-contracts/claude_code.json +31 -0
  18. controlzero-1.13.3/tests/fixtures/adapter-contracts/codex_cli.json +24 -0
  19. controlzero-1.13.3/tests/fixtures/adapter-contracts/cursor.json +31 -0
  20. controlzero-1.13.3/tests/fixtures/adapter-contracts/gemini_cli.json +25 -0
  21. controlzero-1.13.3/tests/fixtures/adapter-contracts/kiro.json +37 -0
  22. controlzero-1.13.3/tests/test_adapter_contracts.py +216 -0
  23. {controlzero-1.13.2 → controlzero-1.13.3}/.gitignore +0 -0
  24. {controlzero-1.13.2 → controlzero-1.13.3}/Dockerfile.test +0 -0
  25. {controlzero-1.13.2 → controlzero-1.13.3}/LICENSE +0 -0
  26. {controlzero-1.13.2 → controlzero-1.13.3}/README.md +0 -0
  27. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/__main__.py +0 -0
  28. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/__init__.py +0 -0
  29. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/_messages.py +0 -0
  30. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/action_aliases.py +0 -0
  31. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/action_validator.py +0 -0
  32. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/bundle.py +0 -0
  33. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/condition_ops.py +0 -0
  34. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/credential_hook.py +0 -0
  35. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/credential_scanner.py +0 -0
  36. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/credentials_data/__init__.py +0 -0
  37. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/credentials_data/built_in.yaml +0 -0
  38. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/dlp_scanner.py +0 -0
  39. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/enforcer.py +0 -0
  40. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/hook_extractors.py +0 -0
  41. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/io_capture_producer.py +0 -0
  42. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/source_labels.py +0 -0
  43. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/tool_extractors.json +0 -0
  44. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/_internal/types.py +0 -0
  45. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/audit_local.py +0 -0
  46. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/audit_remote.py +0 -0
  47. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/canonical.py +0 -0
  48. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/__init__.py +0 -0
  49. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/__main__.py +0 -0
  50. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/_secrets.py +0 -0
  51. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/agent_config.py +0 -0
  52. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/console.py +0 -0
  53. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/debug_bundle.py +0 -0
  54. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/exec_cmd.py +0 -0
  55. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hook_entry.py +0 -0
  56. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/__init__.py +0 -0
  57. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/hosts/unknown.py +0 -0
  58. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/kiro_adapter.py +0 -0
  59. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/migrate.py +0 -0
  60. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/output.py +0 -0
  61. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/spool_cmd.py +0 -0
  62. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/telemetry_consent.py +0 -0
  63. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/antigravity/hooks.json +0 -0
  64. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/antigravity.yaml +0 -0
  65. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/autogen.yaml +0 -0
  66. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/claude-code.yaml +0 -0
  67. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/codex-cli.yaml +0 -0
  68. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/cost-cap.yaml +0 -0
  69. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/crewai.yaml +0 -0
  70. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/cursor.yaml +0 -0
  71. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/gemini-cli.yaml +0 -0
  72. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/generic.yaml +0 -0
  73. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/kiro/ide-file-save.kiro.hook +0 -0
  74. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/kiro/ide-pre-tool-use.kiro.hook +0 -0
  75. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/kiro/ide-prompt-submit.kiro.hook +0 -0
  76. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/kiro/kiro.yaml +0 -0
  77. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/langchain.yaml +0 -0
  78. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/mcp.yaml +0 -0
  79. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/templates/rag.yaml +0 -0
  80. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/cli/update_cmd.py +0 -0
  81. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/client.py +0 -0
  82. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/device.py +0 -0
  83. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/enrollment.py +0 -0
  84. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/error_codes.py +0 -0
  85. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/error_codes.yaml +0 -0
  86. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/errors.py +0 -0
  87. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hitl/__init__.py +0 -0
  88. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hitl/grant_protocol.py +0 -0
  89. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hitl/mock.py +0 -0
  90. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hitl/pending_approval.py +0 -0
  91. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hitl/secret_leak_guard.py +0 -0
  92. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hitl/status.py +0 -0
  93. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hook_integrity.py +0 -0
  94. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hooks/__init__.py +0 -0
  95. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hooks/tool_output_handler.py +0 -0
  96. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/hosted_policy.py +0 -0
  97. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/__init__.py +0 -0
  98. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/anthropic.py +0 -0
  99. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/autogen.py +0 -0
  100. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/braintrust.py +0 -0
  101. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/crewai/__init__.py +0 -0
  102. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/crewai/agent.py +0 -0
  103. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/crewai/crew.py +0 -0
  104. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/crewai/task.py +0 -0
  105. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/crewai/tool.py +0 -0
  106. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/google.py +0 -0
  107. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/google_adk/__init__.py +0 -0
  108. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/google_adk/agent.py +0 -0
  109. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/google_adk/tool.py +0 -0
  110. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/__init__.py +0 -0
  111. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/agent.py +0 -0
  112. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/callbacks.py +0 -0
  113. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/chain.py +0 -0
  114. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/graph.py +0 -0
  115. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/modern.py +0 -0
  116. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langchain/tool.py +0 -0
  117. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/langfuse.py +0 -0
  118. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/litellm.py +0 -0
  119. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/openai.py +0 -0
  120. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/pydantic_ai.py +0 -0
  121. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/integrations/vercel_ai.py +0 -0
  122. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/layout_migration.py +0 -0
  123. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/policy_loader.py +0 -0
  124. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/secrets/__init__.py +0 -0
  125. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/secrets/reference.py +0 -0
  126. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/secrets/resolver.py +0 -0
  127. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/secrets/secretstr.py +0 -0
  128. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/__init__.py +0 -0
  129. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_compress.py +0 -0
  130. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_constants.py +0 -0
  131. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_crc32c.py +0 -0
  132. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_crypto.py +0 -0
  133. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_frame.py +0 -0
  134. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_keyring.py +0 -0
  135. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_metrics.py +0 -0
  136. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_spool.py +0 -0
  137. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_state.py +0 -0
  138. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/_uploader.py +0 -0
  139. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/spool/cz-audit-v1.dict +0 -0
  140. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/tamper.py +0 -0
  141. {controlzero-1.13.2 → controlzero-1.13.3}/controlzero/tracecontext.py +0 -0
  142. {controlzero-1.13.2 → controlzero-1.13.3}/examples/hello_world.py +0 -0
  143. {controlzero-1.13.2 → controlzero-1.13.3}/tests/_fixtures/antigravity-envelope-expected.json +0 -0
  144. {controlzero-1.13.2 → controlzero-1.13.3}/tests/_fixtures/jcs_args_hash_vectors.json +0 -0
  145. {controlzero-1.13.2 → controlzero-1.13.3}/tests/conftest.py +0 -0
  146. {controlzero-1.13.2 → controlzero-1.13.3}/tests/integrations/__init__.py +0 -0
  147. {controlzero-1.13.2 → controlzero-1.13.3}/tests/integrations/test_google.py +0 -0
  148. {controlzero-1.13.2 → controlzero-1.13.3}/tests/parity/action_aliases.json +0 -0
  149. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/__init__.py +0 -0
  150. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/conftest.py +0 -0
  151. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_cli.py +0 -0
  152. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_concurrency.py +0 -0
  153. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_conformance.py +0 -0
  154. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_core.py +0 -0
  155. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_crash.py +0 -0
  156. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_diskfull.py +0 -0
  157. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_durable_default_tamper.py +0 -0
  158. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_keychain_dek.py +0 -0
  159. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_sink_wiring.py +0 -0
  160. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_transcript_localack.py +0 -0
  161. {controlzero-1.13.2 → controlzero-1.13.3}/tests/spool/test_spool_uploader.py +0 -0
  162. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_action_aliases.py +0 -0
  163. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_action_canonicalization.py +0 -0
  164. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_action_validator_t86.py +0 -0
  165. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_adapter_interface.py +0 -0
  166. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_agent_name_env.py +0 -0
  167. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_agy_docs_no_exit2_1373.py +0 -0
  168. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_adapter.py +0 -0
  169. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_envelope_parity.py +0 -0
  170. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_ga_blockers_1248.py +0 -0
  171. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_hook_check.py +0 -0
  172. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_install.py +0 -0
  173. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_posttooluse_observe_58.py +0 -0
  174. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_antigravity_tool_vocab_1303.py +0 -0
  175. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_api_key_mask.py +0 -0
  176. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_audit_project_id_attribution_pr2.py +0 -0
  177. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_audit_remote.py +0 -0
  178. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_audit_remote_io_capture.py +0 -0
  179. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_audit_remote_sdk_version.py +0 -0
  180. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_audit_sink_isolation.py +0 -0
  181. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_bundle_cache_freshness_1303.py +0 -0
  182. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_bundle_parser.py +0 -0
  183. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_bundle_translate.py +0 -0
  184. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_canonical_phase1a.py +0 -0
  185. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_capability_matrix_doc.py +0 -0
  186. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_carve_out.py +0 -0
  187. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_debug_bundle.py +0 -0
  188. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_extractor_integration.py +0 -0
  189. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_hook.py +0 -0
  190. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_hook_entry.py +0 -0
  191. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_hosted_refresh.py +0 -0
  192. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_init.py +0 -0
  193. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_init_templates.py +0 -0
  194. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_tail.py +0 -0
  195. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_test.py +0 -0
  196. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cli_validate.py +0 -0
  197. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_coding_agent_hooks.py +0 -0
  198. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_condition_operators_1495.py +0 -0
  199. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_conditions.py +0 -0
  200. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_config_format_parity_1303.py +0 -0
  201. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_conformance.py +0 -0
  202. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_console.py +0 -0
  203. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_credential_hook.py +0 -0
  204. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_cursor_adapter.py +0 -0
  205. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_default_action.py +0 -0
  206. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_deny_rule_reconciliation_1011.py +0 -0
  207. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_device.py +0 -0
  208. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_dlp_mask.py +0 -0
  209. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_dlp_scanner.py +0 -0
  210. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_doctor.py +0 -0
  211. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_engine_version_consistency.py +0 -0
  212. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_enrollment.py +0 -0
  213. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_env_dump_438.py +0 -0
  214. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_epic_1247_bryan_acceptance.py +0 -0
  215. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_error_codes.py +0 -0
  216. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_errors_e_codes.py +0 -0
  217. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_fail_closed_eval.py +0 -0
  218. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_failopen_1303.py +0 -0
  219. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_glob_matching.py +0 -0
  220. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_5d_email_install.py +0 -0
  221. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_cli_flag.py +0 -0
  222. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_exceptions.py +0 -0
  223. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_get_secret_hitl.py +0 -0
  224. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_mock_backend.py +0 -0
  225. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_pending_approval.py +0 -0
  226. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_request_approval.py +0 -0
  227. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_secret_leak_guard.py +0 -0
  228. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_6a_wait.py +0 -0
  229. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_conformance.py +0 -0
  230. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_phase2b_protocol.py +0 -0
  231. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_reason_codes.py +0 -0
  232. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hitl_validator_keys.py +0 -0
  233. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hook_extractors.py +0 -0
  234. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hook_integrity.py +0 -0
  235. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hook_mask_failclosed.py +0 -0
  236. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hosted_local_audit_1247.py +0 -0
  237. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hosted_local_shadow_warn_1265.py +0 -0
  238. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hosted_policy_e2e.py +0 -0
  239. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hosts_adapter.py +0 -0
  240. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hybrid_mode_strict.py +0 -0
  241. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_hybrid_mode_warn.py +0 -0
  242. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_install_hook_command.py +0 -0
  243. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_install_hooks.py +0 -0
  244. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_io_capture_producer.py +0 -0
  245. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_kiro_adapter.py +0 -0
  246. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_kiro_cli_e2e.py +0 -0
  247. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_kiro_cli_hook_pin_1265.py +0 -0
  248. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_kiro_cli_v210_hooks.py +0 -0
  249. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_kiro_hook_templates.py +0 -0
  250. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_kiro_install.py +0 -0
  251. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_layout_migration_t101.py +0 -0
  252. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_layout_parity_t102.py +0 -0
  253. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_local_mode_dict.py +0 -0
  254. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_local_mode_file_json.py +0 -0
  255. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_local_mode_file_yaml.py +0 -0
  256. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_localized_reason.py +0 -0
  257. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_log_fallback_stderr.py +0 -0
  258. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_log_options_ignored_hosted.py +0 -0
  259. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_log_rotation.py +0 -0
  260. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_migrate.py +0 -0
  261. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_min_sdk_version_gate.py +0 -0
  262. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_multi_client_per_project_175.py +0 -0
  263. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_no_policy_no_key.py +0 -0
  264. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_observe_mode_1247.py +0 -0
  265. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_package_rename_shim.py +0 -0
  266. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_part3_active_policy_count_1303.py +0 -0
  267. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_per_client_isolation_1011.py +0 -0
  268. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_policy_engine_version_phase1b.py +0 -0
  269. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_policy_freshness.py +0 -0
  270. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_policy_load_failclosed_f3.py +0 -0
  271. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_policy_settings.py +0 -0
  272. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_policy_source_audit.py +0 -0
  273. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_pr4_install_messaging.py +0 -0
  274. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_pr4_output.py +0 -0
  275. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_pr4_status.py +0 -0
  276. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_probe_audit_isolation.py +0 -0
  277. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_quarantine.py +0 -0
  278. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_reason_code.py +0 -0
  279. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_refresh.py +0 -0
  280. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_secrets.py +0 -0
  281. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_secrets_reference_resolver.py +0 -0
  282. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_shell_semantic_class.py +0 -0
  283. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_source_labels.py +0 -0
  284. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_sql_semantic_class.py +0 -0
  285. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_synthetic_policy_id_t79.py +0 -0
  286. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_t103_precedence.py +0 -0
  287. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_t104_cache_gc.py +0 -0
  288. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_t108_local_override_audit.py +0 -0
  289. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_t96_single_audit_log.py +0 -0
  290. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_t99_install_prefetch_bundle.py +0 -0
  291. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_tamper.py +0 -0
  292. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_tamper_behavior.py +0 -0
  293. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_tamper_hook.py +0 -0
  294. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_telemetry_consent.py +0 -0
  295. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_tracecontext.py +0 -0
  296. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_unsafe_int_boundary.py +0 -0
  297. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_update_cmd.py +0 -0
  298. {controlzero-1.13.2 → controlzero-1.13.3}/tests/test_upgrade_nudge.py +0 -0
  299. {controlzero-1.13.2 → controlzero-1.13.3}/tools/cz-kiro-adapter +0 -0
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.13.3 (2026-06-29): `verify --prove` enforcement-robustness layer
4
+
5
+ ### Added
6
+
7
+ - **`controlzero verify --prove` actively PROVES enforcement instead of trusting
8
+ config.** Plain `verify` only checked that the hook config was present, so an
9
+ adapter could report green while its hooks never fired -- a "false-green"
10
+ install, the exact class behind the kiro-cli 2.10 and Codex hook-trust reports.
11
+ `--prove` runs a live probe that MUST be denied and confirms the governance hook
12
+ actually fired, reports the effective enforcement state, and validates against
13
+ per-adapter contract fixtures. Catches silent non-enforcement that config-only
14
+ checks miss.
15
+
3
16
  ## 1.13.2 (2026-06-28): kiro-cli 2.10 install crash + cross-adapter hook hardening
4
17
 
5
18
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: controlzero
3
- Version: 1.13.2
3
+ Version: 1.13.3
4
4
  Summary: AI agent governance: policies, audit, and observability for tool calls. Works locally with no signup.
5
5
  Project-URL: Homepage, https://controlzero.ai
6
6
  Project-URL: Documentation, https://docs.controlzero.ai
@@ -41,7 +41,7 @@ from controlzero.hitl.grant_protocol import (
41
41
  from controlzero.policy_loader import load_policy
42
42
  from controlzero.secrets import SecretRef, SecretStr, secret_ref
43
43
 
44
- __version__ = "1.13.2"
44
+ __version__ = "1.13.3"
45
45
 
46
46
  __all__ = [
47
47
  "Client",
@@ -457,6 +457,87 @@ def _check_antigravity_hook_live() -> List[Finding]:
457
457
  return findings
458
458
 
459
459
 
460
+ # -----------------------------------------------------------------------------
461
+ # Prove-enforcement live checks (R1 + R2) for the SAFE-NOW adapters.
462
+ #
463
+ # These generalize the Antigravity liveness check to every adapter via the
464
+ # shared controlzero.cli.enforcement module: a pure offline EFFECTIVE-STATE
465
+ # read (proves the AGENT will INVOKE our command -- gate on, hook trusted,
466
+ # default agent set, failClosed present, the CZ block in the precedence-winning
467
+ # layer) PLUS a real-deny PROBE through the EXACT installed command (proves the
468
+ # command resolves and actually denies). "Present but not effective" => ERROR,
469
+ # not a silent green. An adapter not configured on this box emits NO finding (a
470
+ # valid state); doctor exit 1 stays reserved for active problems.
471
+ # -----------------------------------------------------------------------------
472
+
473
+ # Adapters that can be proven offline today (Phase A+B / SAFE-NOW). Antigravity
474
+ # keeps its dedicated dry-run check above; codex trust is a WARN (needs-live).
475
+ _PROVE_ADAPTERS = ("claude_code", "cursor", "gemini_cli", "codex_cli", "kiro")
476
+
477
+
478
+ def _check_adapter_enforcement_live(adapter: str) -> List[Finding]:
479
+ """One prove-enforcement finding for an adapter (or none when it is not
480
+ installed on this box). ERROR when present-but-not-effective; WARN for
481
+ needs-live boundaries; silent when the adapter is absent."""
482
+ from controlzero.cli import enforcement
483
+
484
+ reader = enforcement.EFFECTIVE_STATE_READERS.get(adapter)
485
+ if reader is None:
486
+ return []
487
+ try:
488
+ state = reader()
489
+ except Exception: # noqa: BLE001
490
+ return []
491
+ if not state.installed:
492
+ return []
493
+
494
+ findings: List[Finding] = []
495
+ path = state.config_path or adapter
496
+
497
+ if not state.ok:
498
+ findings.append(Finding(
499
+ path=path, line=1, col=1, severity="ERROR", code="E1010",
500
+ message=(
501
+ f"{adapter} hook is configured but NOT effectively enforcing: "
502
+ + "; ".join(state.red_reasons)
503
+ ),
504
+ fix_hint=f"run `controlzero install {adapter.replace('_', '-')}` and re-check `controlzero verify --prove`",
505
+ ))
506
+ # Still surface needs-live warns alongside the error.
507
+ for w in state.warns:
508
+ findings.append(Finding(
509
+ path=path, line=1, col=1, severity="WARN", code="E1011",
510
+ message=f"{adapter}: {w}", fix_hint="see `controlzero verify --prove` for the live signal",
511
+ ))
512
+ return findings
513
+
514
+ # Effective-state holds -> drive a real deny through the installed command.
515
+ installed_cmd = enforcement.installed_command(adapter)
516
+ contract = enforcement.ADAPTER_CONTRACTS.get(adapter)
517
+ if installed_cmd and contract is not None:
518
+ res = enforcement.run_enforcement_probe(
519
+ installed_cmd,
520
+ adapter=adapter,
521
+ decision_via_exit_code=(contract.block_mechanism != "stdout_decision"),
522
+ )
523
+ if not res.blocked:
524
+ findings.append(Finding(
525
+ path=path, line=1, col=1, severity="ERROR", code="E1012",
526
+ message=(
527
+ f"{adapter} hook is wired but a real known-deny probe was NOT blocked "
528
+ f"(exit={res.exit_code}{', error=' + res.error if res.error else ''}) -- "
529
+ "the command does not resolve or does not enforce, tools run UNGOVERNED"
530
+ ),
531
+ fix_hint=f"reinstall (`controlzero install {adapter.replace('_', '-')}`); confirm the interpreter / PATH the hook resolves",
532
+ ))
533
+ for w in state.warns:
534
+ findings.append(Finding(
535
+ path=path, line=1, col=1, severity="WARN", code="E1011",
536
+ message=f"{adapter}: {w}", fix_hint="see `controlzero verify --prove` for the live signal",
537
+ ))
538
+ return findings
539
+
540
+
460
541
  # -----------------------------------------------------------------------------
461
542
  # Public entrypoint. Wired into the CLI as `controlzero doctor`.
462
543
  # -----------------------------------------------------------------------------
@@ -472,6 +553,8 @@ def run_doctor(verbose: bool = False) -> int:
472
553
  findings.extend(_check_config_permissions())
473
554
  findings.extend(_check_global_environment())
474
555
  findings.extend(_check_antigravity_hook_live())
556
+ for _adapter in _PROVE_ADAPTERS:
557
+ findings.extend(_check_adapter_enforcement_live(_adapter))
475
558
 
476
559
  errors = [f for f in findings if f.severity == "ERROR"]
477
560
  warns = [f for f in findings if f.severity == "WARN"]