agent-lifecycle-kit 2.17.0__tar.gz → 2.19.0__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 (513) hide show
  1. {agent_lifecycle_kit-2.17.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.19.0}/PKG-INFO +3 -3
  2. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/README.md +2 -2
  3. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/pyproject.toml +1 -1
  4. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/_version.py +1 -1
  5. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/external_check.py +5 -8
  6. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/process.py +2 -0
  7. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/process_control.py +33 -2
  8. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/worktree_identity.py +8 -10
  9. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/changesets/git.py +23 -21
  10. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/changesets/git_io.py +358 -0
  11. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/changesets/snapshot.py +8 -14
  12. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_contracts.py +9 -2
  13. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_planning.py +53 -22
  14. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +4 -1
  15. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/parsers.py +5 -83
  16. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/cli/plan_lock_commands.py +306 -0
  17. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/planning_parsers.py +18 -0
  18. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +34 -10
  19. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/contracts/artifact_authoring_schemas.py +44 -0
  20. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/ed25519.py +11 -4
  21. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/contracts/launch_qualification.py +105 -0
  22. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/redaction.py +34 -1
  23. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +78 -0
  24. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/schemas.py +69 -3
  25. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +73 -17
  26. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection.py +18 -4
  27. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_common.py +64 -12
  28. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +100 -44
  29. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/host_protocol/opencode_compatibility.py +153 -0
  30. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/authority.py +30 -4
  31. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/neutrality/git_objects.py +208 -0
  32. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/change_summary.py +29 -26
  33. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/assignments.py +9 -0
  34. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/review_mesh/operator_templates.py +791 -0
  35. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/results.py +44 -3
  36. agent_lifecycle_kit-2.19.0/src/agent_lifecycle/workflow/artifact_builders.py +164 -0
  37. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +3 -3
  38. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +4 -0
  39. agent_lifecycle_kit-2.17.0/src/agent_lifecycle/cli/plan_lock_commands.py +0 -96
  40. agent_lifecycle_kit-2.17.0/src/agent_lifecycle/contracts/launch_qualification.py +0 -47
  41. agent_lifecycle_kit-2.17.0/src/agent_lifecycle/neutrality/git_objects.py +0 -177
  42. agent_lifecycle_kit-2.17.0/src/agent_lifecycle/review_mesh/operator_templates.py +0 -320
  43. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/LICENSE +0 -0
  44. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/NOTICE +0 -0
  45. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/README.md +0 -0
  46. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/manifest.json +0 -0
  47. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
  48. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
  49. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
  50. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
  51. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
  52. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
  53. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
  54. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
  55. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
  56. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
  57. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/setup.cfg +0 -0
  58. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/__init__.py +0 -0
  59. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/__main__.py +0 -0
  60. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/__init__.py +0 -0
  61. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/closing_resource_admission.py +0 -0
  62. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/closing_resource_policy.py +0 -0
  63. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/closing_resource_recovery.py +0 -0
  64. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/closing_resources.py +0 -0
  65. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/contracts.py +0 -0
  66. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/declared_ledger.py +0 -0
  67. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/declared_ledger_legacy.py +0 -0
  68. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/declared_ledger_records.py +0 -0
  69. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/host_bridge.py +0 -0
  70. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/input_fit.py +0 -0
  71. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/journal.py +0 -0
  72. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/normalization.py +0 -0
  73. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/opening_balances.py +0 -0
  74. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/profile_schema.py +0 -0
  75. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/source_usage_context.py +0 -0
  76. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/support_profiles.py +0 -0
  77. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/workflow_authority_store.py +0 -0
  78. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/workflow_state_store.py +0 -0
  79. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/accounting/workflow_store.py +0 -0
  80. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
  81. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
  82. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/attempt_authority.py +0 -0
  83. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/bootstrap_r11.py +0 -0
  84. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/codex_exact_prompt.py +0 -0
  85. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/codex_input_diagnostics.py +0 -0
  86. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/codex_prompt_preparation.py +0 -0
  87. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/codex_source_exposure.py +0 -0
  88. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/codex_source_subject.py +0 -0
  89. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
  90. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
  91. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/external_jobs.py +0 -0
  92. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/immutable_input.py +0 -0
  93. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/input_lifecycle.py +0 -0
  94. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +0 -0
  95. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +0 -0
  96. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
  97. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/lifecycle_control.py +0 -0
  98. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/limited_native_evidence.py +0 -0
  99. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
  100. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/managed_process.py +0 -0
  101. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/ordinary_audit.py +0 -0
  102. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
  103. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
  104. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/private_input.py +0 -0
  105. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
  106. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +0 -0
  107. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +0 -0
  108. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
  109. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
  110. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
  111. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_contracts.py +0 -0
  112. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_history.py +0 -0
  113. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_inputs.py +0 -0
  114. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_preparation_records.py +0 -0
  115. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_roles.py +0 -0
  116. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_shards.py +0 -0
  117. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_support.py +0 -0
  118. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/source_review_transcript.py +0 -0
  119. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
  120. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
  121. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
  122. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
  123. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +0 -0
  124. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/windows_pipe.py +0 -0
  125. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
  126. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/__init__.py +0 -0
  127. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
  128. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/delta.py +0 -0
  129. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/domain_language.py +0 -0
  130. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/external_checks.py +0 -0
  131. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/implementation.py +0 -0
  132. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/ownership.py +0 -0
  133. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/package.py +0 -0
  134. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
  135. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
  136. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
  137. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
  138. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/audit/security_analysis.py +0 -0
  139. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
  140. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
  141. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
  142. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
  143. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
  144. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
  145. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
  146. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
  147. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
  148. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/__init__.py +0 -0
  149. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/adapter.py +0 -0
  150. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
  151. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/command_registry.py +0 -0
  152. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch.py +0 -0
  153. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
  154. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_audit.py +0 -0
  155. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
  156. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
  157. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
  158. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
  159. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/errors.py +0 -0
  160. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/followup.py +0 -0
  161. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
  162. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/main.py +0 -0
  163. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/metrics_parser.py +0 -0
  164. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/observability_parsers.py +0 -0
  165. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/policy.py +0 -0
  166. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
  167. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/project.py +0 -0
  168. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/research.py +0 -0
  169. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/start.py +0 -0
  170. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/strategy.py +0 -0
  171. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/workflow_task_parsers.py +0 -0
  172. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/cli/worktree.py +0 -0
  173. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
  174. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/compiler/output_contract.py +0 -0
  175. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/compiler/phase_packets.py +0 -0
  176. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
  177. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
  178. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/__init__.py +0 -0
  179. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/checkpoint_store.py +0 -0
  180. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
  181. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
  182. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/external_memory.py +0 -0
  183. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/profiles.py +0 -0
  184. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/rendering.py +0 -0
  185. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
  186. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
  187. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
  188. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
  189. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
  190. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
  191. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
  192. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
  193. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/authority_io.py +0 -0
  194. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/authority_text.py +0 -0
  195. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
  196. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/bounded_json.py +0 -0
  197. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
  198. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
  199. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/closing_resource_schemas.py +0 -0
  200. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/closing_window_schemas.py +0 -0
  201. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
  202. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
  203. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
  204. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
  205. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
  206. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/deadline_schemas.py +0 -0
  207. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/deadlines.py +0 -0
  208. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/domain_language.py +0 -0
  209. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/domain_language_schemas.py +0 -0
  210. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/errors.py +0 -0
  211. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
  212. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/evidence_receipt_schemas.py +0 -0
  213. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
  214. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/external_check_schemas.py +0 -0
  215. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/external_job_schemas.py +0 -0
  216. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/finding_check_schemas.py +0 -0
  217. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
  218. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
  219. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/immutable_input_schemas.py +0 -0
  220. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
  221. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
  222. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/independent_evidence_schemas.py +0 -0
  223. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/legacy_runner_schemas.py +0 -0
  224. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/lifecycle_action_catalog.py +0 -0
  225. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/lifecycle_control_definitions.py +0 -0
  226. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/lifecycle_control_schemas.py +0 -0
  227. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/lifecycle_control_validation.py +0 -0
  228. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
  229. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
  230. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/model_classes.py +0 -0
  231. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/multi_run_view_schemas.py +0 -0
  232. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/ownership_paths.py +0 -0
  233. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/paths.py +0 -0
  234. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/performance_limits.py +0 -0
  235. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
  236. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/phase_packet_schemas.py +0 -0
  237. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
  238. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
  239. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/plan_manifest_schemas.py +0 -0
  240. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
  241. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
  242. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/private_storage.py +0 -0
  243. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
  244. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/process_lock.py +0 -0
  245. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
  246. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
  247. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
  248. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
  249. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
  250. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
  251. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
  252. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/public_locators.py +0 -0
  253. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
  254. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/release_accounting_schemas.py +0 -0
  255. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
  256. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
  257. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
  258. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
  259. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/review_round_schemas.py +0 -0
  260. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
  261. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/reviewer_identity_schemas.py +0 -0
  262. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
  263. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
  264. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
  265. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
  266. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/scoped_usage_schemas.py +0 -0
  267. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/security_analysis_schemas.py +0 -0
  268. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/statistical_evidence_schemas.py +0 -0
  269. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
  270. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/structured_result_schemas.py +0 -0
  271. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
  272. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +0 -0
  273. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +0 -0
  274. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +0 -0
  275. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
  276. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
  277. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/validation.py +0 -0
  278. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/validation_ladder_schemas.py +0 -0
  279. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/windows_security.py +0 -0
  280. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_artifact_schemas.py +0 -0
  281. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_authority.py +0 -0
  282. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_authority_schemas.py +0 -0
  283. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_authorization_schemas.py +0 -0
  284. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_continuation_batch_schemas.py +0 -0
  285. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_continuation_schemas.py +0 -0
  286. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_economics_schemas.py +0 -0
  287. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_run_schemas.py +0 -0
  288. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/contracts/workflow_state_schemas.py +0 -0
  289. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/__init__.py +0 -0
  290. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/external-checks/declared-dependencies.v1.json +0 -0
  291. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/external-checks/import-boundaries.v1.json +0 -0
  292. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/external-checks/module-dependencies.v1.json +0 -0
  293. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +0 -0
  294. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +0 -0
  295. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
  296. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/quick-change.v1.json +0 -0
  297. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/research-review.v1.json +0 -0
  298. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +0 -0
  299. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +0 -0
  300. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
  301. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
  302. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
  303. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
  304. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
  305. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
  306. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
  307. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
  308. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/followup/__init__.py +0 -0
  309. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/followup/records.py +0 -0
  310. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
  311. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/freeze/locks.py +0 -0
  312. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
  313. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/goal/__init__.py +0 -0
  314. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/goal/records.py +0 -0
  315. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/goal/view.py +0 -0
  316. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
  317. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
  318. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
  319. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
  320. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
  321. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
  322. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
  323. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/external_jobs.py +0 -0
  324. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
  325. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
  326. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
  327. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
  328. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
  329. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
  330. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
  331. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
  332. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/lifecycle_control.py +0 -0
  333. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/lifecycle_control_qualification.py +0 -0
  334. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/lifecycle_gate.py +0 -0
  335. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
  336. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
  337. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/sandbox_receipts.py +0 -0
  338. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
  339. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/structured_results.py +0 -0
  340. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
  341. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
  342. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
  343. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/__init__.py +0 -0
  344. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
  345. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
  346. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
  347. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
  348. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
  349. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
  350. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
  351. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
  352. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
  353. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/planning.py +0 -0
  354. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/security_findings.py +0 -0
  355. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
  356. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
  357. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
  358. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/audit_efficiency.py +0 -0
  359. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
  360. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
  361. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
  362. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/costs.py +0 -0
  363. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
  364. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
  365. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
  366. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
  367. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/release_accounting.py +0 -0
  368. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
  369. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/metrics/workflow_economics.py +0 -0
  370. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/migration/__init__.py +0 -0
  371. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/migration/legacy_runner.py +0 -0
  372. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
  373. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
  374. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
  375. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
  376. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
  377. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
  378. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
  379. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
  380. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/ed25519.py +0 -0
  381. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
  382. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
  383. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/matching.py +0 -0
  384. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
  385. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
  386. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
  387. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/scanner.py +0 -0
  388. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
  389. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/__init__.py +0 -0
  390. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
  391. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/completeness.py +0 -0
  392. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/continuity.py +0 -0
  393. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/deltas.py +0 -0
  394. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/manifest_contract.py +0 -0
  395. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/prerequisites.py +0 -0
  396. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
  397. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/templates.py +0 -0
  398. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/tiering.py +0 -0
  399. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/traceability.py +0 -0
  400. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/validation.py +0 -0
  401. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/planning/verification.py +0 -0
  402. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/__init__.py +0 -0
  403. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
  404. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/apply.py +0 -0
  405. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
  406. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/proposals.py +0 -0
  407. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
  408. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
  409. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
  410. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
  411. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/__init__.py +0 -0
  412. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/domain_language.py +0 -0
  413. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/guidance.py +0 -0
  414. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/merge.py +0 -0
  415. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/presets.py +0 -0
  416. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/principles.py +0 -0
  417. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/project/profile.py +0 -0
  418. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/py.typed +0 -0
  419. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/__init__.py +0 -0
  420. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
  421. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
  422. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
  423. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
  424. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/dependency_impact.py +0 -0
  425. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/external_checks.py +0 -0
  426. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
  427. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/packs.py +0 -0
  428. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/security_analysis.py +0 -0
  429. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/quality/validation_ladder.py +0 -0
  430. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
  431. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/attention.py +0 -0
  432. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
  433. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
  434. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/multi_run.py +0 -0
  435. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
  436. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
  437. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
  438. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
  439. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
  440. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
  441. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/research/__init__.py +0 -0
  442. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/research/evidence.py +0 -0
  443. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/research/provenance.py +0 -0
  444. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/research/validation.py +0 -0
  445. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/resources.py +0 -0
  446. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review/__init__.py +0 -0
  447. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review/provenance.py +0 -0
  448. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review/validation.py +0 -0
  449. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
  450. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
  451. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/independence.py +0 -0
  452. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
  453. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
  454. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
  455. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/review_mesh/validation_helpers.py +0 -0
  456. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/runner/__init__.py +0 -0
  457. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/runner/core.py +0 -0
  458. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
  459. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/specification/__init__.py +0 -0
  460. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
  461. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
  462. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
  463. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/specification/validation.py +0 -0
  464. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
  465. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
  466. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/audit_evidence.py +0 -0
  467. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/authorization.py +0 -0
  468. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
  469. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
  470. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
  471. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
  472. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
  473. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/closing_policy.py +0 -0
  474. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/closing_window.py +0 -0
  475. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/continuation.py +0 -0
  476. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/continuation_batch.py +0 -0
  477. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/controller.py +0 -0
  478. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/deadline_guards.py +0 -0
  479. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/events.py +0 -0
  480. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
  481. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
  482. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/gates.py +0 -0
  483. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/immutable_input.py +0 -0
  484. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
  485. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/initialization.py +0 -0
  486. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/leases.py +0 -0
  487. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/limited_usage.py +0 -0
  488. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
  489. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
  490. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
  491. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
  492. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
  493. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
  494. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/query.py +0 -0
  495. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
  496. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
  497. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
  498. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/run.py +0 -0
  499. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
  500. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
  501. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/sandbox_receipts.py +0 -0
  502. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
  503. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/state.py +0 -0
  504. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/task_outcomes.py +0 -0
  505. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/task_start.py +0 -0
  506. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
  507. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/transactions.py +0 -0
  508. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/workflow/transition_contract.py +0 -0
  509. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
  510. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
  511. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
  512. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
  513. {agent_lifecycle_kit-2.17.0 → agent_lifecycle_kit-2.19.0}/src/agent_lifecycle_kit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-lifecycle-kit
3
- Version: 2.17.0
3
+ Version: 2.19.0
4
4
  Summary: Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion.
5
5
  Author: Agent Lifecycle Kit contributors
6
6
  License: Apache-2.0
@@ -41,9 +41,9 @@ and secret handling stay in adapters or host-local profiles.
41
41
  ALK provides a verifiable finish for external-agent work with proportionate control. It adds only the checks and evidence needed for the task; most of the time remains for research, implementation and product verification.
42
42
 
43
43
  ## Quick start
44
- Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
44
+ Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
45
45
 
46
- It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.17.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
46
+ It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.19.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
47
47
 
48
48
  For a quick start, run:
49
49
 
@@ -19,9 +19,9 @@ and secret handling stay in adapters or host-local profiles.
19
19
  ALK provides a verifiable finish for external-agent work with proportionate control. It adds only the checks and evidence needed for the task; most of the time remains for research, implementation and product verification.
20
20
 
21
21
  ## Quick start
22
- Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
22
+ Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
23
23
 
24
- It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.17.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
24
+ It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.19.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
25
25
 
26
26
  For a quick start, run:
27
27
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-lifecycle-kit"
7
- version = "2.17.0"
7
+ version = "2.19.0"
8
8
  description = "Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"
@@ -1,3 +1,3 @@
1
1
  """Package version."""
2
2
 
3
- __version__ = "2.17.0"
3
+ __version__ = "2.19.0"
@@ -6,7 +6,6 @@ import hashlib
6
6
  import json
7
7
  import os
8
8
  import shutil
9
- import subprocess
10
9
  from datetime import UTC, datetime
11
10
  from pathlib import Path
12
11
  from typing import Any
@@ -15,6 +14,7 @@ from agent_lifecycle.adapter_sessions.env import resolve_launch_env
15
14
  from agent_lifecycle.adapter_sessions.process import run_process
16
15
  from agent_lifecycle.adapter_sessions.worktree_identity import capture_git_worktree_identity
17
16
  from agent_lifecycle.audit.external_checks import audit_external_check_result
17
+ from agent_lifecycle.changesets.git_io import run_bounded_command
18
18
  from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
19
19
  from agent_lifecycle.contracts.external_check_schemas import (
20
20
  MAX_ARG_BYTES,
@@ -258,16 +258,13 @@ def _source_snapshot(root: Path, revision: str | None) -> dict[str, Any]:
258
258
 
259
259
  def _source_paths(root: Path) -> list[str]:
260
260
  try:
261
- completed = subprocess.run(
261
+ completed = run_bounded_command(
262
262
  ["git", "ls-files", "--cached", "--others", "--exclude-standard", "-z"],
263
263
  cwd=root,
264
- shell=False,
265
- stdin=subprocess.DEVNULL,
266
- capture_output=True,
267
- timeout=30,
268
- check=False,
264
+ timeout_seconds=30,
265
+ max_stdout_bytes=MAX_SOURCE_FILE_LIST_BYTES,
269
266
  )
270
- except (OSError, subprocess.TimeoutExpired) as exc:
267
+ except (OSError, LifecycleError) as exc:
271
268
  raise LifecycleError("external-check-source-unavailable", "source file set could not be captured") from exc
272
269
  if completed.returncode != 0 or len(completed.stdout) > MAX_SOURCE_FILE_LIST_BYTES:
273
270
  raise LifecycleError("external-check-source-unavailable", "source file set could not be captured")
@@ -704,6 +704,8 @@ def run_process(
704
704
  attempt_id=attempt_id,
705
705
  adapter_id=adapter_id,
706
706
  retry=retry,
707
+ timeout_seconds=timeout_seconds,
708
+ cleanup_grace_seconds=cleanup_grace_seconds,
707
709
  )
708
710
  if invalid is not None:
709
711
  return invalid
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import math
5
6
  import subprocess
6
7
  import threading
7
8
  from typing import Any
@@ -13,6 +14,7 @@ from agent_lifecycle.contracts.process_execution_schemas import build_process_ex
13
14
  DEFAULT_OUTPUT_BYTES = 262_144
14
15
  DEFAULT_CLEANUP_GRACE_SECONDS = 1.0
15
16
 
17
+
16
18
  def _invalid_limit_failure(
17
19
  *,
18
20
  input_bytes: bytes,
@@ -23,7 +25,32 @@ def _invalid_limit_failure(
23
25
  attempt_id: str | None,
24
26
  adapter_id: str | None,
25
27
  retry: dict[str, Any] | None,
28
+ timeout_seconds: float,
29
+ cleanup_grace_seconds: float,
26
30
  ) -> dict[str, Any] | None:
31
+ for name, value in (("timeout", timeout_seconds), ("cleanup-grace", cleanup_grace_seconds)):
32
+ if (
33
+ type(value) not in (int, float)
34
+ or not math.isfinite(value)
35
+ or value < 0
36
+ or (name == "timeout" and value == 0)
37
+ ):
38
+ return _bounded_failure(
39
+ f"adapter-process-{name}-invalid",
40
+ input_bytes=len(input_bytes),
41
+ output_bytes=0,
42
+ process_started=False,
43
+ details={
44
+ "reason": (
45
+ "positive-finite-limit-required" if name == "timeout" else "nonnegative-finite-limit-required"
46
+ )
47
+ },
48
+ command_hash=command_hash,
49
+ operation_id=operation_id,
50
+ attempt_id=attempt_id,
51
+ adapter_id=adapter_id,
52
+ retry=retry,
53
+ )
27
54
  if max_input_bytes is not None and len(input_bytes) > max_input_bytes:
28
55
  return _bounded_failure(
29
56
  "adapter-process-input-limit",
@@ -52,6 +79,7 @@ def _invalid_limit_failure(
52
79
  )
53
80
  return None
54
81
 
82
+
55
83
  def _build_process_result(
56
84
  process: subprocess.Popen[Any],
57
85
  *,
@@ -75,8 +103,9 @@ def _build_process_result(
75
103
  ) -> dict[str, Any]:
76
104
  stdout = capture.captures["stdout"].decode("utf-8", errors="replace")
77
105
  stderr = capture.captures["stderr"].decode("utf-8", errors="replace")
78
- stdout_tail, stdout_redacted = redact_process_text(stdout[-2000:])
79
- stderr_tail, stderr_redacted = redact_process_text(stderr[-2000:])
106
+ safe_stdout, stdout_redacted = redact_process_text(stdout)
107
+ safe_stderr, stderr_redacted = redact_process_text(stderr)
108
+ stdout_tail, stderr_tail = safe_stdout[-2000:], safe_stderr[-2000:]
80
109
  blockers = _process_blockers(
81
110
  capture.output_limit_exceeded,
82
111
  timed_out=timed_out,
@@ -132,6 +161,7 @@ def _build_process_result(
132
161
  "blockers": blockers,
133
162
  }
134
163
 
164
+
135
165
  def _process_blockers(
136
166
  output_limit_exceeded: threading.Event,
137
167
  *,
@@ -155,6 +185,7 @@ def _process_blockers(
155
185
  blockers.append({"code": "adapter-process-cleanup-unverified", "cleanup": cleanup})
156
186
  return blockers
157
187
 
188
+
158
189
  def _bounded_failure(
159
190
  code: str,
160
191
  *,
@@ -4,17 +4,18 @@ from __future__ import annotations
4
4
 
5
5
  import hashlib
6
6
  import os
7
- import subprocess
8
7
  import time
9
8
  from pathlib import Path
10
9
  from typing import Any
11
10
 
11
+ from agent_lifecycle.changesets.git_io import run_bounded_command
12
12
  from agent_lifecycle.contracts import LifecycleError, canonical_digest
13
13
 
14
14
  MAX_UNTRACKED_FILES = 100_000
15
15
  MAX_UNTRACKED_BYTES = 4 * 1024 * 1024 * 1024
16
16
  MAX_HASH_CHUNK_BYTES = 256 * 1024
17
17
  MAX_CAPTURE_SECONDS = 120.0
18
+ MAX_GIT_CAPTURE_BYTES = 128 * 1024 * 1024
18
19
 
19
20
 
20
21
  def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
@@ -29,8 +30,8 @@ def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
29
30
  root = project_root.resolve()
30
31
  deadline = time.monotonic() + MAX_CAPTURE_SECONDS
31
32
  head = _git_bytes(root, ["rev-parse", "HEAD"], deadline).decode("ascii", errors="strict").strip()
32
- staged = _git_bytes(root, ["diff", "--cached", "--binary", "--no-ext-diff"], deadline)
33
- unstaged = _git_bytes(root, ["diff", "--binary", "--no-ext-diff"], deadline)
33
+ staged = _git_bytes(root, ["diff", "--cached", "--binary", "--no-ext-diff", "--no-textconv"], deadline)
34
+ unstaged = _git_bytes(root, ["diff", "--binary", "--no-ext-diff", "--no-textconv"], deadline)
34
35
  submodules = _git_bytes(root, ["submodule", "status", "--recursive"], deadline)
35
36
  untracked_raw = _git_bytes(root, ["ls-files", "--others", "--exclude-standard", "-z"], deadline)
36
37
  names = sorted(item for item in untracked_raw.split(b"\0") if item)
@@ -131,16 +132,13 @@ def _git_bytes(root: Path, args: list[str], deadline: float) -> bytes:
131
132
  if remaining <= 0:
132
133
  raise LifecycleError("planning-worktree-identity-timeout", "Git identity capture exceeded its deadline")
133
134
  try:
134
- result = subprocess.run(
135
+ result = run_bounded_command(
135
136
  ["git", *args],
136
137
  cwd=root,
137
- shell=False,
138
- stdin=subprocess.DEVNULL,
139
- capture_output=True,
140
- timeout=remaining,
141
- check=False,
138
+ timeout_seconds=remaining,
139
+ max_stdout_bytes=MAX_GIT_CAPTURE_BYTES,
142
140
  )
143
- except (OSError, subprocess.TimeoutExpired) as exc:
141
+ except (OSError, LifecycleError) as exc:
144
142
  raise LifecycleError(
145
143
  "planning-worktree-identity-failed",
146
144
  "Git identity capture failed closed",
@@ -2,9 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import subprocess
6
5
  from pathlib import Path
7
6
 
7
+ from agent_lifecycle.changesets.git_io import run_bounded_command
8
8
  from agent_lifecycle.contracts import LifecycleError
9
9
  from agent_lifecycle.contracts.paths import normalize_git_revision, normalize_repo_path
10
10
 
@@ -63,20 +63,24 @@ def changed_files(cwd: Path, *, base: str | None = None) -> list[str]:
63
63
  def resolve_revision(cwd: Path, revision: str, *, label: str = "revision") -> str:
64
64
  value = normalize_git_revision(revision, label=label)
65
65
  try:
66
- completed = subprocess.run(
66
+ completed = run_bounded_command(
67
67
  ["git", "rev-parse", "--verify", "--end-of-options", f"{value}^{{commit}}"],
68
68
  cwd=cwd,
69
- check=True,
70
- capture_output=True,
71
- text=True,
72
- timeout=GIT_TIMEOUT_SECONDS,
69
+ timeout_seconds=GIT_TIMEOUT_SECONDS,
70
+ max_stdout_bytes=128,
73
71
  )
74
- except (OSError, subprocess.CalledProcessError, subprocess.TimeoutExpired) as exc:
72
+ except (OSError, LifecycleError) as exc:
75
73
  raise LifecycleError("invalid-git-revision", f"{label}: revision cannot be resolved") from exc
76
74
  resolved = completed.stdout.strip().splitlines()
77
- if len(resolved) != 1 or not resolved[0]:
75
+ if completed.returncode or len(resolved) != 1 or len(resolved[0]) not in (40, 64):
78
76
  raise LifecycleError("invalid-git-revision", f"{label}: revision cannot be resolved")
79
- return resolved[0]
77
+ try:
78
+ value = resolved[0].decode("ascii")
79
+ except UnicodeDecodeError as exc:
80
+ raise LifecycleError("invalid-git-revision", f"{label}: revision cannot be resolved") from exc
81
+ if any(char not in "0123456789abcdef" for char in value):
82
+ raise LifecycleError("invalid-git-revision", f"{label}: revision cannot be resolved")
83
+ return value
80
84
 
81
85
 
82
86
  def _resolve_revision(cwd: Path, revision: str, *, label: str = "revision") -> str:
@@ -87,21 +91,19 @@ def _resolve_revision(cwd: Path, revision: str, *, label: str = "revision") -> s
87
91
 
88
92
  def _git_paths(cwd: Path, argv: list[str]) -> list[str]:
89
93
  try:
90
- completed = subprocess.run(
94
+ completed = run_bounded_command(
91
95
  argv,
92
96
  cwd=cwd,
93
- check=True,
94
- capture_output=True,
95
- timeout=GIT_TIMEOUT_SECONDS,
96
- )
97
- except (OSError, subprocess.CalledProcessError, subprocess.TimeoutExpired) as exc:
98
- raise LifecycleError("git-command-failed", f"git command failed: {' '.join(argv)}") from exc
99
- if len(completed.stdout) > MAX_GIT_OUTPUT_BYTES:
100
- raise LifecycleError(
101
- "git-output-limit",
102
- "Git changed-file output exceeds the bounded snapshot limit",
103
- {"maxBytes": MAX_GIT_OUTPUT_BYTES},
97
+ timeout_seconds=GIT_TIMEOUT_SECONDS,
98
+ max_stdout_bytes=MAX_GIT_OUTPUT_BYTES,
104
99
  )
100
+ except LifecycleError as exc:
101
+ code = "git-output-limit" if exc.code == "bounded-process-output-limit" else "git-command-failed"
102
+ raise LifecycleError(code, "Git changed-file command failed closed") from exc
103
+ except OSError as exc:
104
+ raise LifecycleError("git-command-failed", "Git changed-file command could not start") from exc
105
+ if completed.returncode:
106
+ raise LifecycleError("git-command-failed", "Git changed-file command failed")
105
107
  paths = []
106
108
  for raw in completed.stdout.split(b"\0"):
107
109
  if not raw:
@@ -0,0 +1,358 @@
1
+ """Bounded, interruptible byte transport for local Git and inspection commands.
2
+
3
+ This module owns pipe reads and its direct subprocess. Adapter lifecycle,
4
+ qualification and process-group attestation remain at their existing owners.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import math
10
+ import os
11
+ import queue
12
+ import signal
13
+ import subprocess
14
+ import threading
15
+ import time
16
+ from collections.abc import Callable
17
+ from contextlib import suppress
18
+ from pathlib import Path
19
+ from typing import IO
20
+
21
+ from agent_lifecycle.contracts import LifecycleError
22
+
23
+ _CHUNK_BYTES = 65536
24
+ _POLL_SECONDS = 0.02
25
+ _CLEANUP_SECONDS = 0.5
26
+
27
+
28
+ def _windows_cleanup(process: subprocess.Popen[bytes]) -> Callable[[], None] | None:
29
+ """Retain a Job handle so a recursive local command can be reaped as a tree."""
30
+ if os.name != "nt":
31
+ return None
32
+ import ctypes
33
+ from ctypes import wintypes
34
+
35
+ win_dll = getattr(ctypes, "WinDLL", None)
36
+ if not callable(win_dll):
37
+ raise LifecycleError("bounded-process-group-unavailable", "Windows group API is unavailable")
38
+ kernel = win_dll("kernel32", use_last_error=True)
39
+ kernel.CreateJobObjectW.argtypes = [wintypes.LPVOID, wintypes.LPCWSTR]
40
+ kernel.CreateJobObjectW.restype = wintypes.HANDLE
41
+ kernel.AssignProcessToJobObject.argtypes = [wintypes.HANDLE, wintypes.HANDLE]
42
+ kernel.AssignProcessToJobObject.restype = wintypes.BOOL
43
+ kernel.TerminateJobObject.argtypes = [wintypes.HANDLE, wintypes.UINT]
44
+ kernel.TerminateJobObject.restype = wintypes.BOOL
45
+ kernel.CloseHandle.argtypes = [wintypes.HANDLE]
46
+ kernel.CloseHandle.restype = wintypes.BOOL
47
+ handle = kernel.CreateJobObjectW(None, None)
48
+ if not handle:
49
+ raise LifecycleError("bounded-process-group-unavailable", "Cannot own the Windows child group")
50
+ if not kernel.AssignProcessToJobObject(handle, getattr(process, "_handle", None)):
51
+ kernel.CloseHandle(handle)
52
+ raise LifecycleError("bounded-process-group-unavailable", "Cannot own the Windows child group")
53
+
54
+ def cleanup() -> None:
55
+ terminated = kernel.TerminateJobObject(handle, 1)
56
+ closed = kernel.CloseHandle(handle)
57
+ if not terminated or not closed:
58
+ raise LifecycleError("bounded-process-cleanup-failed", "Windows child group cleanup failed")
59
+
60
+ return cleanup
61
+
62
+
63
+ class _PipeReader:
64
+ def __init__(self, owner: BoundedProcess, stream: IO[bytes], limit: int) -> None:
65
+ self.owner = owner
66
+ self.stream = stream
67
+ self.limit = limit
68
+ self.chunks: queue.Queue[bytes | None] = queue.Queue(maxsize=2)
69
+ self.buffer = bytearray()
70
+ self.eof = False
71
+ self.thread = threading.Thread(target=self._pump, name="alk-bounded-pipe", daemon=True)
72
+
73
+ def _pump(self) -> None:
74
+ total = 0
75
+ try:
76
+ while not self.owner.stopping.is_set():
77
+ data = os.read(self.stream.fileno(), min(_CHUNK_BYTES, self.limit - total + 1))
78
+ total += len(data)
79
+ if total > self.limit:
80
+ self.owner.fail("bounded-process-output-limit")
81
+ return
82
+ while not self.owner.stopping.is_set():
83
+ try:
84
+ self.chunks.put(data or None, timeout=_POLL_SECONDS)
85
+ break
86
+ except queue.Full:
87
+ continue
88
+ if not data:
89
+ return
90
+ except OSError:
91
+ if not self.owner.stopping.is_set():
92
+ self.owner.fail("bounded-process-read-failed")
93
+
94
+ def _fill(self) -> None:
95
+ while not self.eof:
96
+ self.owner.check()
97
+ try:
98
+ chunk = self.chunks.get(timeout=self.owner.remaining())
99
+ except queue.Empty:
100
+ continue
101
+ if chunk is None:
102
+ self.eof = True
103
+ else:
104
+ self.buffer.extend(chunk)
105
+ return
106
+
107
+ def readline(self, max_bytes: int) -> bytes:
108
+ while True:
109
+ self.owner.check()
110
+ end = self.buffer.find(b"\n")
111
+ size = end + 1 if end >= 0 else len(self.buffer)
112
+ if size > max_bytes:
113
+ raise LifecycleError("bounded-process-line-limit", "Process line exceeds its byte limit")
114
+ if end >= 0 or self.eof:
115
+ value = bytes(self.buffer[:size])
116
+ del self.buffer[:size]
117
+ return value
118
+ self._fill()
119
+
120
+ def read(self, size: int) -> bytes:
121
+ chunks: list[bytes] = []
122
+ remaining = size
123
+ while remaining:
124
+ self.owner.check()
125
+ if not self.buffer and not self.eof:
126
+ self._fill()
127
+ if not self.buffer:
128
+ break
129
+ value = bytes(self.buffer[:remaining])
130
+ del self.buffer[: len(value)]
131
+ chunks.append(value)
132
+ remaining -= len(value)
133
+ return b"".join(chunks)
134
+
135
+ def read_all(self) -> bytes:
136
+ chunks: list[bytes] = []
137
+ while True:
138
+ chunk = self.read(_CHUNK_BYTES)
139
+ if not chunk:
140
+ return b"".join(chunks)
141
+ chunks.append(chunk)
142
+
143
+
144
+ class BoundedProcess:
145
+ """Keep one absolute deadline across a streaming request/response session."""
146
+
147
+ def __init__(
148
+ self,
149
+ argv: list[str],
150
+ *,
151
+ cwd: Path,
152
+ deadline: float,
153
+ max_stdout_bytes: int,
154
+ max_stderr_bytes: int = 65536,
155
+ writable: bool = False,
156
+ ) -> None:
157
+ if type(deadline) not in (int, float) or not math.isfinite(deadline) or deadline <= time.monotonic():
158
+ raise LifecycleError("bounded-process-timeout", "Process deadline is invalid or expired")
159
+ if not argv or any(not isinstance(value, str) or "\0" in value for value in argv):
160
+ raise LifecycleError("bounded-process-argv-invalid", "A shell-free argument vector is required")
161
+ if any(type(value) is not int or value < 1 for value in (max_stdout_bytes, max_stderr_bytes)):
162
+ raise LifecycleError("bounded-process-limit-invalid", "Positive byte limits are required")
163
+ self.deadline = deadline
164
+ self.closed = False
165
+ self.stopping = threading.Event()
166
+ self.failure: str | None = None
167
+ self.stderr = bytearray()
168
+ self.max_stderr_bytes = max_stderr_bytes
169
+ self.writes: queue.Queue[tuple[bytes | None, threading.Event]] = queue.Queue(maxsize=1)
170
+ env = dict(os.environ)
171
+ if Path(argv[0]).stem.lower() == "git":
172
+ env.update(GIT_NO_LAZY_FETCH="1", GIT_TERMINAL_PROMPT="0")
173
+ self.process = subprocess.Popen(
174
+ argv,
175
+ cwd=cwd,
176
+ env=env,
177
+ stdin=subprocess.PIPE if writable else subprocess.DEVNULL,
178
+ stdout=subprocess.PIPE,
179
+ stderr=subprocess.PIPE,
180
+ shell=False,
181
+ bufsize=0,
182
+ start_new_session=os.name == "posix",
183
+ )
184
+ self.threads: list[threading.Thread] = []
185
+ self.windows_cleanup: Callable[[], None] | None = None
186
+ try:
187
+ self.windows_cleanup = _windows_cleanup(self.process)
188
+ assert self.process.stdout is not None
189
+ self.stdout = _PipeReader(self, self.process.stdout, max_stdout_bytes)
190
+ self.threads.append(self.stdout.thread)
191
+ self.stdout.thread.start()
192
+ reader = threading.Thread(target=self._drain_stderr, name="alk-bounded-stderr", daemon=True)
193
+ self.threads.append(reader)
194
+ reader.start()
195
+ if writable:
196
+ writer = threading.Thread(target=self._write_requests, name="alk-bounded-input", daemon=True)
197
+ self.threads.append(writer)
198
+ writer.start()
199
+ except BaseException:
200
+ self.close()
201
+ raise
202
+
203
+ def fail(self, code: str) -> None:
204
+ if self.failure is None:
205
+ self.failure = code
206
+
207
+ def check(self) -> None:
208
+ if self.failure:
209
+ raise LifecycleError(self.failure, "Bounded process transport failed")
210
+ if time.monotonic() >= self.deadline:
211
+ raise LifecycleError("bounded-process-timeout", "Process exceeded its deadline")
212
+
213
+ def remaining(self) -> float:
214
+ self.check()
215
+ return min(_POLL_SECONDS, max(0.0001, self.deadline - time.monotonic()))
216
+
217
+ def _drain_stderr(self) -> None:
218
+ assert self.process.stderr is not None
219
+ try:
220
+ while not self.stopping.is_set():
221
+ data = os.read(
222
+ self.process.stderr.fileno(), min(_CHUNK_BYTES, self.max_stderr_bytes - len(self.stderr) + 1)
223
+ )
224
+ if not data:
225
+ return
226
+ if len(self.stderr) + len(data) > self.max_stderr_bytes:
227
+ self.fail("bounded-process-stderr-limit")
228
+ return
229
+ self.stderr.extend(data)
230
+ except OSError:
231
+ if not self.stopping.is_set():
232
+ self.fail("bounded-process-read-failed")
233
+
234
+ def _write_requests(self) -> None:
235
+ assert self.process.stdin is not None
236
+ while not self.stopping.is_set():
237
+ try:
238
+ data, done = self.writes.get(timeout=_POLL_SECONDS)
239
+ except queue.Empty:
240
+ continue
241
+ try:
242
+ if data is None:
243
+ self.process.stdin.close()
244
+ return
245
+ view = memoryview(data)
246
+ while view:
247
+ written = self.process.stdin.write(view.tobytes())
248
+ if not written:
249
+ raise BrokenPipeError
250
+ view = view[written:]
251
+ self.process.stdin.flush()
252
+ except (OSError, ValueError):
253
+ self.fail("bounded-process-write-failed")
254
+ return
255
+ finally:
256
+ done.set()
257
+
258
+ def write_request(self, data: bytes | None) -> None:
259
+ """Deliver one small batch request, or close its input, under the same clock."""
260
+ if self.process.stdin is None or (data is not None and len(data) > 1024):
261
+ raise LifecycleError("bounded-process-request-invalid", "A bounded batch request is required")
262
+ done = threading.Event()
263
+ while True:
264
+ self.check()
265
+ try:
266
+ self.writes.put((data, done), timeout=self.remaining())
267
+ break
268
+ except queue.Full:
269
+ continue
270
+ while not done.wait(self.remaining()):
271
+ self.check()
272
+ self.check()
273
+
274
+ def wait(self) -> int:
275
+ while self.process.poll() is None:
276
+ time.sleep(self.remaining())
277
+ for thread in self.threads[1:2]:
278
+ while thread.is_alive():
279
+ thread.join(self.remaining())
280
+ self.check()
281
+ returncode = self.process.returncode
282
+ assert returncode is not None
283
+ return returncode
284
+
285
+ def close(self) -> None:
286
+ if self.closed:
287
+ return
288
+ self.closed = True
289
+ self.stopping.set()
290
+ cleanup_error: LifecycleError | None = None
291
+ if os.name == "posix":
292
+ with suppress(ProcessLookupError):
293
+ try:
294
+ os.killpg(self.process.pid, signal.SIGKILL)
295
+ except PermissionError:
296
+ # A reaped child must not prevent closing our descriptors.
297
+ # Reader shutdown below still refuses a pipe held by a survivor.
298
+ if self.process.poll() is None:
299
+ self.process.kill()
300
+ cleanup_error = LifecycleError(
301
+ "bounded-process-cleanup-failed",
302
+ "Child group signal was denied",
303
+ )
304
+ else:
305
+ if self.windows_cleanup is not None:
306
+ try:
307
+ self.windows_cleanup()
308
+ except LifecycleError as exc:
309
+ cleanup_error = exc
310
+ if self.process.poll() is None:
311
+ self.process.kill()
312
+ try:
313
+ self.process.wait(timeout=_CLEANUP_SECONDS)
314
+ except subprocess.TimeoutExpired as exc:
315
+ raise LifecycleError("bounded-process-cleanup-failed", "Process did not exit during cleanup") from exc
316
+ deadline = time.monotonic() + _CLEANUP_SECONDS
317
+ for thread in self.threads:
318
+ if thread.ident is not None:
319
+ thread.join(max(0.0, deadline - time.monotonic()))
320
+ if any(thread.is_alive() for thread in self.threads):
321
+ raise LifecycleError("bounded-process-cleanup-failed", "Process pipes did not finish during cleanup")
322
+ for stream in (self.process.stdin, self.process.stdout, self.process.stderr):
323
+ if stream is not None:
324
+ stream.close()
325
+ if cleanup_error is not None:
326
+ raise cleanup_error
327
+
328
+ def __enter__(self) -> BoundedProcess:
329
+ return self
330
+
331
+ def __exit__(self, *_exc: object) -> None:
332
+ self.close()
333
+
334
+
335
+ def run_bounded_command(
336
+ argv: list[str],
337
+ *,
338
+ cwd: Path,
339
+ timeout_seconds: float,
340
+ max_stdout_bytes: int,
341
+ max_stderr_bytes: int = 65536,
342
+ ) -> subprocess.CompletedProcess[bytes]:
343
+ """Capture a bounded command without allowing communicate() to grow unbounded."""
344
+ if type(timeout_seconds) not in (int, float) or not math.isfinite(timeout_seconds) or timeout_seconds <= 0:
345
+ raise LifecycleError("bounded-process-timeout-invalid", "A finite positive timeout is required")
346
+ with BoundedProcess(
347
+ argv,
348
+ cwd=cwd,
349
+ deadline=time.monotonic() + timeout_seconds,
350
+ max_stdout_bytes=max_stdout_bytes,
351
+ max_stderr_bytes=max_stderr_bytes,
352
+ ) as transport:
353
+ stdout = transport.stdout.read_all()
354
+ returncode = transport.wait()
355
+ return subprocess.CompletedProcess(argv, returncode, stdout, bytes(transport.stderr))
356
+
357
+
358
+ __all__ = ["BoundedProcess", "run_bounded_command"]