agent-lifecycle-kit 1.76.0__tar.gz → 1.77.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 (354) hide show
  1. {agent_lifecycle_kit-1.76.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-1.77.0}/PKG-INFO +3 -3
  2. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/README.md +2 -2
  3. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/pyproject.toml +29 -7
  4. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/__init__.py +1 -1
  5. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/_version.py +1 -1
  6. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +13 -24
  7. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +19 -17
  8. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +6 -5
  9. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +65 -17
  10. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +101 -49
  11. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +22 -14
  12. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/proof_integrity.py +15 -1
  13. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/reporting.py +26 -12
  14. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_planning.py +15 -14
  15. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/cli/errors.py +29 -0
  16. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +17 -5
  17. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/main.py +8 -3
  18. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/metrics_parser.py +9 -3
  19. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/observability_parsers.py +1 -0
  20. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/parsers.py +19 -8
  21. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/planning_parsers.py +7 -1
  22. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/policy.py +7 -3
  23. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/compiler/small_model_packets.py +20 -4
  24. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/checkpoint_store.py +19 -9
  25. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +9 -5
  26. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +71 -21
  27. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +26 -14
  28. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data/__init__.py +1 -0
  29. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +70 -0
  30. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +103 -0
  31. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +21 -0
  32. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +126 -0
  33. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/diagnostics/readiness.py +66 -17
  34. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/goal/view.py +7 -5
  35. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/planning.py +19 -9
  36. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/cost_collection.py +8 -10
  37. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/model_routing/resolver.py +51 -23
  38. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/canonical.py +2 -0
  39. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/quality_floor.py +13 -2
  40. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/project/presets.py +13 -11
  41. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/usage_export.py +9 -4
  42. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/research/provenance.py +12 -7
  43. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/research/validation.py +56 -23
  44. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/resources.py +60 -0
  45. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/runner/attempt_snapshots.py +45 -13
  46. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/specification/completion_check.py +7 -2
  47. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/leases.py +24 -7
  48. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +3 -3
  49. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +10 -3
  50. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/LICENSE +0 -0
  51. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/NOTICE +0 -0
  52. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/README.md +0 -0
  53. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/manifest.json +0 -0
  54. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
  55. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
  56. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
  57. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
  58. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
  59. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
  60. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
  61. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
  62. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
  63. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
  64. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/setup.cfg +0 -0
  65. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/__main__.py +0 -0
  66. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
  67. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
  68. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
  69. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
  70. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
  71. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
  72. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
  73. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
  74. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
  75. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
  76. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +0 -0
  77. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
  78. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
  79. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
  80. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
  81. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
  82. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
  83. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
  84. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/__init__.py +0 -0
  85. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
  86. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/implementation.py +0 -0
  87. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/ownership.py +0 -0
  88. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/package.py +0 -0
  89. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
  90. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
  91. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
  92. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
  93. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
  94. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
  95. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
  96. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
  97. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
  98. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
  99. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
  100. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/changesets/git.py +0 -0
  101. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/__init__.py +0 -0
  102. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/adapter.py +0 -0
  103. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
  104. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch.py +0 -0
  105. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
  106. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
  107. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
  108. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
  109. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
  110. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
  111. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/followup.py +0 -0
  112. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
  113. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
  114. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/project.py +0 -0
  115. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/research.py +0 -0
  116. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/start.py +0 -0
  117. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/strategy.py +0 -0
  118. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/cli/worktree.py +0 -0
  119. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
  120. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
  121. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/__init__.py +0 -0
  122. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
  123. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
  124. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/external_memory.py +0 -0
  125. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/profiles.py +0 -0
  126. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/rendering.py +0 -0
  127. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
  128. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
  129. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
  130. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
  131. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
  132. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
  133. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +0 -0
  134. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
  135. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
  136. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
  137. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
  138. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
  139. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
  140. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
  141. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
  142. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
  143. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
  144. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/errors.py +0 -0
  145. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
  146. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
  147. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
  148. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
  149. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
  150. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
  151. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
  152. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
  153. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
  154. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/paths.py +0 -0
  155. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
  156. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
  157. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
  158. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
  159. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
  160. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
  161. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
  162. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
  163. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
  164. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
  165. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
  166. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
  167. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
  168. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
  169. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
  170. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
  171. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
  172. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
  173. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
  174. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
  175. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
  176. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
  177. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
  178. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
  179. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
  180. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
  181. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
  182. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
  183. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
  184. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
  185. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/contracts/validation.py +0 -0
  186. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data}/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
  187. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data}/profiles/project-workflow-presets/quick-change.v1.json +0 -0
  188. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0/src/agent_lifecycle/data}/profiles/project-workflow-presets/research-review.v1.json +0 -0
  189. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
  190. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
  191. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
  192. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
  193. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
  194. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
  195. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
  196. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/followup/__init__.py +0 -0
  197. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/followup/records.py +0 -0
  198. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
  199. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/freeze/locks.py +0 -0
  200. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
  201. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/goal/__init__.py +0 -0
  202. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/goal/records.py +0 -0
  203. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
  204. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
  205. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
  206. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
  207. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
  208. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
  209. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
  210. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
  211. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
  212. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
  213. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
  214. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
  215. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
  216. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
  217. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
  218. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
  219. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
  220. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
  221. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
  222. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
  223. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
  224. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
  225. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
  226. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
  227. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
  228. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/__init__.py +0 -0
  229. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
  230. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
  231. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
  232. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
  233. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
  234. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
  235. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
  236. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
  237. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
  238. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
  239. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
  240. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
  241. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
  242. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
  243. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/costs.py +0 -0
  244. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
  245. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
  246. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
  247. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
  248. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
  249. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
  250. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
  251. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
  252. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
  253. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
  254. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
  255. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
  256. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/ed25519.py +0 -0
  257. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
  258. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
  259. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
  260. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
  261. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
  262. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/scanner.py +0 -0
  263. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
  264. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/__init__.py +0 -0
  265. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
  266. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/completeness.py +0 -0
  267. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/continuity.py +0 -0
  268. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/deltas.py +0 -0
  269. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
  270. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/templates.py +0 -0
  271. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/tiering.py +0 -0
  272. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/planning/validation.py +0 -0
  273. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/__init__.py +0 -0
  274. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
  275. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/apply.py +0 -0
  276. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
  277. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/proposals.py +0 -0
  278. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
  279. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
  280. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
  281. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/project/__init__.py +0 -0
  282. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/project/guidance.py +0 -0
  283. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/project/merge.py +0 -0
  284. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/project/principles.py +0 -0
  285. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/project/profile.py +0 -0
  286. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/py.typed +0 -0
  287. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/__init__.py +0 -0
  288. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
  289. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
  290. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
  291. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
  292. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
  293. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/quality/packs.py +0 -0
  294. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
  295. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
  296. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
  297. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
  298. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
  299. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
  300. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
  301. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
  302. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
  303. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/research/__init__.py +0 -0
  304. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/research/evidence.py +0 -0
  305. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review/__init__.py +0 -0
  306. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review/validation.py +0 -0
  307. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
  308. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
  309. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
  310. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
  311. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
  312. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
  313. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/results.py +0 -0
  314. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
  315. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/runner/__init__.py +0 -0
  316. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/runner/core.py +0 -0
  317. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
  318. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/specification/__init__.py +0 -0
  319. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
  320. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
  321. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/specification/validation.py +0 -0
  322. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
  323. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
  324. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
  325. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
  326. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
  327. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
  328. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
  329. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/controller.py +0 -0
  330. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/events.py +0 -0
  331. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
  332. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
  333. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/gates.py +0 -0
  334. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
  335. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
  336. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
  337. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
  338. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
  339. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
  340. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
  341. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/query.py +0 -0
  342. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
  343. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
  344. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
  345. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
  346. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
  347. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
  348. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/state.py +0 -0
  349. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
  350. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
  351. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
  352. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
  353. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
  354. {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.77.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: 1.76.0
3
+ Version: 1.77.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
@@ -43,7 +43,7 @@ ALK provides a verifiable finish for external-agent work with proportionate cont
43
43
  ## Quick start
44
44
  Start with [install ALK and make the first run](docs/guides/install-and-first-run.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==1.76.0`, and common `agent-lifecycle version` errors.
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==1.77.0`, and common `agent-lifecycle version` errors.
47
47
 
48
48
  For a quick start, run:
49
49
 
@@ -64,7 +64,6 @@ and pass a task from a file:
64
64
  agent-lifecycle start --adapter <adapter-id> --file task.md
65
65
  ```
66
66
 
67
- - Start with [quickstart](docs/guides/quickstart.md).
68
67
  - Then choose a suitable scenario in [how ALK works for different tasks](docs/guides/how-alk-works.md).
69
68
  - The boundaries of [planning-only launch](docs/reference/planning-only-launch.md) and [frozen-task launch through a verified profile](docs/reference/qualified-host-launch.md) are documented in the reference. Shipped planning profiles remain candidates with safe failure until the corresponding profile is verified.
70
69
  - The [system architecture](docs/architecture/system-architecture.md) page explains how the project is organized, and [project comparison](docs/reference/project-comparison.md) shows how it differs from similar tools.
@@ -81,6 +80,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
81
80
  composes risk, model class, packet size, review and resource limits.
82
81
  - Usage visibility: tokens, time, resource counters and structured execution records without sensitive data are native; monetary cost is optional and only used when a metered host reports it.
83
82
  - Project-specific workflow settings: ALK can discover and validate uncommitted local defaults, or apply a built-in workflow preset for a common route, while the frozen plan remains authoritative.
83
+ - Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources and an explicit documented Python API.
84
84
  - Project principles and plan deltas keep long-running work understandable: principles provide bounded defaults, while a digest-bound delta shows which plan authority changed and whether review and a new lock are required. CI also checks an acyclic module/package graph, layer direction and source-size limits; adapter inspection uses bounded literal profiles and fails closed without executing adapter code.
85
85
  - Read-only progress and managed sessions: host UIs can show lifecycle state,
86
86
  attested tokens and Git-style change counters; `start` accepts task text,
@@ -21,7 +21,7 @@ ALK provides a verifiable finish for external-agent work with proportionate cont
21
21
  ## Quick start
22
22
  Start with [install ALK and make the first run](docs/guides/install-and-first-run.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==1.76.0`, and common `agent-lifecycle version` errors.
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==1.77.0`, and common `agent-lifecycle version` errors.
25
25
 
26
26
  For a quick start, run:
27
27
 
@@ -42,7 +42,6 @@ and pass a task from a file:
42
42
  agent-lifecycle start --adapter <adapter-id> --file task.md
43
43
  ```
44
44
 
45
- - Start with [quickstart](docs/guides/quickstart.md).
46
45
  - Then choose a suitable scenario in [how ALK works for different tasks](docs/guides/how-alk-works.md).
47
46
  - The boundaries of [planning-only launch](docs/reference/planning-only-launch.md) and [frozen-task launch through a verified profile](docs/reference/qualified-host-launch.md) are documented in the reference. Shipped planning profiles remain candidates with safe failure until the corresponding profile is verified.
48
47
  - The [system architecture](docs/architecture/system-architecture.md) page explains how the project is organized, and [project comparison](docs/reference/project-comparison.md) shows how it differs from similar tools.
@@ -59,6 +58,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
59
58
  composes risk, model class, packet size, review and resource limits.
60
59
  - Usage visibility: tokens, time, resource counters and structured execution records without sensitive data are native; monetary cost is optional and only used when a metered host reports it.
61
60
  - Project-specific workflow settings: ALK can discover and validate uncommitted local defaults, or apply a built-in workflow preset for a common route, while the frozen plan remains authoritative.
61
+ - Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources and an explicit documented Python API.
62
62
  - Project principles and plan deltas keep long-running work understandable: principles provide bounded defaults, while a digest-bound delta shows which plan authority changed and whether review and a new lock are required. CI also checks an acyclic module/package graph, layer direction and source-size limits; adapter inspection uses bounded literal profiles and fails closed without executing adapter code.
63
63
  - Read-only progress and managed sessions: host UIs can show lifecycle state,
64
64
  attested tokens and Git-style change counters; `start` accepts task text,
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-lifecycle-kit"
7
- version = "1.76.0"
7
+ version = "1.77.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"
@@ -39,6 +39,13 @@ classifiers = [
39
39
  ]
40
40
  dependencies = []
41
41
 
42
+ [dependency-groups]
43
+ quality = [
44
+ "ruff==0.16.3",
45
+ "mypy==1.17.1",
46
+ "coverage==7.10.6",
47
+ ]
48
+
42
49
  [project.scripts]
43
50
  agent-lifecycle = "agent_lifecycle.cli:main"
44
51
  agent-lifecycle-neutrality = "agent_lifecycle.neutrality.cli:main"
@@ -47,14 +54,29 @@ agent-lifecycle-neutrality = "agent_lifecycle.neutrality.cli:main"
47
54
  where = ["src"]
48
55
 
49
56
  [tool.setuptools.package-data]
50
- agent_lifecycle = ["py.typed"]
57
+ agent_lifecycle = ["py.typed", "data/profiles/**/*.json"]
58
+
59
+ [tool.ruff]
60
+ target-version = "py311"
61
+ line-length = 120
62
+ src = ["src"]
63
+
64
+ [tool.ruff.lint]
65
+ select = ["E4", "E7", "E9", "F", "B", "I", "UP", "RUF", "SIM", "PTH", "ARG", "BLE"]
66
+
67
+ [tool.ruff.lint.isort]
68
+ known-first-party = ["agent_lifecycle"]
69
+
70
+ [tool.ruff.format]
71
+ quote-style = "double"
72
+
73
+ [tool.mypy]
74
+ python_version = "3.11"
75
+ files = ["src/agent_lifecycle"]
76
+ ignore_missing_imports = true
77
+ show_error_codes = true
51
78
 
52
79
  [tool.setuptools.data-files]
53
- "profiles/project-workflow-presets" = [
54
- "profiles/project-workflow-presets/quick-change.v1.json",
55
- "profiles/project-workflow-presets/research-review.v1.json",
56
- "profiles/project-workflow-presets/feature-implementation.v1.json",
57
- ]
58
80
  "benchmarks/reference-tasks" = [
59
81
  "benchmarks/reference-tasks/README.md",
60
82
  "benchmarks/reference-tasks/manifest.json",
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._version import __version__
4
4
 
5
- __all__ = ["__version__"]
5
+ __all__ = ("__version__",)
@@ -1,3 +1,3 @@
1
1
  """Package version."""
2
2
 
3
- __version__ = "1.76.0"
3
+ __version__ = "1.77.0"
@@ -5,37 +5,27 @@ from __future__ import annotations
5
5
  import hashlib
6
6
  import os
7
7
  import subprocess
8
+ from collections.abc import Callable
8
9
  from pathlib import Path
9
- from typing import Any, Callable
10
+ from typing import Any
10
11
 
11
12
  from agent_lifecycle.adapter_sessions.contracts import (
12
13
  build_launch_receipt,
13
- build_local_launch_probe_receipt,
14
14
  build_local_launch_profile_receipt,
15
15
  )
16
16
  from agent_lifecycle.adapter_sessions.env import resolve_launch_env
17
17
  from agent_lifecycle.adapter_sessions.local_launch_profile import (
18
18
  build_executable_identity,
19
19
  load_local_launch_profile,
20
- local_receipt_argv,
21
20
  local_profile_summary,
22
- planning_receipt_argv,
23
- render_local_launch_argv,
24
21
  render_planning_launch_argv,
25
22
  )
26
23
  from agent_lifecycle.adapter_sessions.planning_launch import run_planning_launch
27
- from agent_lifecycle.adapter_sessions.process import run_process as _process_runner
28
24
  from agent_lifecycle.adapter_sessions.qualification import (
29
- build_qualification_receipt,
30
- require_planning_qualification_receipt,
31
- require_qualification_receipt,
32
25
  shipped_profile_digest,
33
- write_qualification_receipt,
34
26
  )
35
27
  from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
36
- from agent_lifecycle.freeze import verify_plan_package_integrity
37
28
  from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
38
- from agent_lifecycle.workflow.risk_execution_gate import validate_task_risk_profile
39
29
 
40
30
 
41
31
  def load_adapter_descriptor(adapter_id: str, descriptor_path: Path | None = None) -> tuple[Path, dict[str, Any]]:
@@ -69,7 +59,8 @@ def launch_from_descriptor(
69
59
  raw_profile = descriptor.get("managedLaunch")
70
60
  profile = raw_profile if isinstance(raw_profile, dict) else {}
71
61
  validation = validate_managed_launch_profile(profile)
72
- adapter_id = descriptor.get("adapterId") if isinstance(descriptor.get("adapterId"), str) else "unknown"
62
+ raw_adapter_id = descriptor.get("adapterId")
63
+ adapter_id = raw_adapter_id if isinstance(raw_adapter_id, str) else "unknown"
73
64
  timeout_seconds = _timeout_seconds(profile)
74
65
  blockers: list[dict[str, Any]] = []
75
66
  if validation["status"] != "PASS":
@@ -126,8 +117,6 @@ def inspect_local_launch_profile(
126
117
  )
127
118
 
128
119
 
129
-
130
-
131
120
  def run_planning_qualification_candidate(
132
121
  *,
133
122
  profile_path: Path,
@@ -198,7 +187,8 @@ def run_planning_qualification_candidate(
198
187
  )
199
188
  after = identity_runner(root)
200
189
  blockers = list(receipt.get("blockers", []))
201
- usage = receipt.get("usageEvidence") if isinstance(receipt.get("usageEvidence"), dict) else {}
190
+ raw_usage = receipt.get("usageEvidence")
191
+ usage: dict[str, Any] = raw_usage if isinstance(raw_usage, dict) else {}
202
192
  input_tokens = usage.get("inputTokens")
203
193
  output_tokens = usage.get("outputTokens")
204
194
  if usage.get("confidence") != "ATTESTED" or not isinstance(input_tokens, int) or not isinstance(output_tokens, int):
@@ -332,7 +322,7 @@ def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
332
322
  try:
333
323
  before = path.lstat()
334
324
  if path.is_symlink():
335
- payload = os.fsencode(os.readlink(path))
325
+ payload = os.fsencode(path.readlink())
336
326
  kind = "symlink"
337
327
  else:
338
328
  payload = path.read_bytes()
@@ -379,8 +369,7 @@ def _git_bytes(root: Path, args: list[str]) -> bytes:
379
369
  cwd=root,
380
370
  shell=False,
381
371
  stdin=subprocess.DEVNULL,
382
- stdout=subprocess.PIPE,
383
- stderr=subprocess.PIPE,
372
+ capture_output=True,
384
373
  timeout=10,
385
374
  check=False,
386
375
  )
@@ -478,7 +467,8 @@ def _planning_qualification_report(
478
467
  and before.get("identityDigest") == after.get("identityDigest")
479
468
  and not blockers
480
469
  )
481
- policy = profile.get("qualification") if isinstance(profile.get("qualification"), dict) else {}
470
+ raw_policy = profile.get("qualification")
471
+ policy: dict[str, Any] = raw_policy if isinstance(raw_policy, dict) else {}
482
472
  body = {
483
473
  "schemaVersion": "agent-planning-launch-qualification-evidence.v1",
484
474
  "status": "PASS" if passed else "FAIL",
@@ -490,7 +480,8 @@ def _planning_qualification_report(
490
480
  "maxWallSeconds": approved_wall_seconds,
491
481
  "modelTokenBudget": approved_model_token_budget,
492
482
  },
493
- "usageEvidence": usage_evidence or {
483
+ "usageEvidence": usage_evidence
484
+ or {
494
485
  "confidence": "MISSING",
495
486
  "inputTokens": None,
496
487
  "outputTokens": None,
@@ -499,9 +490,7 @@ def _planning_qualification_report(
499
490
  "planningSupportStatus": "PLANNING_ONLY_QUALIFIED" if passed else "PLANNING_ONLY_UNSUPPORTED",
500
491
  "processCalls": 1 if receipt and receipt.get("hostLaunchStarted") else 0,
501
492
  "modelCallsStarted": bool(receipt and receipt.get("modelCallsStarted")),
502
- "worktreeUnchanged": bool(
503
- before and after and before.get("identityDigest") == after.get("identityDigest")
504
- ),
493
+ "worktreeUnchanged": bool(before and after and before.get("identityDigest") == after.get("identityDigest")),
505
494
  "planningReceiptDigest": receipt.get("receiptDigest") if receipt else None,
506
495
  "blockers": blockers,
507
496
  "productionPromotionClaimed": False,
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from collections.abc import Callable
5
6
  from dataclasses import dataclass
6
7
  from pathlib import Path
7
- from typing import Any, Callable
8
+ from typing import Any
8
9
 
9
10
  from agent_lifecycle.adapter_sessions.contracts import (
10
11
  build_launch_receipt,
@@ -12,11 +13,19 @@ from agent_lifecycle.adapter_sessions.contracts import (
12
13
  build_local_launch_profile_receipt,
13
14
  )
14
15
  from agent_lifecycle.adapter_sessions.env import resolve_launch_env
16
+ from agent_lifecycle.adapter_sessions.launch_execution import (
17
+ _attach_qualification_receipt,
18
+ _blocked_local_launch,
19
+ _blocked_planning_launch,
20
+ _managed_launch_blockers,
21
+ _state_task,
22
+ capture_git_worktree_identity,
23
+ )
15
24
  from agent_lifecycle.adapter_sessions.local_launch_profile import (
16
25
  build_executable_identity,
17
26
  load_local_launch_profile,
18
- local_receipt_argv,
19
27
  local_profile_summary,
28
+ local_receipt_argv,
20
29
  planning_receipt_argv,
21
30
  render_local_launch_argv,
22
31
  render_planning_launch_argv,
@@ -32,19 +41,8 @@ from agent_lifecycle.adapter_sessions.qualification import (
32
41
  )
33
42
  from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
34
43
  from agent_lifecycle.freeze import verify_plan_package_integrity
35
- from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
36
44
  from agent_lifecycle.workflow.risk_execution_gate import validate_task_risk_profile
37
45
 
38
- from agent_lifecycle.adapter_sessions.launch_execution import (
39
- _attach_qualification_receipt,
40
- _blocked_local_launch,
41
- _blocked_planning_launch,
42
- _managed_launch_blockers,
43
- _planning_qualification_report,
44
- _state_task,
45
- capture_git_worktree_identity,
46
- )
47
-
48
46
 
49
47
  @dataclass(frozen=True)
50
48
  class _LaunchContext:
@@ -56,7 +54,7 @@ class _LaunchContext:
56
54
  env: dict[str, str]
57
55
  env_receipt: dict[str, Any]
58
56
  timeout_seconds: float
59
- shipped_digest: str
57
+ shipped_digest: str | None
60
58
  runner: Callable[..., dict[str, Any]]
61
59
 
62
60
 
@@ -232,7 +230,9 @@ def _planning_task(
232
230
  identity = _identity(context, strict=False)
233
231
  try:
234
232
  if identity["status"] != "PASS":
235
- raise LifecycleError("local-launch-executable-identity-unavailable", "planning launch executable identity is unavailable")
233
+ raise LifecycleError(
234
+ "local-launch-executable-identity-unavailable", "planning launch executable identity is unavailable"
235
+ )
236
236
  qualification_receipt = require_planning_qualification_receipt(
237
237
  project_root=context.root,
238
238
  profile=context.profile,
@@ -345,7 +345,9 @@ def _managed_task(
345
345
  if manifest.get("status") != "FROZEN":
346
346
  raise LifecycleError("local-launch-frozen-plan-required", "local launch requires a frozen plan")
347
347
  task = _state_task(state, task_id)
348
- validate_task_risk_profile(state, task, risk_profile, operation_id=operation_id, source_revision=source_revision)
348
+ validate_task_risk_profile(
349
+ state, task, risk_profile, operation_id=operation_id, source_revision=source_revision
350
+ )
349
351
  qualification_receipt = require_qualification_receipt(
350
352
  project_root=context.root,
351
353
  profile=context.profile,
@@ -389,7 +391,7 @@ def _run_managed_process(
389
391
  operation_id: str,
390
392
  source_revision: str,
391
393
  risk_profile: dict[str, Any],
392
- qualification_receipt: dict[str, Any],
394
+ qualification_receipt: dict[str, Any] | None,
393
395
  host_identity: dict[str, Any],
394
396
  ) -> dict[str, Any]:
395
397
  bindings = {
@@ -15,15 +15,14 @@ from agent_lifecycle.contracts import (
15
15
  from agent_lifecycle.contracts.canonical import ensure_private_directory
16
16
  from agent_lifecycle.contracts.persistence import (
17
17
  create_private_json as write_json_create_private,
18
+ )
19
+ from agent_lifecycle.contracts.persistence import (
18
20
  replace_private_json as write_json_replace_private,
19
- require_private_json as require_private_file,
20
21
  )
21
22
 
22
23
  PLANNING_SESSION_SCHEMA = "agent-planning-session-state.v1"
23
24
  PLANNING_SESSION_ROOT = Path(".alk/planning-sessions")
24
- PLANNING_SESSION_STATES = frozenset(
25
- {"INTAKE_ACCEPTED", "PLANNING_RUNNING", "REVIEW_REQUIRED", "BLOCKED"}
26
- )
25
+ PLANNING_SESSION_STATES = frozenset({"INTAKE_ACCEPTED", "PLANNING_RUNNING", "REVIEW_REQUIRED", "BLOCKED"})
27
26
  MAX_PLANNING_SESSION_BYTES = 65_536
28
27
  _SESSION_ID = re.compile(r"^[a-f0-9]{32}$")
29
28
  _TRANSITIONS = {
@@ -194,7 +193,9 @@ def _validate_state(
194
193
  if state.get("state") not in PLANNING_SESSION_STATES:
195
194
  raise LifecycleError("planning-session-state-invalid", "planning session state is invalid")
196
195
  if state.get("implementationAuthorized") is not False or state.get("rawTaskTextStored") is not False:
197
- raise LifecycleError("planning-session-authority-invalid", "planning session cannot carry implementation authority")
196
+ raise LifecycleError(
197
+ "planning-session-authority-invalid", "planning session cannot carry implementation authority"
198
+ )
198
199
  if state.get("productionPromotionClaimed") is not False:
199
200
  raise LifecycleError("planning-session-production-claim", "planning session cannot claim production promotion")
200
201
  body = {key: value for key, value in state.items() if key != "stateDigest"}
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import os
6
6
  import signal
7
7
  import subprocess
8
- import time
8
+ from contextlib import suppress
9
9
  from pathlib import Path
10
10
  from typing import Any
11
11
 
@@ -39,16 +39,12 @@ class ProcessGroupOwner:
39
39
  escalation = "none"
40
40
  if self.process.poll() is None:
41
41
  if os.name == "posix":
42
- try:
42
+ with suppress(ProcessLookupError):
43
43
  os.killpg(self.pid, signal.SIGTERM)
44
- except ProcessLookupError:
45
- pass
46
44
  if not _wait_process(self.process, grace_seconds):
47
45
  escalation = "SIGKILL"
48
- try:
46
+ with suppress(ProcessLookupError):
49
47
  os.killpg(self.pid, signal.SIGKILL)
50
- except ProcessLookupError:
51
- pass
52
48
  _wait_process(self.process, grace_seconds)
53
49
  elif self._job_handle is not None:
54
50
  _terminate_windows_job(self._job_handle)
@@ -132,7 +128,10 @@ def _create_windows_job(process: subprocess.Popen[Any]) -> int | None:
132
128
  import ctypes
133
129
  from ctypes import wintypes
134
130
 
135
- kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
131
+ win_dll = getattr(ctypes, "WinDLL", None)
132
+ if not callable(win_dll):
133
+ return None
134
+ kernel32 = win_dll("kernel32", use_last_error=True)
136
135
  kernel32.CreateJobObjectW.argtypes = [wintypes.LPVOID, wintypes.LPCWSTR]
137
136
  kernel32.CreateJobObjectW.restype = wintypes.HANDLE
138
137
  kernel32.SetInformationJobObject.argtypes = [wintypes.HANDLE, wintypes.INT, ctypes.c_void_p, wintypes.DWORD]
@@ -146,20 +145,45 @@ def _create_windows_job(process: subprocess.Popen[Any]) -> int | None:
146
145
  return None
147
146
 
148
147
  class IO_COUNTERS(ctypes.Structure):
149
- _fields_ = [("ReadOperationCount", ctypes.c_uint64), ("WriteOperationCount", ctypes.c_uint64), ("OtherOperationCount", ctypes.c_uint64), ("ReadTransferCount", ctypes.c_uint64), ("WriteTransferCount", ctypes.c_uint64), ("OtherTransferCount", ctypes.c_uint64)]
148
+ _fields_ = [
149
+ ("ReadOperationCount", ctypes.c_uint64),
150
+ ("WriteOperationCount", ctypes.c_uint64),
151
+ ("OtherOperationCount", ctypes.c_uint64),
152
+ ("ReadTransferCount", ctypes.c_uint64),
153
+ ("WriteTransferCount", ctypes.c_uint64),
154
+ ("OtherTransferCount", ctypes.c_uint64),
155
+ ]
150
156
 
151
157
  class BASIC_LIMITS(ctypes.Structure):
152
- _fields_ = [("PerProcessUserTimeLimit", ctypes.c_int64), ("PerJobUserTimeLimit", ctypes.c_int64), ("LimitFlags", wintypes.DWORD), ("MinimumWorkingSetSize", ctypes.c_size_t), ("MaximumWorkingSetSize", ctypes.c_size_t), ("ActiveProcessLimit", wintypes.DWORD), ("Affinity", ctypes.c_size_t), ("PriorityClass", wintypes.DWORD), ("SchedulingClass", wintypes.DWORD)]
158
+ _fields_ = [
159
+ ("PerProcessUserTimeLimit", ctypes.c_int64),
160
+ ("PerJobUserTimeLimit", ctypes.c_int64),
161
+ ("LimitFlags", wintypes.DWORD),
162
+ ("MinimumWorkingSetSize", ctypes.c_size_t),
163
+ ("MaximumWorkingSetSize", ctypes.c_size_t),
164
+ ("ActiveProcessLimit", wintypes.DWORD),
165
+ ("Affinity", ctypes.c_size_t),
166
+ ("PriorityClass", wintypes.DWORD),
167
+ ("SchedulingClass", wintypes.DWORD),
168
+ ]
153
169
 
154
170
  class EXTENDED_LIMITS(ctypes.Structure):
155
- _fields_ = [("BasicLimitInformation", BASIC_LIMITS), ("IoInfo", IO_COUNTERS), ("ProcessMemoryLimit", ctypes.c_size_t), ("JobMemoryLimit", ctypes.c_size_t), ("PeakProcessMemoryUsed", ctypes.c_size_t), ("PeakJobMemoryUsed", ctypes.c_size_t)]
171
+ _fields_ = [
172
+ ("BasicLimitInformation", BASIC_LIMITS),
173
+ ("IoInfo", IO_COUNTERS),
174
+ ("ProcessMemoryLimit", ctypes.c_size_t),
175
+ ("JobMemoryLimit", ctypes.c_size_t),
176
+ ("PeakProcessMemoryUsed", ctypes.c_size_t),
177
+ ("PeakJobMemoryUsed", ctypes.c_size_t),
178
+ ]
156
179
 
157
180
  limits = EXTENDED_LIMITS()
158
181
  limits.BasicLimitInformation.LimitFlags = 0x2000 # JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
159
182
  if not kernel32.SetInformationJobObject(handle, 9, ctypes.byref(limits), ctypes.sizeof(limits)):
160
183
  kernel32.CloseHandle(handle)
161
184
  return None
162
- process_handle_value = getattr(process._handle, "value", process._handle)
185
+ process_handle = getattr(process, "_handle", None)
186
+ process_handle_value = getattr(process_handle, "value", process_handle)
163
187
  if not process_handle_value:
164
188
  kernel32.CloseHandle(handle)
165
189
  return None
@@ -177,7 +201,10 @@ def _terminate_windows_job(handle: int) -> None:
177
201
  import ctypes
178
202
  from ctypes import wintypes
179
203
 
180
- kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
204
+ win_dll = getattr(ctypes, "WinDLL", None)
205
+ if not callable(win_dll):
206
+ return
207
+ kernel32 = win_dll("kernel32", use_last_error=True)
181
208
  kernel32.TerminateJobObject.argtypes = [wintypes.HANDLE, wintypes.UINT]
182
209
  kernel32.TerminateJobObject.restype = wintypes.BOOL
183
210
  kernel32.TerminateJobObject(handle, 1)
@@ -193,11 +220,29 @@ def _windows_job_active_processes(handle: int) -> int | None:
193
220
  from ctypes import wintypes
194
221
 
195
222
  class ACCOUNTING(ctypes.Structure):
196
- _fields_ = [("TotalUserTime", ctypes.c_int64), ("TotalKernelTime", ctypes.c_int64), ("ThisPeriodTotalUserTime", ctypes.c_int64), ("ThisPeriodTotalKernelTime", ctypes.c_int64), ("TotalPageFaultCount", wintypes.DWORD), ("TotalProcesses", wintypes.DWORD), ("ActiveProcesses", wintypes.DWORD), ("TotalTerminatedProcesses", wintypes.DWORD)]
223
+ _fields_ = [
224
+ ("TotalUserTime", ctypes.c_int64),
225
+ ("TotalKernelTime", ctypes.c_int64),
226
+ ("ThisPeriodTotalUserTime", ctypes.c_int64),
227
+ ("ThisPeriodTotalKernelTime", ctypes.c_int64),
228
+ ("TotalPageFaultCount", wintypes.DWORD),
229
+ ("TotalProcesses", wintypes.DWORD),
230
+ ("ActiveProcesses", wintypes.DWORD),
231
+ ("TotalTerminatedProcesses", wintypes.DWORD),
232
+ ]
197
233
 
198
234
  info = ACCOUNTING()
199
- kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
200
- kernel32.QueryInformationJobObject.argtypes = [wintypes.HANDLE, wintypes.INT, ctypes.c_void_p, wintypes.DWORD, ctypes.POINTER(wintypes.DWORD)]
235
+ win_dll = getattr(ctypes, "WinDLL", None)
236
+ if not callable(win_dll):
237
+ return None
238
+ kernel32 = win_dll("kernel32", use_last_error=True)
239
+ kernel32.QueryInformationJobObject.argtypes = [
240
+ wintypes.HANDLE,
241
+ wintypes.INT,
242
+ ctypes.c_void_p,
243
+ wintypes.DWORD,
244
+ ctypes.POINTER(wintypes.DWORD),
245
+ ]
201
246
  kernel32.QueryInformationJobObject.restype = wintypes.BOOL
202
247
  if not kernel32.QueryInformationJobObject(handle, 1, ctypes.byref(info), ctypes.sizeof(info), None):
203
248
  return None
@@ -211,7 +256,10 @@ def _close_windows_handle(handle: int) -> None:
211
256
  import ctypes
212
257
  from ctypes import wintypes
213
258
 
214
- kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
259
+ win_dll = getattr(ctypes, "WinDLL", None)
260
+ if not callable(win_dll):
261
+ return
262
+ kernel32 = win_dll("kernel32", use_last_error=True)
215
263
  kernel32.CloseHandle.argtypes = [wintypes.HANDLE]
216
264
  kernel32.CloseHandle.restype = wintypes.BOOL
217
265
  kernel32.CloseHandle(handle)