agent-lifecycle-kit 1.63.2__tar.gz → 1.65.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 (293) hide show
  1. {agent_lifecycle_kit-1.63.2/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-1.65.0}/PKG-INFO +3 -3
  2. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/README.md +2 -2
  3. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/pyproject.toml +1 -1
  4. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/_version.py +1 -1
  5. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/session_store.py +2 -0
  6. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +7 -4
  7. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/dispatch.py +1 -1
  8. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/dispatch_observability.py +124 -0
  9. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/parsers.py +42 -0
  10. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/context/__init__.py +47 -0
  11. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/context/checkpoint_store.py +198 -0
  12. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/context/checkpoints.py +378 -0
  13. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/context/thread_bridge_context.py +93 -0
  14. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/compatibility.py +10 -0
  15. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +163 -0
  16. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +35 -0
  17. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/redaction.py +14 -1
  18. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/schemas.py +4 -0
  19. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/contracts/thread_bridge_schemas.py +734 -0
  20. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/host_protocol/context_events.py +122 -0
  21. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/host_protocol/thread_bridge.py +60 -0
  22. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/__init__.py +15 -6
  23. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/policy/thread_bridge.py +337 -0
  24. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/project/merge.py +15 -0
  25. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/project/profile.py +11 -0
  26. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/__init__.py +4 -1
  27. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/assignments.py +24 -0
  28. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/results.py +27 -0
  29. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/__init__.py +6 -0
  30. agent_lifecycle_kit-1.65.0/src/agent_lifecycle/workflow/checkpoint_gate.py +196 -0
  31. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/operation_kernel.py +9 -0
  32. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/plan_adoption.py +2 -0
  33. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +3 -3
  34. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +9 -0
  35. agent_lifecycle_kit-1.63.2/src/agent_lifecycle/context/__init__.py +0 -20
  36. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/LICENSE +0 -0
  37. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/NOTICE +0 -0
  38. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/README.md +0 -0
  39. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/manifest.json +0 -0
  40. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
  41. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
  42. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
  43. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
  44. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
  45. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
  46. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
  47. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
  48. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
  49. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
  50. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/setup.cfg +0 -0
  51. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/__init__.py +0 -0
  52. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/__main__.py +0 -0
  53. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
  54. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
  55. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
  56. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
  57. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
  58. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
  59. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
  60. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
  61. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
  62. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
  63. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
  64. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
  65. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/__init__.py +0 -0
  66. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
  67. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/implementation.py +0 -0
  68. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/ownership.py +0 -0
  69. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/package.py +0 -0
  70. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
  71. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
  72. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
  73. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
  74. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
  75. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
  76. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
  77. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
  78. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
  79. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/changesets/git.py +0 -0
  80. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/__init__.py +0 -0
  81. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/adapter.py +0 -0
  82. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
  83. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
  84. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
  85. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
  86. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/dispatch_planning.py +0 -0
  87. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/followup.py +0 -0
  88. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
  89. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/main.py +0 -0
  90. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/metrics_parser.py +0 -0
  91. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/policy.py +0 -0
  92. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
  93. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/project.py +0 -0
  94. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/start.py +0 -0
  95. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/strategy.py +0 -0
  96. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/cli/worktree.py +0 -0
  97. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
  98. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
  99. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
  100. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
  101. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/context/external_memory.py +0 -0
  102. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/context/profiles.py +0 -0
  103. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/context/rendering.py +0 -0
  104. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
  105. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
  106. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
  107. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
  108. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
  109. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
  110. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
  111. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
  112. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
  113. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
  114. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
  115. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
  116. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/errors.py +0 -0
  117. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
  118. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
  119. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
  120. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
  121. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
  122. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/paths.py +0 -0
  123. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
  124. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
  125. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
  126. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
  127. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
  128. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
  129. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
  130. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
  131. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
  132. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
  133. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
  134. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
  135. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
  136. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
  137. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
  138. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
  139. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
  140. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
  141. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
  142. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
  143. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
  144. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
  145. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
  146. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
  147. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
  148. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
  149. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/followup/__init__.py +0 -0
  150. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/followup/records.py +0 -0
  151. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
  152. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/freeze/locks.py +0 -0
  153. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/goal/__init__.py +0 -0
  154. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/goal/records.py +0 -0
  155. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/goal/view.py +0 -0
  156. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
  157. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
  158. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
  159. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
  160. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
  161. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
  162. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
  163. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
  164. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
  165. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
  166. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
  167. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
  168. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
  169. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
  170. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
  171. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
  172. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
  173. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
  174. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
  175. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
  176. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/__init__.py +0 -0
  177. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
  178. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
  179. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
  180. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
  181. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
  182. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
  183. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
  184. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
  185. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
  186. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/planning.py +0 -0
  187. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
  188. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
  189. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
  190. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
  191. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/costs.py +0 -0
  192. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
  193. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
  194. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
  195. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
  196. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
  197. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
  198. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
  199. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
  200. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
  201. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
  202. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
  203. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
  204. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
  205. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
  206. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/ed25519.py +0 -0
  207. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
  208. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
  209. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
  210. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
  211. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
  212. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/scanner.py +0 -0
  213. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
  214. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/__init__.py +0 -0
  215. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
  216. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/completeness.py +0 -0
  217. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/continuity.py +0 -0
  218. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
  219. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/templates.py +0 -0
  220. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/tiering.py +0 -0
  221. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/planning/validation.py +0 -0
  222. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
  223. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/apply.py +0 -0
  224. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
  225. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/proposals.py +0 -0
  226. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
  227. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
  228. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
  229. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/project/__init__.py +0 -0
  230. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/project/guidance.py +0 -0
  231. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/py.typed +0 -0
  232. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/__init__.py +0 -0
  233. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
  234. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
  235. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
  236. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
  237. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
  238. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/quality/packs.py +0 -0
  239. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
  240. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
  241. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
  242. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
  243. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
  244. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
  245. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
  246. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
  247. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
  248. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review/__init__.py +0 -0
  249. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review/validation.py +0 -0
  250. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
  251. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
  252. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
  253. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
  254. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
  255. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/runner/__init__.py +0 -0
  256. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/runner/attempt_snapshots.py +0 -0
  257. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/runner/core.py +0 -0
  258. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
  259. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/specification/__init__.py +0 -0
  260. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
  261. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
  262. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
  263. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/specification/validation.py +0 -0
  264. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
  265. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
  266. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
  267. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
  268. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
  269. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/controller.py +0 -0
  270. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/events.py +0 -0
  271. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
  272. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
  273. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/gates.py +0 -0
  274. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
  275. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/leases.py +0 -0
  276. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
  277. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
  278. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
  279. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
  280. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/query.py +0 -0
  281. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
  282. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
  283. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
  284. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
  285. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
  286. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
  287. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/state.py +0 -0
  288. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
  289. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
  290. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
  291. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
  292. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
  293. {agent_lifecycle_kit-1.63.2 → agent_lifecycle_kit-1.65.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.63.2
3
+ Version: 1.65.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
@@ -61,7 +61,7 @@ and start a task with:
61
61
  agent-lifecycle start --adapter <adapter-id> --file task.md
62
62
  ```
63
63
 
64
- The published [PyPI package](https://pypi.org/project/agent-lifecycle-kit/) supports Python 3.11-3.14; install it with `python -m pip install agent-lifecycle-kit==1.63.2`.
64
+ The published [PyPI package](https://pypi.org/project/agent-lifecycle-kit/) supports Python 3.11-3.14; install it with `python -m pip install agent-lifecycle-kit==1.65.0`. The optional [thread bridge](docs/reference/optional-thread-bridge.md) imports adapter-owned thread results as non-authoritative context.
65
65
  Use [Quickstart](docs/guides/quickstart.md) for the first task and [Commands by task](docs/guides/commands-by-task.md) for detailed operations.
66
66
  Continue with [task workflows](docs/guides/how-alk-works.md) and
67
67
  [project profile init](docs/reference/project-workflow-profile.md),
@@ -69,7 +69,7 @@ Continue with [task workflows](docs/guides/how-alk-works.md) and
69
69
  [Lifecycle task scenarios](docs/guides/lifecycle-cookbook.md). The [planning-only](docs/reference/planning-only-launch.md)
70
70
  and [qualified frozen-task](docs/reference/qualified-host-launch.md) guides define launch boundaries.
71
71
  See [System architecture](docs/architecture/system-architecture.md), [Project comparison](docs/reference/project-comparison.md),
72
- and [Документация на русском](docs/ru/README.md).
72
+ [context checkpoints](docs/reference/context-checkpoints.md), and [Документация на русском](docs/ru/README.md).
73
73
 
74
74
  ## What it gives you
75
75
  - A finish-oriented lifecycle: plan, execute, review, and prove the result.
@@ -39,7 +39,7 @@ and start a task with:
39
39
  agent-lifecycle start --adapter <adapter-id> --file task.md
40
40
  ```
41
41
 
42
- The published [PyPI package](https://pypi.org/project/agent-lifecycle-kit/) supports Python 3.11-3.14; install it with `python -m pip install agent-lifecycle-kit==1.63.2`.
42
+ The published [PyPI package](https://pypi.org/project/agent-lifecycle-kit/) supports Python 3.11-3.14; install it with `python -m pip install agent-lifecycle-kit==1.65.0`. The optional [thread bridge](docs/reference/optional-thread-bridge.md) imports adapter-owned thread results as non-authoritative context.
43
43
  Use [Quickstart](docs/guides/quickstart.md) for the first task and [Commands by task](docs/guides/commands-by-task.md) for detailed operations.
44
44
  Continue with [task workflows](docs/guides/how-alk-works.md) and
45
45
  [project profile init](docs/reference/project-workflow-profile.md),
@@ -47,7 +47,7 @@ Continue with [task workflows](docs/guides/how-alk-works.md) and
47
47
  [Lifecycle task scenarios](docs/guides/lifecycle-cookbook.md). The [planning-only](docs/reference/planning-only-launch.md)
48
48
  and [qualified frozen-task](docs/reference/qualified-host-launch.md) guides define launch boundaries.
49
49
  See [System architecture](docs/architecture/system-architecture.md), [Project comparison](docs/reference/project-comparison.md),
50
- and [Документация на русском](docs/ru/README.md).
50
+ [context checkpoints](docs/reference/context-checkpoints.md), and [Документация на русском](docs/ru/README.md).
51
51
 
52
52
  ## What it gives you
53
53
  - A finish-oriented lifecycle: plan, execute, review, and prove the result.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-lifecycle-kit"
7
- version = "1.63.2"
7
+ version = "1.65.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.63.2"
3
+ __version__ = "1.65.0"
@@ -32,6 +32,7 @@ def create_session(
32
32
  session_root: Path | None = None,
33
33
  state_identity: dict[str, Any] | None = None,
34
34
  managed_workflow_proof: dict[str, Any] | None = None,
35
+ context_checkpoint_policy: dict[str, Any] | None = None,
35
36
  ) -> dict[str, Any]:
36
37
  session_id = uuid.uuid4().hex
37
38
  session = {
@@ -46,6 +47,7 @@ def create_session(
46
47
  },
47
48
  "stateIdentity": state_identity,
48
49
  "managedWorkflowProof": managed_workflow_proof,
50
+ "contextCheckpointPolicy": context_checkpoint_policy,
49
51
  "secretValuesStored": False,
50
52
  "nativeConfigWritten": False,
51
53
  }
@@ -224,7 +224,7 @@ def _resume(*, adapter_id: str, session_id: str, session_root: Path | None) -> d
224
224
  requested_mode="auto",
225
225
  action="BLOCKED",
226
226
  input_summary=input_summary,
227
- delegate_summary=_resume_summary(receipt),
227
+ delegate_summary=_resume_summary(receipt, session=session),
228
228
  blockers=_blocker_summaries(receipt.get("blockers")),
229
229
  )
230
230
  return build_lifecycle_start_receipt(
@@ -233,7 +233,7 @@ def _resume(*, adapter_id: str, session_id: str, session_root: Path | None) -> d
233
233
  requested_mode="auto",
234
234
  action="RESUME",
235
235
  input_summary=input_summary,
236
- delegate_summary=_resume_summary(receipt),
236
+ delegate_summary=_resume_summary(receipt, session=session),
237
237
  lifecycle_coverage_claimed=status == "PASS" and bool(receipt.get("lifecycleCoverageClaimed")),
238
238
  )
239
239
 
@@ -997,8 +997,8 @@ def _task_summary(receipt: dict[str, Any]) -> dict[str, Any]:
997
997
  }
998
998
 
999
999
 
1000
- def _resume_summary(receipt: dict[str, Any]) -> dict[str, Any]:
1001
- return {
1000
+ def _resume_summary(receipt: dict[str, Any], *, session: dict[str, Any] | None = None) -> dict[str, Any]:
1001
+ summary = {
1002
1002
  "schemaVersion": receipt.get("schemaVersion"),
1003
1003
  "status": receipt.get("status"),
1004
1004
  "lineageStatus": receipt.get("lineageStatus"),
@@ -1006,6 +1006,9 @@ def _resume_summary(receipt: dict[str, Any]) -> dict[str, Any]:
1006
1006
  "lifecycleCoverageClaimed": bool(receipt.get("lifecycleCoverageClaimed")),
1007
1007
  "receiptDigest": receipt.get("receiptDigest"),
1008
1008
  }
1009
+ if session and isinstance(session.get("contextCheckpointPolicy"), dict):
1010
+ summary["contextCheckpointPolicy"] = session["contextCheckpointPolicy"]
1011
+ return summary
1009
1012
 
1010
1013
 
1011
1014
  def _claims_execution(receipt: dict[str, Any]) -> bool:
@@ -38,7 +38,7 @@ def dispatch(args: argparse.Namespace, remainder: list[str]) -> dict[str, Any] |
38
38
  return dispatch_contracts(args)
39
39
  if args.command in {"workflow", "audit", "runner"}:
40
40
  return dispatch_lifecycle(args)
41
- if args.command in {"report", "context", "goal", "model", "metrics"}:
41
+ if args.command in {"report", "context", "goal", "model", "metrics", "thread"}:
42
42
  return dispatch_observability(args)
43
43
  if args.command in {"tier", "specification", "plan", "task"}:
44
44
  return dispatch_planning(args)
@@ -7,8 +7,15 @@ from pathlib import Path
7
7
  from typing import Any
8
8
 
9
9
  from agent_lifecycle.context import check_context, load_context_profile, render_context
10
+ from agent_lifecycle.context.checkpoint_store import restore_context_checkpoint, write_context_checkpoint
11
+ from agent_lifecycle.context.checkpoints import build_context_checkpoint
10
12
  from agent_lifecycle.context.external_memory import build_episode_retrieval_with_external_context, import_external_memory_context
11
13
  from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object, write_json_create
14
+ from agent_lifecycle.host_protocol.thread_bridge import (
15
+ prepare_thread_context_import,
16
+ prepare_thread_request,
17
+ validate_thread_exchange,
18
+ )
12
19
  from agent_lifecycle.goal import build_goal_progress_view, build_objective_snapshot, update_goal_record, validate_goal_record
13
20
  from agent_lifecycle.metrics import (
14
21
  build_lifecycle_cost_summary,
@@ -58,9 +65,60 @@ def dispatch_observability(args: argparse.Namespace) -> dict[str, Any] | str:
58
65
  return _dispatch_model(args)
59
66
  if args.command == "metrics":
60
67
  return _dispatch_metrics(args)
68
+ if args.command == "thread":
69
+ return _dispatch_thread(args)
61
70
  raise LifecycleError("command-not-implemented", "observability command is not implemented")
62
71
 
63
72
 
73
+ def _dispatch_thread(args: argparse.Namespace) -> dict[str, Any]:
74
+ if args.thread_command == "request":
75
+ operation_id = args.operation_id or f"thread-{args.operation}"
76
+ scope = args.scope or ("project" if args.operation in {"list", "create"} else "explicit-target")
77
+ target: dict[str, Any] = {"scope": scope}
78
+ if args.target_hash:
79
+ target["targetHash"] = args.target_hash
80
+ payload = {"text": args.text} if args.text is not None else {}
81
+ request = prepare_thread_request(
82
+ operation=args.operation,
83
+ operation_id=operation_id,
84
+ target=target,
85
+ payload=payload,
86
+ idempotency_key=args.idempotency_key,
87
+ limits={"maxImportedBytes": args.max_bytes, "maxImportedTokens": args.max_tokens},
88
+ phase=args.phase,
89
+ )
90
+ write_json_create(Path(args.out), request)
91
+ return request
92
+ if args.thread_command == "import":
93
+ request = read_json_object(Path(args.request), label="thread operation request")
94
+ receipt = read_json_object(Path(args.receipt), label="thread operation receipt")
95
+ validation = validate_thread_exchange(request, receipt)
96
+ if validation["status"] != "PASS":
97
+ raise LifecycleError(
98
+ "thread-exchange-invalid",
99
+ "thread request and receipt lineage validation failed",
100
+ {"validation": validation},
101
+ )
102
+ limits = request.get("limits") if isinstance(request.get("limits"), dict) else {}
103
+ imported = prepare_thread_context_import(
104
+ operation_id=request["operationId"],
105
+ source_receipt_digest=receipt["receiptDigest"],
106
+ content=receipt.get("result", {}),
107
+ source={
108
+ "kind": "host-thread",
109
+ "sourceId": args.source_id or "redacted",
110
+ "citation": args.citation or "operator-provided",
111
+ "operation": request["operation"],
112
+ "status": receipt["status"],
113
+ },
114
+ max_imported_bytes=int(limits.get("maxImportedBytes", 32768)),
115
+ max_imported_tokens=int(limits.get("maxImportedTokens", 2048)),
116
+ )
117
+ write_json_create(Path(args.out), imported)
118
+ return imported
119
+ raise LifecycleError("command-not-implemented", "thread command is not implemented")
120
+
121
+
64
122
  def _dispatch_report(args: argparse.Namespace) -> dict[str, Any] | str:
65
123
  if args.report_command == "status-view":
66
124
  payload = build_status_view(
@@ -176,9 +234,75 @@ def _dispatch_context(args: argparse.Namespace) -> dict[str, Any]:
176
234
  if args.out:
177
235
  write_json_create(Path(args.out), payload)
178
236
  return payload
237
+ if args.context_command == "checkpoint":
238
+ return _dispatch_context_checkpoint(args)
239
+ if args.context_command == "restore":
240
+ state = read_json_object(Path(args.state), label="workflow state")
241
+ payload = restore_context_checkpoint(
242
+ Path(args.checkpoint),
243
+ state=state,
244
+ session_id=args.session,
245
+ target_tokens=args.target_tokens,
246
+ )
247
+ if args.out:
248
+ write_json_create(Path(args.out), payload)
249
+ if payload.get("status") == "BLOCKED":
250
+ raise LifecycleError(
251
+ "context-restore-blocked",
252
+ "context checkpoint cannot be restored against the current workflow state",
253
+ {"continuation": payload},
254
+ )
255
+ return payload
179
256
  raise LifecycleError("command-not-implemented", "context command is not implemented")
180
257
 
181
258
 
259
+ def _dispatch_context_checkpoint(args: argparse.Namespace) -> dict[str, Any]:
260
+ state = read_json_object(Path(args.state), label="workflow state")
261
+ manifest = read_json_object(Path(args.plan), label="context checkpoint plan")
262
+ input_payload = read_json_object(Path(args.input), label="context checkpoint input")
263
+ reason = str(args.reason)
264
+ mode = args.capture_mode
265
+ reason_mode = {
266
+ "native-hook": "NATIVE_HOOK",
267
+ "milestone": "MILESTONE",
268
+ "agent-requested": "AGENT_REQUESTED",
269
+ "unavailable": "UNAVAILABLE",
270
+ }.get(reason.lower().replace("_", "-"))
271
+ if mode is None and reason_mode:
272
+ mode = reason_mode
273
+ if mode is None:
274
+ mode = "AGENT_REQUESTED"
275
+ target = Path(args.out) if args.out else Path(".alk/context/checkpoints") / "checkpoint.json"
276
+ root = target.parent
277
+ _require_checkpoint_output_root(root)
278
+ summary = dict(input_payload)
279
+ capture_evidence = summary.pop("nativeHookEvidence", None) if mode == "NATIVE_HOOK" else None
280
+ checkpoint = build_context_checkpoint(
281
+ session_id=args.session,
282
+ run_id=str(state.get("runId", "run")),
283
+ adapter_id=str(args.adapter or input_payload.get("adapterId") or state.get("adapterId") or "unknown-adapter"),
284
+ package_id=str(manifest.get("package", {}).get("id") or state.get("packageId") or "unknown-package"),
285
+ plan_revision=int(manifest.get("planRevision", state.get("planRevision", 1))),
286
+ plan_digest=canonical_digest(manifest),
287
+ state_revision=int(state.get("stateRevision", 1)),
288
+ source_revision=str(state.get("sourceRevision", "unknown-source")),
289
+ capture_mode=mode,
290
+ reason=reason,
291
+ summary=summary,
292
+ capture_evidence=capture_evidence,
293
+ checkpoint_id=target.stem if args.out else None,
294
+ created_at=str(state.get("updatedAt") or "1970-01-01T00:00:00Z"),
295
+ )
296
+ stored = write_context_checkpoint(checkpoint, root=root)
297
+ return {**checkpoint, "storage": stored}
298
+
299
+
300
+ def _require_checkpoint_output_root(root: Path) -> None:
301
+ resolved = root.resolve()
302
+ if ".alk" not in resolved.parts or not resolved.name == "checkpoints":
303
+ raise LifecycleError("context-checkpoint-output-root-invalid", "checkpoint output must remain in a .alk/context/checkpoints directory")
304
+
305
+
182
306
  def _dispatch_goal(args: argparse.Namespace) -> dict[str, Any] | str:
183
307
  record = read_json_object(Path(args.record), label="goal record")
184
308
  if args.goal_command == "check":
@@ -38,6 +38,7 @@ def build_parser() -> argparse.ArgumentParser:
38
38
  _add_workflow_parser(subparsers)
39
39
  _add_audit_parser(subparsers)
40
40
  _add_context_parser(subparsers)
41
+ _add_thread_parser(subparsers)
41
42
  _add_goal_parser(subparsers)
42
43
  add_followup_parser(subparsers)
43
44
  add_worktree_parser(subparsers)
@@ -610,6 +611,47 @@ def _add_context_parser(subparsers: argparse._SubParsersAction[argparse.Argument
610
611
  episode_retrieve.add_argument("--max-external-context-hints", type=int, default=4)
611
612
  episode_retrieve.add_argument("--target-tokens", type=int, default=2048)
612
613
  episode_retrieve.add_argument("--out")
614
+ checkpoint = context_sub.add_parser("checkpoint", help="write a bounded context checkpoint")
615
+ checkpoint.add_argument("--session", required=True)
616
+ checkpoint.add_argument("--state", required=True)
617
+ checkpoint.add_argument("--plan", required=True)
618
+ checkpoint.add_argument("--input", required=True)
619
+ checkpoint.add_argument("--reason", required=True)
620
+ checkpoint.add_argument(
621
+ "--capture-mode",
622
+ choices=["NATIVE_HOOK", "MILESTONE", "AGENT_REQUESTED", "UNAVAILABLE"],
623
+ default=None,
624
+ )
625
+ checkpoint.add_argument("--adapter")
626
+ checkpoint.add_argument("--out")
627
+ restore = context_sub.add_parser("restore", help="restore a bounded context continuation")
628
+ restore.add_argument("--checkpoint", required=True)
629
+ restore.add_argument("--state", required=True)
630
+ restore.add_argument("--session")
631
+ restore.add_argument("--target-tokens", type=int, default=2048)
632
+ restore.add_argument("--out")
633
+
634
+
635
+ def _add_thread_parser(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) -> None:
636
+ thread = subparsers.add_parser("thread", help="prepare optional host-thread bridge artifacts")
637
+ thread_sub = thread.add_subparsers(dest="thread_command", required=True)
638
+ request = thread_sub.add_parser("request", help="prepare a bounded thread operation request")
639
+ request.add_argument("--operation", choices=["read", "list", "send", "create"], required=True)
640
+ request.add_argument("--operation-id")
641
+ request.add_argument("--scope", choices=["explicit-target", "project", "workflow"])
642
+ request.add_argument("--target-hash")
643
+ request.add_argument("--text")
644
+ request.add_argument("--idempotency-key")
645
+ request.add_argument("--phase")
646
+ request.add_argument("--max-bytes", type=int, default=32768)
647
+ request.add_argument("--max-tokens", type=int, default=2048)
648
+ request.add_argument("--out", required=True)
649
+ import_result = thread_sub.add_parser("import", help="validate a host receipt and import bounded context")
650
+ import_result.add_argument("--request", required=True)
651
+ import_result.add_argument("--receipt", required=True)
652
+ import_result.add_argument("--source-id")
653
+ import_result.add_argument("--citation")
654
+ import_result.add_argument("--out", required=True)
613
655
 
614
656
 
615
657
  def _add_goal_parser(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) -> None:
@@ -0,0 +1,47 @@
1
+ """Compact context rendering for small-context hosts."""
2
+
3
+ from agent_lifecycle.context.profiles import load_context_profile, validate_context_profile
4
+ from agent_lifecycle.context.rendering import check_context, render_context
5
+ from agent_lifecycle.context.checkpoints import (
6
+ build_context_checkpoint,
7
+ require_context_checkpoint_pass,
8
+ validate_context_checkpoint,
9
+ )
10
+ from agent_lifecycle.context.checkpoint_store import (
11
+ list_context_checkpoints,
12
+ load_context_checkpoint,
13
+ restore_context_checkpoint,
14
+ write_context_checkpoint,
15
+ )
16
+
17
+ __all__ = [
18
+ "build_episode_context",
19
+ "check_context",
20
+ "build_context_checkpoint",
21
+ "load_context_profile",
22
+ "list_context_checkpoints",
23
+ "load_context_checkpoint",
24
+ "render_context",
25
+ "restore_context_checkpoint",
26
+ "require_context_checkpoint_pass",
27
+ "validate_context_checkpoint",
28
+ "validate_context_profile",
29
+ "write_context_checkpoint",
30
+ "import_thread_context",
31
+ "build_thread_episode_context",
32
+ ]
33
+
34
+
35
+ def __getattr__(name: str):
36
+ if name == "build_episode_context":
37
+ from agent_lifecycle.context.episode_retrieval import build_episode_context
38
+
39
+ return build_episode_context
40
+ if name in {"import_thread_context", "build_thread_episode_context"}:
41
+ from agent_lifecycle.context.thread_bridge_context import build_thread_episode_context, import_thread_context
42
+
43
+ return {
44
+ "import_thread_context": import_thread_context,
45
+ "build_thread_episode_context": build_thread_episode_context,
46
+ }[name]
47
+ raise AttributeError(name)
@@ -0,0 +1,198 @@
1
+ """Contained local storage and bounded restoration for context checkpoints."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from pathlib import Path
7
+ from typing import Any
8
+
9
+ from agent_lifecycle.contracts import LifecycleError, canonical_bytes, canonical_digest, read_json_object
10
+ from agent_lifecycle.contracts.redaction import redact_value
11
+ from agent_lifecycle.context.checkpoints import (
12
+ CHECKPOINT_SCHEMA,
13
+ DEFAULT_MAX_CHECKPOINT_BYTES,
14
+ DEFAULT_TARGET_TOKENS,
15
+ require_context_checkpoint_pass,
16
+ validate_context_checkpoint,
17
+ )
18
+
19
+ DEFAULT_CHECKPOINT_ROOT = Path(".alk/context/checkpoints")
20
+ MAX_CHECKPOINTS_PER_RUN = 64
21
+
22
+
23
+ def checkpoint_path(checkpoint_id: str, *, root: Path | None = None) -> Path:
24
+ """Return a path contained by the configured checkpoint directory."""
25
+
26
+ if not isinstance(checkpoint_id, str) or not checkpoint_id or checkpoint_id in {".", ".."}:
27
+ raise LifecycleError("context-checkpoint-id-invalid", "checkpoint id is required")
28
+ if "/" in checkpoint_id or "\\" in checkpoint_id or "\x00" in checkpoint_id:
29
+ raise LifecycleError("context-checkpoint-id-invalid", "checkpoint id must be a single path component")
30
+ directory = root or DEFAULT_CHECKPOINT_ROOT
31
+ path = directory / f"{checkpoint_id}.json"
32
+ if not path.resolve().is_relative_to(directory.resolve()):
33
+ raise LifecycleError("context-checkpoint-path-escape", "checkpoint path escapes the checkpoint root")
34
+ return path
35
+
36
+
37
+ def write_context_checkpoint(
38
+ checkpoint: dict[str, Any],
39
+ *,
40
+ root: Path | None = None,
41
+ max_checkpoints_per_run: int = MAX_CHECKPOINTS_PER_RUN,
42
+ ) -> dict[str, Any]:
43
+ """Write a checkpoint once and retain only the latest bounded set per run."""
44
+
45
+ validation = validate_context_checkpoint(checkpoint)
46
+ require_context_checkpoint_pass(validation)
47
+ path = checkpoint_path(str(checkpoint["checkpointId"]), root=root)
48
+ path.parent.mkdir(parents=True, exist_ok=True)
49
+ data = canonical_bytes(checkpoint) + b"\n"
50
+ created = not path.exists()
51
+ if not created:
52
+ existing = read_json_object(path, label="existing context checkpoint")
53
+ if canonical_digest(existing) != canonical_digest(checkpoint):
54
+ raise LifecycleError("context-checkpoint-conflict", "checkpoint id already contains a different artifact")
55
+ else:
56
+ _write_atomic(path, data)
57
+ _retain_latest(path.parent, run_id=str(checkpoint["runId"]), limit=max_checkpoints_per_run)
58
+ return {
59
+ "status": "PASS",
60
+ "path": path.as_posix(),
61
+ "checkpointId": checkpoint["checkpointId"],
62
+ "checkpointDigest": checkpoint["checkpointDigest"],
63
+ "created": created,
64
+ "retentionPolicy": "retain-latest-with-explicit-delete",
65
+ "maxCheckpointsPerRun": max_checkpoints_per_run,
66
+ "productionPromotionClaimed": False,
67
+ }
68
+
69
+
70
+ def load_context_checkpoint(checkpoint_id: str, *, root: Path | None = None) -> dict[str, Any]:
71
+ return read_json_object(checkpoint_path(checkpoint_id, root=root), label="context checkpoint")
72
+
73
+
74
+ def list_context_checkpoints(*, root: Path | None = None, run_id: str | None = None) -> list[dict[str, Any]]:
75
+ directory = (root or DEFAULT_CHECKPOINT_ROOT).resolve()
76
+ if not directory.exists():
77
+ return []
78
+ if not directory.is_dir():
79
+ raise LifecycleError("context-checkpoint-root-invalid", "checkpoint root is not a directory")
80
+ result: list[dict[str, Any]] = []
81
+ for path in sorted(directory.glob("*.json")):
82
+ if not path.resolve().is_relative_to(directory):
83
+ raise LifecycleError("context-checkpoint-path-escape", "checkpoint listing escaped the checkpoint root")
84
+ value = read_json_object(path, label="context checkpoint")
85
+ if run_id is None or value.get("runId") == run_id:
86
+ result.append(value)
87
+ return sorted(result, key=lambda item: (str(item.get("createdAt", "")), str(item.get("checkpointId", ""))))
88
+
89
+
90
+ def restore_context_checkpoint(
91
+ checkpoint_path_value: Path,
92
+ *,
93
+ state: dict[str, Any],
94
+ session_id: str | None = None,
95
+ target_tokens: int = DEFAULT_TARGET_TOKENS,
96
+ max_checkpoint_bytes: int = DEFAULT_MAX_CHECKPOINT_BYTES,
97
+ ) -> dict[str, Any]:
98
+ """Return a bounded continuation packet after checking current lineage."""
99
+
100
+ checkpoint = read_json_object(checkpoint_path_value, label="context checkpoint")
101
+ expected = _lineage_from_state(state, session_id=session_id)
102
+ validation = validate_context_checkpoint(
103
+ checkpoint,
104
+ expected_lineage=expected,
105
+ max_checkpoint_bytes=max_checkpoint_bytes,
106
+ target_tokens=target_tokens,
107
+ )
108
+ if validation["status"] == "FAIL":
109
+ return {
110
+ "schemaVersion": "agent-context-continuation.v1",
111
+ "status": "BLOCKED",
112
+ "checkpointId": checkpoint.get("checkpointId"),
113
+ "validation": validation,
114
+ "implementationAuthorized": False,
115
+ "proofAuthority": "none",
116
+ "productionPromotionClaimed": False,
117
+ }
118
+ summary, redaction_applied = redact_value(checkpoint["summary"])
119
+ if redaction_applied:
120
+ return {
121
+ "schemaVersion": "agent-context-continuation.v1",
122
+ "status": "BLOCKED",
123
+ "checkpointId": checkpoint.get("checkpointId"),
124
+ "validation": {
125
+ **validation,
126
+ "status": "FAIL",
127
+ "blockers": [{"code": "context-restore-unredacted-sensitive-input"}],
128
+ },
129
+ "implementationAuthorized": False,
130
+ "proofAuthority": "none",
131
+ "productionPromotionClaimed": False,
132
+ }
133
+ continuation = {
134
+ "schemaVersion": "agent-context-continuation.v1",
135
+ "status": "PASS",
136
+ "checkpointId": checkpoint["checkpointId"],
137
+ "checkpointDigest": checkpoint["checkpointDigest"],
138
+ "lineage": {
139
+ key: checkpoint[key]
140
+ for key in ("sessionId", "runId", "adapterId", "packageId", "planRevision", "planDigest", "stateRevision", "sourceRevision")
141
+ },
142
+ "captureMode": checkpoint["captureMode"],
143
+ "summary": summary,
144
+ "referencedArtifacts": checkpoint["referencedArtifacts"],
145
+ "implementationAuthorized": False,
146
+ "proofAuthority": "none",
147
+ "contextLimits": {"targetTokens": target_tokens, "maxBytes": max_checkpoint_bytes},
148
+ "validationDigest": validation["validationDigest"],
149
+ "productionPromotionClaimed": False,
150
+ }
151
+ continuation["continuationDigest"] = canonical_digest(continuation)
152
+ if (len(canonical_bytes(continuation)) + 3) // 4 > target_tokens * 2:
153
+ return {
154
+ "schemaVersion": "agent-context-continuation.v1",
155
+ "status": "BLOCKED",
156
+ "checkpointId": checkpoint.get("checkpointId"),
157
+ "validation": {
158
+ **validation,
159
+ "status": "FAIL",
160
+ "blockers": [{"code": "context-restore-token-limit"}],
161
+ },
162
+ "implementationAuthorized": False,
163
+ "proofAuthority": "none",
164
+ "productionPromotionClaimed": False,
165
+ }
166
+ return continuation
167
+
168
+
169
+ def _lineage_from_state(state: dict[str, Any], *, session_id: str | None) -> dict[str, Any]:
170
+ fields = ("runId", "packageId", "planRevision", "planDigest", "stateRevision", "sourceRevision")
171
+ expected = {key: state.get(key) for key in fields if key in state}
172
+ if session_id is not None:
173
+ expected["sessionId"] = session_id
174
+ return expected
175
+
176
+
177
+ def _retain_latest(directory: Path, *, run_id: str, limit: int) -> None:
178
+ if not isinstance(limit, int) or limit < 1 or limit > MAX_CHECKPOINTS_PER_RUN:
179
+ raise LifecycleError("context-checkpoint-retention-invalid", "retention limit must be between 1 and 64")
180
+ items = list_context_checkpoints(root=directory, run_id=run_id)
181
+ for item in items[:-limit]:
182
+ path = checkpoint_path(str(item["checkpointId"]), root=directory)
183
+ if path.resolve().is_relative_to(directory.resolve()):
184
+ path.unlink()
185
+
186
+
187
+ def _write_atomic(path: Path, data: bytes) -> None:
188
+ temporary = path.with_name(f".{path.name}.{os.getpid()}.tmp")
189
+ flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
190
+ try:
191
+ with os.fdopen(os.open(temporary, flags, 0o644), "wb") as handle:
192
+ handle.write(data)
193
+ handle.flush()
194
+ os.fsync(handle.fileno())
195
+ os.replace(temporary, path)
196
+ finally:
197
+ if temporary.exists():
198
+ temporary.unlink()