agent-lifecycle-kit 1.77.0__tar.gz → 1.78.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 (360) hide show
  1. {agent_lifecycle_kit-1.77.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-1.78.0}/PKG-INFO +4 -4
  2. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/README.md +3 -3
  3. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/pyproject.toml +1 -1
  4. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/_version.py +1 -1
  5. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +1 -86
  6. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +44 -14
  7. agent_lifecycle_kit-1.78.0/src/agent_lifecycle/adapter_sessions/worktree_identity.py +189 -0
  8. agent_lifecycle_kit-1.78.0/src/agent_lifecycle/cli/command_registry.py +41 -0
  9. agent_lifecycle_kit-1.78.0/src/agent_lifecycle/cli/dispatch.py +88 -0
  10. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/main.py +3 -2
  11. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/parsers.py +44 -30
  12. agent_lifecycle_kit-1.78.0/src/agent_lifecycle/contracts/performance_limits.py +181 -0
  13. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/ed25519.py +59 -24
  14. agent_lifecycle_kit-1.78.0/src/agent_lifecycle/neutrality/git_objects.py +177 -0
  15. agent_lifecycle_kit-1.78.0/src/agent_lifecycle/neutrality/matching.py +95 -0
  16. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/scanner.py +34 -82
  17. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +4 -4
  18. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +5 -0
  19. agent_lifecycle_kit-1.77.0/src/agent_lifecycle/cli/dispatch.py +0 -59
  20. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/LICENSE +0 -0
  21. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/NOTICE +0 -0
  22. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/README.md +0 -0
  23. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/manifest.json +0 -0
  24. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
  25. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
  26. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
  27. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
  28. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
  29. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
  30. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
  31. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
  32. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
  33. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
  34. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/setup.cfg +0 -0
  35. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/__init__.py +0 -0
  36. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/__main__.py +0 -0
  37. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
  38. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
  39. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
  40. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
  41. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +0 -0
  42. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
  43. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
  44. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
  45. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
  46. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
  47. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
  48. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
  49. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +0 -0
  50. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
  51. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
  52. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
  53. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
  54. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
  55. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
  56. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
  57. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +0 -0
  58. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
  59. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/__init__.py +0 -0
  60. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
  61. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/implementation.py +0 -0
  62. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/ownership.py +0 -0
  63. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/package.py +0 -0
  64. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
  65. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
  66. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
  67. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
  68. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
  69. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
  70. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
  71. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
  72. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
  73. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
  74. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
  75. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
  76. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
  77. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/changesets/git.py +0 -0
  78. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/__init__.py +0 -0
  79. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/adapter.py +0 -0
  80. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
  81. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
  82. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
  83. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
  84. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
  85. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
  86. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_planning.py +0 -0
  87. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
  88. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/errors.py +0 -0
  89. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/followup.py +0 -0
  90. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
  91. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +0 -0
  92. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/metrics_parser.py +0 -0
  93. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/observability_parsers.py +0 -0
  94. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/planning_parsers.py +0 -0
  95. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/policy.py +0 -0
  96. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
  97. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/project.py +0 -0
  98. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/research.py +0 -0
  99. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/start.py +0 -0
  100. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/strategy.py +0 -0
  101. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/worktree.py +0 -0
  102. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
  103. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
  104. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
  105. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/__init__.py +0 -0
  106. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/checkpoint_store.py +0 -0
  107. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
  108. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
  109. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/external_memory.py +0 -0
  110. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/profiles.py +0 -0
  111. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/rendering.py +0 -0
  112. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
  113. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
  114. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
  115. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
  116. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
  117. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
  118. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +0 -0
  119. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
  120. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
  121. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
  122. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
  123. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
  124. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
  125. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
  126. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
  127. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
  128. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
  129. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/errors.py +0 -0
  130. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
  131. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
  132. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
  133. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
  134. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
  135. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
  136. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
  137. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
  138. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
  139. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/paths.py +0 -0
  140. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
  141. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
  142. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
  143. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
  144. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
  145. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
  146. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
  147. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
  148. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
  149. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
  150. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
  151. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
  152. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
  153. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
  154. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
  155. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
  156. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
  157. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
  158. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
  159. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
  160. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
  161. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
  162. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
  163. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
  164. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
  165. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
  166. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
  167. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
  168. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +0 -0
  169. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +0 -0
  170. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +0 -0
  171. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
  172. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
  173. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/validation.py +0 -0
  174. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/__init__.py +0 -0
  175. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +0 -0
  176. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +0 -0
  177. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
  178. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/quick-change.v1.json +0 -0
  179. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/research-review.v1.json +0 -0
  180. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +0 -0
  181. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +0 -0
  182. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
  183. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
  184. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
  185. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
  186. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
  187. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
  188. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
  189. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
  190. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/followup/__init__.py +0 -0
  191. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/followup/records.py +0 -0
  192. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
  193. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/locks.py +0 -0
  194. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
  195. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/__init__.py +0 -0
  196. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/records.py +0 -0
  197. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/view.py +0 -0
  198. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
  199. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
  200. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
  201. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
  202. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
  203. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
  204. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
  205. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
  206. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
  207. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
  208. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
  209. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
  210. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
  211. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
  212. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
  213. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
  214. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
  215. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
  216. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
  217. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
  218. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
  219. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
  220. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
  221. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
  222. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
  223. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/__init__.py +0 -0
  224. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
  225. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
  226. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
  227. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
  228. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
  229. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
  230. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
  231. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
  232. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
  233. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/planning.py +0 -0
  234. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
  235. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
  236. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
  237. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
  238. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
  239. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
  240. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/costs.py +0 -0
  241. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
  242. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
  243. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
  244. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
  245. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
  246. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
  247. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
  248. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
  249. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
  250. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
  251. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
  252. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
  253. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
  254. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
  255. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
  256. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
  257. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
  258. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
  259. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
  260. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
  261. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/__init__.py +0 -0
  262. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
  263. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/completeness.py +0 -0
  264. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/continuity.py +0 -0
  265. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/deltas.py +0 -0
  266. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
  267. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/templates.py +0 -0
  268. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/tiering.py +0 -0
  269. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/validation.py +0 -0
  270. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/__init__.py +0 -0
  271. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
  272. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/apply.py +0 -0
  273. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
  274. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/proposals.py +0 -0
  275. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
  276. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
  277. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
  278. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
  279. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/__init__.py +0 -0
  280. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/guidance.py +0 -0
  281. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/merge.py +0 -0
  282. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/presets.py +0 -0
  283. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/principles.py +0 -0
  284. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/profile.py +0 -0
  285. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/py.typed +0 -0
  286. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/__init__.py +0 -0
  287. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
  288. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
  289. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
  290. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
  291. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
  292. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/packs.py +0 -0
  293. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
  294. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
  295. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
  296. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
  297. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
  298. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
  299. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
  300. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
  301. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
  302. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
  303. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/__init__.py +0 -0
  304. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/evidence.py +0 -0
  305. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/provenance.py +0 -0
  306. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/validation.py +0 -0
  307. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/resources.py +0 -0
  308. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review/__init__.py +0 -0
  309. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review/validation.py +0 -0
  310. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
  311. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
  312. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
  313. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
  314. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
  315. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
  316. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/results.py +0 -0
  317. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
  318. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/__init__.py +0 -0
  319. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/attempt_snapshots.py +0 -0
  320. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/core.py +0 -0
  321. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
  322. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/__init__.py +0 -0
  323. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
  324. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
  325. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
  326. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/validation.py +0 -0
  327. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
  328. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
  329. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
  330. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
  331. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
  332. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
  333. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
  334. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/controller.py +0 -0
  335. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/events.py +0 -0
  336. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
  337. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
  338. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/gates.py +0 -0
  339. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
  340. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/leases.py +0 -0
  341. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
  342. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
  343. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
  344. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
  345. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
  346. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
  347. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/query.py +0 -0
  348. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
  349. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
  350. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
  351. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
  352. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
  353. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
  354. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/state.py +0 -0
  355. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
  356. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
  357. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
  358. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
  359. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
  360. {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.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.77.0
3
+ Version: 1.78.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.77.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.78.0`, and common `agent-lifecycle version` errors.
47
47
 
48
48
  For a quick start, run:
49
49
 
@@ -80,7 +80,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
80
80
  composes risk, model class, packet size, review and resource limits.
81
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.
82
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.
83
+ - Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources, an explicit documented Python API, and bounded performance controls that preserve security and evidence rules.
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,
@@ -195,7 +195,7 @@ Adapter installation and support-level details live in [Adapter install](docs/ad
195
195
  - Start: [English documentation](docs/README.md), [Русская документация](docs/ru/README.md), [Install](docs/guides/install-and-first-run.md), [Quickstart](docs/guides/quickstart.md), [Beginner and advanced workflows](docs/guides/beginner-and-advanced-workflows.md), [Commands by task](docs/guides/commands-by-task.md), [Research workflow](docs/guides/research-workflow.md), [Lifecycle task scenarios](docs/guides/lifecycle-cookbook.md), and [Code review workflows](docs/guides/code-review-workflows.md).
196
196
  - Planning and adapters: [Issue to specification drafts](docs/guides/issue-to-spec.md), [Adapter install](docs/adapters/install.md), and [Adapter support matrix](docs/adapters/support-matrix.md).
197
197
  - Reference: [System architecture](docs/architecture/system-architecture.md), [workflow customization and execution controls](docs/reference/workflow-customization.md), [execution strategy](docs/reference/execution-strategy.md), [CLI reference](docs/reference/cli.md), [Research evidence](docs/reference/research-evidence.md), [Source of truth](docs/reference/source-of-truth.md), [Managed lifecycle runner](docs/reference/managed-lifecycle-runner.md), [Managed adapter sessions](docs/reference/managed-adapter-sessions.md), [Portable Agent Plugins](docs/reference/agent-plugins.md), [Plugin publication](docs/reference/plugin-publication.md), [Implementation audit](docs/reference/implementation-audit.md), [Plan completeness](docs/reference/plan-completeness.md), [Public contracts](docs/reference/public-contracts.md), and [Readiness diagnostics](docs/reference/readiness-diagnostics.md).
198
- - Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
198
+ - Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [performance and resource budgets](docs/reference/performance-and-resource-budgets.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
199
199
  - Profiles and operations: [Project workflow presets](docs/reference/workflow-presets.md), [Project workflow profile](docs/reference/project-workflow-profile.md), [Read-only status views](docs/reference/read-only-status-view.md), [Adapter progress bridge](docs/reference/automatic-progress-bridge.md), [Sandbox boundaries](docs/reference/sandbox-boundaries.md), [Import mappers](docs/reference/import-mappers.md), [Episode retrieval](docs/reference/episode-retrieval.md), [Runner recovery](docs/reference/runner-recovery.md), [Cross-check profile](docs/reference/cross-check-profile.md), [Review Mesh](docs/reference/review-mesh.md), [Bug Forensics profile](docs/reference/bug-forensics.md), and [Bug Forensics context budget](docs/reference/bug-forensics-context-budget.md).
200
200
  - Release assets: [Task templates](templates/tasks/README.md), [Neutrality scanning](docs/reference/neutrality.md), and [Release security](docs/security/release-security.md).
201
201
 
@@ -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.77.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.78.0`, and common `agent-lifecycle version` errors.
25
25
 
26
26
  For a quick start, run:
27
27
 
@@ -58,7 +58,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
58
58
  composes risk, model class, packet size, review and resource limits.
59
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.
60
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.
61
+ - Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources, an explicit documented Python API, and bounded performance controls that preserve security and evidence rules.
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,
@@ -173,7 +173,7 @@ Adapter installation and support-level details live in [Adapter install](docs/ad
173
173
  - Start: [English documentation](docs/README.md), [Русская документация](docs/ru/README.md), [Install](docs/guides/install-and-first-run.md), [Quickstart](docs/guides/quickstart.md), [Beginner and advanced workflows](docs/guides/beginner-and-advanced-workflows.md), [Commands by task](docs/guides/commands-by-task.md), [Research workflow](docs/guides/research-workflow.md), [Lifecycle task scenarios](docs/guides/lifecycle-cookbook.md), and [Code review workflows](docs/guides/code-review-workflows.md).
174
174
  - Planning and adapters: [Issue to specification drafts](docs/guides/issue-to-spec.md), [Adapter install](docs/adapters/install.md), and [Adapter support matrix](docs/adapters/support-matrix.md).
175
175
  - Reference: [System architecture](docs/architecture/system-architecture.md), [workflow customization and execution controls](docs/reference/workflow-customization.md), [execution strategy](docs/reference/execution-strategy.md), [CLI reference](docs/reference/cli.md), [Research evidence](docs/reference/research-evidence.md), [Source of truth](docs/reference/source-of-truth.md), [Managed lifecycle runner](docs/reference/managed-lifecycle-runner.md), [Managed adapter sessions](docs/reference/managed-adapter-sessions.md), [Portable Agent Plugins](docs/reference/agent-plugins.md), [Plugin publication](docs/reference/plugin-publication.md), [Implementation audit](docs/reference/implementation-audit.md), [Plan completeness](docs/reference/plan-completeness.md), [Public contracts](docs/reference/public-contracts.md), and [Readiness diagnostics](docs/reference/readiness-diagnostics.md).
176
- - Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
176
+ - Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [performance and resource budgets](docs/reference/performance-and-resource-budgets.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
177
177
  - Profiles and operations: [Project workflow presets](docs/reference/workflow-presets.md), [Project workflow profile](docs/reference/project-workflow-profile.md), [Read-only status views](docs/reference/read-only-status-view.md), [Adapter progress bridge](docs/reference/automatic-progress-bridge.md), [Sandbox boundaries](docs/reference/sandbox-boundaries.md), [Import mappers](docs/reference/import-mappers.md), [Episode retrieval](docs/reference/episode-retrieval.md), [Runner recovery](docs/reference/runner-recovery.md), [Cross-check profile](docs/reference/cross-check-profile.md), [Review Mesh](docs/reference/review-mesh.md), [Bug Forensics profile](docs/reference/bug-forensics.md), and [Bug Forensics context budget](docs/reference/bug-forensics-context-budget.md).
178
178
  - Release assets: [Task templates](templates/tasks/README.md), [Neutrality scanning](docs/reference/neutrality.md), and [Release security](docs/security/release-security.md).
179
179
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-lifecycle-kit"
7
- version = "1.77.0"
7
+ version = "1.78.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__ = "1.77.0"
3
+ __version__ = "1.78.0"
@@ -2,9 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import hashlib
6
- import os
7
- import subprocess
8
5
  from collections.abc import Callable
9
6
  from pathlib import Path
10
7
  from typing import Any
@@ -24,6 +21,7 @@ from agent_lifecycle.adapter_sessions.planning_launch import run_planning_launch
24
21
  from agent_lifecycle.adapter_sessions.qualification import (
25
22
  shipped_profile_digest,
26
23
  )
24
+ from agent_lifecycle.adapter_sessions.worktree_identity import capture_git_worktree_identity
27
25
  from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
28
26
  from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
29
27
 
@@ -305,89 +303,6 @@ def _state_task(state: dict[str, Any], task_id: str) -> dict[str, Any]:
305
303
  raise LifecycleError("local-launch-task-missing", "task is not present in workflow state", {"taskId": task_id})
306
304
 
307
305
 
308
- def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
309
- """Capture normalized authoritative Git content without requiring cleanliness."""
310
-
311
- root = project_root.resolve()
312
- head = _git_bytes(root, ["rev-parse", "HEAD"]).decode("ascii", errors="strict").strip()
313
- staged = _git_bytes(root, ["diff", "--cached", "--binary", "--no-ext-diff"])
314
- unstaged = _git_bytes(root, ["diff", "--binary", "--no-ext-diff"])
315
- submodules = _git_bytes(root, ["submodule", "status", "--recursive"])
316
- untracked_raw = _git_bytes(root, ["ls-files", "--others", "--exclude-standard", "-z"])
317
- untracked_rows: list[dict[str, Any]] = []
318
- total_bytes = 0
319
- for raw_name in sorted(item for item in untracked_raw.split(b"\0") if item):
320
- relative = os.fsdecode(raw_name)
321
- path = root / relative
322
- try:
323
- before = path.lstat()
324
- if path.is_symlink():
325
- payload = os.fsencode(path.readlink())
326
- kind = "symlink"
327
- else:
328
- payload = path.read_bytes()
329
- kind = "file"
330
- after = path.lstat()
331
- except OSError as exc:
332
- raise LifecycleError(
333
- "planning-worktree-read-race",
334
- "failed to capture an untracked worktree entry",
335
- {"errorType": type(exc).__name__},
336
- ) from exc
337
- if (before.st_size, before.st_mtime_ns) != (after.st_size, after.st_mtime_ns):
338
- raise LifecycleError(
339
- "planning-worktree-read-race",
340
- "untracked worktree entry changed during identity capture",
341
- )
342
- total_bytes += len(payload)
343
- untracked_rows.append(
344
- {
345
- "pathBytesSha256": hashlib.sha256(raw_name).hexdigest(),
346
- "kind": kind,
347
- "bytes": len(payload),
348
- "sha256": hashlib.sha256(payload).hexdigest(),
349
- }
350
- )
351
- body = {
352
- "schemaVersion": "agent-planning-worktree-identity.v1",
353
- "head": head,
354
- "stagedDiffSha256": hashlib.sha256(staged).hexdigest(),
355
- "unstagedDiffSha256": hashlib.sha256(unstaged).hexdigest(),
356
- "submoduleStateSha256": hashlib.sha256(submodules).hexdigest(),
357
- "untrackedTreeSha256": canonical_digest({"entries": untracked_rows}),
358
- "untrackedCount": len(untracked_rows),
359
- "untrackedBytes": total_bytes,
360
- "ignoredLocalStateExcluded": True,
361
- }
362
- return {**body, "identityDigest": canonical_digest(body)}
363
-
364
-
365
- def _git_bytes(root: Path, args: list[str]) -> bytes:
366
- try:
367
- result = subprocess.run(
368
- ["git", *args],
369
- cwd=root,
370
- shell=False,
371
- stdin=subprocess.DEVNULL,
372
- capture_output=True,
373
- timeout=10,
374
- check=False,
375
- )
376
- except (OSError, subprocess.TimeoutExpired) as exc:
377
- raise LifecycleError(
378
- "planning-worktree-identity-failed",
379
- "Git identity capture failed closed",
380
- {"errorType": type(exc).__name__},
381
- ) from exc
382
- if result.returncode != 0:
383
- raise LifecycleError(
384
- "planning-worktree-identity-failed",
385
- "Git identity command failed closed",
386
- {"command": args[0], "exitCode": result.returncode},
387
- )
388
- return result.stdout
389
-
390
-
391
306
  def _blocked_planning_launch(
392
307
  *,
393
308
  adapter_id: str,
@@ -11,6 +11,8 @@ from typing import Any
11
11
  class ProcessTelemetry:
12
12
  """Capture monotonic wall time and best-effort local process facts."""
13
13
 
14
+ GROUP_SAMPLE_INTERVAL_NS = 250_000_000
15
+
14
16
  def __init__(self, *, pid: int | None, group_id: int | None = None) -> None:
15
17
  self.pid = pid
16
18
  self.group_id = group_id
@@ -23,10 +25,19 @@ class ProcessTelemetry:
23
25
  self._memory_source = "none"
24
26
  self._process_source = "none"
25
27
  self._sample_count = 0
26
- self.sample()
27
-
28
- def sample(self) -> dict[str, Any]:
29
- snapshot = capture_process_snapshot(self.pid, self.group_id)
28
+ self._last_group_sample_ns: int | None = None
29
+ self.sample(force_group=True)
30
+
31
+ def sample(self, *, force_group: bool = False) -> dict[str, Any]:
32
+ now_ns = time.monotonic_ns()
33
+ sample_group = (
34
+ force_group
35
+ or self._last_group_sample_ns is None
36
+ or now_ns - self._last_group_sample_ns >= self.GROUP_SAMPLE_INTERVAL_NS
37
+ )
38
+ snapshot = capture_process_snapshot(self.pid, self.group_id, sample_group=sample_group)
39
+ if sample_group:
40
+ self._last_group_sample_ns = now_ns
30
41
  self._sample_count += 1
31
42
  cpu = snapshot.get("cpuMs")
32
43
  if isinstance(cpu, (int, float)):
@@ -45,7 +56,7 @@ class ProcessTelemetry:
45
56
  return snapshot
46
57
 
47
58
  def finish(self) -> dict[str, Any]:
48
- self.sample()
59
+ self.sample(force_group=True)
49
60
  elapsed_ms = max(0, int((time.monotonic_ns() - self.started_ns) / 1_000_000))
50
61
  cpu_ms = None
51
62
  if self._last_cpu_ms is not None and self._start_cpu_ms is not None:
@@ -53,13 +64,28 @@ class ProcessTelemetry:
53
64
  return {
54
65
  "elapsedMs": elapsed_ms,
55
66
  "cpuMs": _metric(cpu_ms, "ATTESTED" if cpu_ms is not None else "UNAVAILABLE", self._cpu_source, "ms"),
56
- "peakMemoryMb": _metric(self._peak_memory_mb, "ATTESTED" if self._peak_memory_mb is not None else "UNAVAILABLE", self._memory_source, "MB"),
57
- "processCount": _metric(self._peak_process_count, "ATTESTED" if self._peak_process_count is not None else "UNAVAILABLE", self._process_source, "processes"),
67
+ "peakMemoryMb": _metric(
68
+ self._peak_memory_mb,
69
+ "ATTESTED" if self._peak_memory_mb is not None else "UNAVAILABLE",
70
+ self._memory_source,
71
+ "MB",
72
+ ),
73
+ "processCount": _metric(
74
+ self._peak_process_count,
75
+ "ATTESTED" if self._peak_process_count is not None else "UNAVAILABLE",
76
+ self._process_source,
77
+ "processes",
78
+ ),
58
79
  "sampleCount": self._sample_count,
59
80
  }
60
81
 
61
82
 
62
- def capture_process_snapshot(pid: int | None, group_id: int | None = None) -> dict[str, Any]:
83
+ def capture_process_snapshot(
84
+ pid: int | None,
85
+ group_id: int | None = None,
86
+ *,
87
+ sample_group: bool = True,
88
+ ) -> dict[str, Any]:
63
89
  """Read only local OS data; unavailable platforms return explicit gaps."""
64
90
 
65
91
  if pid is None:
@@ -67,7 +93,7 @@ def capture_process_snapshot(pid: int | None, group_id: int | None = None) -> di
67
93
  if os.name == "posix":
68
94
  proc = Path("/proc") / str(pid)
69
95
  if proc.exists():
70
- snapshot = _linux_snapshot(proc, group_id)
96
+ snapshot = _linux_snapshot(proc, group_id, sample_group=sample_group)
71
97
  if snapshot:
72
98
  return snapshot
73
99
  # resource is portable across Unix, but RUSAGE_CHILDREN is aggregate;
@@ -89,7 +115,7 @@ def capture_process_snapshot(pid: int | None, group_id: int | None = None) -> di
89
115
  return {"processCount": 1, "processSource": "direct-child"}
90
116
 
91
117
 
92
- def _linux_snapshot(proc: Path, group_id: int | None) -> dict[str, Any]:
118
+ def _linux_snapshot(proc: Path, group_id: int | None, *, sample_group: bool) -> dict[str, Any]:
93
119
  try:
94
120
  stat = (proc / "stat").read_text(encoding="utf-8")
95
121
  right = stat.rsplit(")", 1)[1].split()
@@ -102,15 +128,19 @@ def _linux_snapshot(proc: Path, group_id: int | None) -> dict[str, Any]:
102
128
  parts = line.split()
103
129
  if len(parts) >= 2:
104
130
  memory_mb = max(memory_mb or 0.0, int(parts[1]) / 1024.0)
105
- count = _linux_group_count(group_id) if group_id is not None else 1
106
- return {
131
+ snapshot = {
107
132
  "cpuMs": cpu_ms,
108
133
  "cpuSource": "procfs",
109
134
  "memoryMb": memory_mb,
110
135
  "memorySource": "procfs",
111
- "processCount": count,
112
- "processSource": "procfs-group" if group_id is not None else "procfs-direct",
113
136
  }
137
+ if group_id is None:
138
+ snapshot["processCount"] = 1
139
+ snapshot["processSource"] = "procfs-direct"
140
+ elif sample_group:
141
+ snapshot["processCount"] = _linux_group_count(group_id)
142
+ snapshot["processSource"] = "procfs-group"
143
+ return snapshot
114
144
  except (OSError, ValueError, IndexError, KeyError):
115
145
  return {}
116
146
 
@@ -0,0 +1,189 @@
1
+ """Bounded, stable Git worktree identity capture for planning launches."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import os
7
+ import subprocess
8
+ import time
9
+ from pathlib import Path
10
+ from typing import Any
11
+
12
+ from agent_lifecycle.contracts import LifecycleError, canonical_digest
13
+
14
+ MAX_UNTRACKED_FILES = 100_000
15
+ MAX_UNTRACKED_BYTES = 4 * 1024 * 1024 * 1024
16
+ MAX_HASH_CHUNK_BYTES = 256 * 1024
17
+ MAX_CAPTURE_SECONDS = 120.0
18
+
19
+
20
+ def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
21
+ """Capture authoritative Git content with bounded streaming reads.
22
+
23
+ The five Git commands remain ordered so the before/after launch snapshots
24
+ retain their existing consistency semantics. Ordinary untracked files are
25
+ hashed incrementally; symlinks hash only their link text and other special
26
+ files fail closed.
27
+ """
28
+
29
+ root = project_root.resolve()
30
+ deadline = time.monotonic() + MAX_CAPTURE_SECONDS
31
+ 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)
34
+ submodules = _git_bytes(root, ["submodule", "status", "--recursive"], deadline)
35
+ untracked_raw = _git_bytes(root, ["ls-files", "--others", "--exclude-standard", "-z"], deadline)
36
+ names = sorted(item for item in untracked_raw.split(b"\0") if item)
37
+ if len(names) > MAX_UNTRACKED_FILES:
38
+ raise LifecycleError(
39
+ "planning-worktree-untracked-limit",
40
+ "untracked file count exceeds the identity budget",
41
+ {"count": len(names), "maxFiles": MAX_UNTRACKED_FILES},
42
+ )
43
+ untracked_rows: list[dict[str, Any]] = []
44
+ total_bytes = 0
45
+ for raw_name in names:
46
+ _require_time(deadline)
47
+ relative = os.fsdecode(raw_name)
48
+ path = root / relative
49
+ before = _lstat_or_race(path)
50
+ path_digest = hashlib.sha256(raw_name).hexdigest()
51
+ if path.is_symlink():
52
+ payload = os.fsencode(path.readlink())
53
+ digest = hashlib.sha256(payload).hexdigest()
54
+ row_bytes = len(payload)
55
+ kind = "symlink"
56
+ elif _is_regular_file(before.st_mode):
57
+ digest, row_bytes = _hash_regular_file(path, deadline)
58
+ kind = "file"
59
+ else:
60
+ raise LifecycleError(
61
+ "planning-worktree-special-file",
62
+ "untracked identity capture rejects special files",
63
+ {"kind": "non-regular"},
64
+ )
65
+ after = _lstat_or_race(path)
66
+ if _stat_identity(before) != _stat_identity(after):
67
+ raise LifecycleError(
68
+ "planning-worktree-read-race",
69
+ "untracked worktree entry changed during identity capture",
70
+ )
71
+ total_bytes += row_bytes
72
+ if total_bytes > MAX_UNTRACKED_BYTES:
73
+ raise LifecycleError(
74
+ "planning-worktree-untracked-limit",
75
+ "untracked byte count exceeds the identity budget",
76
+ {"bytes": total_bytes, "maxBytes": MAX_UNTRACKED_BYTES},
77
+ )
78
+ untracked_rows.append(
79
+ {
80
+ "pathBytesSha256": path_digest,
81
+ "kind": kind,
82
+ "bytes": row_bytes,
83
+ "sha256": digest,
84
+ }
85
+ )
86
+ body = {
87
+ "schemaVersion": "agent-planning-worktree-identity.v1",
88
+ "head": head,
89
+ "stagedDiffSha256": hashlib.sha256(staged).hexdigest(),
90
+ "unstagedDiffSha256": hashlib.sha256(unstaged).hexdigest(),
91
+ "submoduleStateSha256": hashlib.sha256(submodules).hexdigest(),
92
+ "untrackedTreeSha256": canonical_digest({"entries": untracked_rows}),
93
+ "untrackedCount": len(untracked_rows),
94
+ "untrackedBytes": total_bytes,
95
+ "ignoredLocalStateExcluded": True,
96
+ }
97
+ return {**body, "identityDigest": canonical_digest(body)}
98
+
99
+
100
+ def _hash_regular_file(path: Path, deadline: float) -> tuple[str, int]:
101
+ digest = hashlib.sha256()
102
+ total = 0
103
+ try:
104
+ with path.open("rb") as handle:
105
+ while True:
106
+ _require_time(deadline)
107
+ chunk = handle.read(MAX_HASH_CHUNK_BYTES)
108
+ if not chunk:
109
+ break
110
+ total += len(chunk)
111
+ if total > MAX_UNTRACKED_BYTES:
112
+ raise LifecycleError(
113
+ "planning-worktree-untracked-limit",
114
+ "untracked byte count exceeds the identity budget",
115
+ {"bytes": total, "maxBytes": MAX_UNTRACKED_BYTES},
116
+ )
117
+ digest.update(chunk)
118
+ except LifecycleError:
119
+ raise
120
+ except OSError as exc:
121
+ raise LifecycleError(
122
+ "planning-worktree-read-race",
123
+ "failed to capture an untracked worktree entry",
124
+ {"errorType": type(exc).__name__},
125
+ ) from exc
126
+ return digest.hexdigest(), total
127
+
128
+
129
+ def _git_bytes(root: Path, args: list[str], deadline: float) -> bytes:
130
+ remaining = deadline - time.monotonic()
131
+ if remaining <= 0:
132
+ raise LifecycleError("planning-worktree-identity-timeout", "Git identity capture exceeded its deadline")
133
+ try:
134
+ result = subprocess.run(
135
+ ["git", *args],
136
+ cwd=root,
137
+ shell=False,
138
+ stdin=subprocess.DEVNULL,
139
+ capture_output=True,
140
+ timeout=remaining,
141
+ check=False,
142
+ )
143
+ except (OSError, subprocess.TimeoutExpired) as exc:
144
+ raise LifecycleError(
145
+ "planning-worktree-identity-failed",
146
+ "Git identity capture failed closed",
147
+ {"errorType": type(exc).__name__},
148
+ ) from exc
149
+ if result.returncode != 0:
150
+ raise LifecycleError(
151
+ "planning-worktree-identity-failed",
152
+ "Git identity command failed closed",
153
+ {"command": args[0], "exitCode": result.returncode},
154
+ )
155
+ return result.stdout
156
+
157
+
158
+ def _lstat_or_race(path: Path) -> os.stat_result:
159
+ try:
160
+ return path.lstat()
161
+ except OSError as exc:
162
+ raise LifecycleError(
163
+ "planning-worktree-read-race",
164
+ "failed to inspect an untracked worktree entry",
165
+ {"errorType": type(exc).__name__},
166
+ ) from exc
167
+
168
+
169
+ def _is_regular_file(mode: int) -> bool:
170
+ return (mode & 0o170000) == 0o100000
171
+
172
+
173
+ def _stat_identity(stat_result: os.stat_result) -> tuple[int, int, int, int, int, int]:
174
+ return (
175
+ stat_result.st_dev,
176
+ stat_result.st_ino,
177
+ stat_result.st_mode,
178
+ stat_result.st_size,
179
+ stat_result.st_mtime_ns,
180
+ stat_result.st_ctime_ns,
181
+ )
182
+
183
+
184
+ def _require_time(deadline: float) -> None:
185
+ if time.monotonic() >= deadline:
186
+ raise LifecycleError("planning-worktree-identity-timeout", "Git identity capture exceeded its deadline")
187
+
188
+
189
+ __all__ = ["capture_git_worktree_identity"]
@@ -0,0 +1,41 @@
1
+ """Provider-neutral lazy CLI dispatch registry."""
2
+
3
+ from __future__ import annotations
4
+
5
+ COMMAND_DISPATCH = {
6
+ "start": ("agent_lifecycle.cli.start", "dispatch_start", True),
7
+ "host-launch": ("agent_lifecycle.cli.host_launch", "dispatch_host_launch", False),
8
+ "strategy": ("agent_lifecycle.cli.strategy", "dispatch_strategy", False),
9
+ "project": ("agent_lifecycle.cli.project", "dispatch_project", False),
10
+ "diagnose": ("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", False),
11
+ "diagnostics": ("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", False),
12
+ "adapter": ("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", False),
13
+ "research": ("agent_lifecycle.cli.dispatch_research", "dispatch_research", False),
14
+ "version": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
15
+ "schema": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
16
+ "contract": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
17
+ "evidence": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
18
+ "import": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
19
+ "quality": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
20
+ "review-mesh": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
21
+ "workflow": ("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", False),
22
+ "audit": ("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", False),
23
+ "runner": ("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", False),
24
+ "report": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
25
+ "context": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
26
+ "goal": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
27
+ "model": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
28
+ "metrics": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
29
+ "thread": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
30
+ "tier": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
31
+ "specification": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
32
+ "plan": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
33
+ "task": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
34
+ "policy": ("agent_lifecycle.cli.policy", "dispatch_policy", False),
35
+ "followup": ("agent_lifecycle.cli.followup", "dispatch_followup", False),
36
+ "worktree": ("agent_lifecycle.cli.worktree", "dispatch_worktree", False),
37
+ "benchmark": ("agent_lifecycle.cli.benchmarks", "dispatch_benchmark", False),
38
+ }
39
+
40
+
41
+ __all__ = ["COMMAND_DISPATCH"]
@@ -0,0 +1,88 @@
1
+ """Thin root CLI dispatcher for Agent Lifecycle Kit."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import importlib
7
+ from typing import Any
8
+
9
+ from agent_lifecycle.cli.command_registry import COMMAND_DISPATCH
10
+ from agent_lifecycle.contracts import LifecycleError
11
+
12
+
13
+ def _lazy_call(
14
+ module_name: str, function_name: str, args: argparse.Namespace, remainder: list[str] | None = None
15
+ ) -> dict[str, Any] | str | None:
16
+ function = getattr(importlib.import_module(module_name), function_name)
17
+ return function(args, remainder) if remainder is not None else function(args)
18
+
19
+
20
+ def dispatch_start(args: argparse.Namespace, remainder: list[str]) -> dict[str, Any] | str | None:
21
+ return _lazy_call("agent_lifecycle.cli.start", "dispatch_start", args, remainder)
22
+
23
+
24
+ def dispatch_host_launch(args: argparse.Namespace) -> dict[str, Any] | str | None:
25
+ return _lazy_call("agent_lifecycle.cli.host_launch", "dispatch_host_launch", args)
26
+
27
+
28
+ def dispatch_strategy(args: argparse.Namespace) -> dict[str, Any] | str | None:
29
+ return _lazy_call("agent_lifecycle.cli.strategy", "dispatch_strategy", args)
30
+
31
+
32
+ def dispatch_project(args: argparse.Namespace) -> dict[str, Any] | str | None:
33
+ return _lazy_call("agent_lifecycle.cli.project", "dispatch_project", args)
34
+
35
+
36
+ def dispatch_adapters(args: argparse.Namespace) -> dict[str, Any] | str | None:
37
+ return _lazy_call("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", args)
38
+
39
+
40
+ def dispatch_research(args: argparse.Namespace) -> dict[str, Any] | str | None:
41
+ return _lazy_call("agent_lifecycle.cli.dispatch_research", "dispatch_research", args)
42
+
43
+
44
+ def dispatch_contracts(args: argparse.Namespace) -> dict[str, Any] | str | None:
45
+ return _lazy_call("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", args)
46
+
47
+
48
+ def dispatch_lifecycle(args: argparse.Namespace) -> dict[str, Any] | str | None:
49
+ return _lazy_call("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", args)
50
+
51
+
52
+ def dispatch_observability(args: argparse.Namespace) -> dict[str, Any] | str | None:
53
+ return _lazy_call("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", args)
54
+
55
+
56
+ def dispatch_planning(args: argparse.Namespace) -> dict[str, Any] | str | None:
57
+ return _lazy_call("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", args)
58
+
59
+
60
+ def dispatch_policy(args: argparse.Namespace) -> dict[str, Any] | str | None:
61
+ return _lazy_call("agent_lifecycle.cli.policy", "dispatch_policy", args)
62
+
63
+
64
+ def dispatch_followup(args: argparse.Namespace) -> dict[str, Any] | str | None:
65
+ return _lazy_call("agent_lifecycle.cli.followup", "dispatch_followup", args)
66
+
67
+
68
+ def dispatch_worktree(args: argparse.Namespace) -> dict[str, Any] | str | None:
69
+ return _lazy_call("agent_lifecycle.cli.worktree", "dispatch_worktree", args)
70
+
71
+
72
+ def dispatch_benchmark(args: argparse.Namespace) -> dict[str, Any] | str | None:
73
+ return _lazy_call("agent_lifecycle.cli.benchmarks", "dispatch_benchmark", args)
74
+
75
+
76
+ def dispatch(args: argparse.Namespace, remainder: list[str]) -> dict[str, Any] | str | None:
77
+ """Route a parsed command without owning domain behavior or CLI output."""
78
+ target = COMMAND_DISPATCH.get(args.command)
79
+ if target is None:
80
+ raise LifecycleError(
81
+ "command-not-implemented", f"{args.command} command group is reserved but not implemented in this build"
82
+ )
83
+ _, function_name, accepts_remainder = target
84
+ function = globals()[function_name]
85
+ if accepts_remainder:
86
+ return function(args, remainder)
87
+ del remainder
88
+ return function(args)
@@ -11,8 +11,9 @@ from agent_lifecycle.contracts import LifecycleError, canonical_bytes
11
11
 
12
12
 
13
13
  def main(argv: list[str] | None = None) -> int:
14
- parser = build_parser()
15
- args, remainder = parser.parse_known_args(argv)
14
+ raw_argv = list(sys.argv[1:] if argv is None else argv)
15
+ parser = build_parser(raw_argv)
16
+ args, remainder = parser.parse_known_args(raw_argv)
16
17
  try:
17
18
  if args.command == "neutrality":
18
19
  from agent_lifecycle.neutrality.cli import main as neutrality_main