agent-lifecycle-kit 2.19.0__tar.gz → 2.21.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.
- {agent_lifecycle_kit-2.19.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.21.0}/PKG-INFO +3 -3
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/README.md +2 -2
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/pyproject.toml +1 -1
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/_version.py +1 -1
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/journal.py +72 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/external_jobs.py +406 -9
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +8 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +97 -14
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +20 -7
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/adapter_sessions/process_admission.py +386 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/qualification.py +67 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/changesets/snapshot.py +124 -24
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/adapter.py +26 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_adapters.py +4 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +43 -4
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_metrics.py +16 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_observability.py +3 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +10 -354
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/main.py +36 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/metrics_parser.py +4 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/parsers.py +7 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/compiler/task_packets.py +97 -9
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/contracts/display_identity.py +33 -0
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/contracts/execution_target.py +206 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/external_job_schemas.py +56 -0
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/contracts/preparation_policy.py +241 -0
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/contracts/release_accounting_schemas.py +315 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +4 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_economics_schemas.py +241 -0
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/metrics/command_resources.py +305 -0
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/metrics/goal_progress.py +231 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/phase_resources.py +37 -4
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/release_accounting.py +26 -4
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/workflow_economics.py +44 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/change_summary.py +34 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/contracts.py +70 -1
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/review_mesh/preflight.py +124 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/results.py +51 -1
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/continuation.py +14 -2
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/continuation_batch.py +16 -0
- agent_lifecycle_kit-2.21.0/src/agent_lifecycle/workflow/initialization.py +510 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/next_action.py +75 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/operation_kernel.py +46 -1
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/plan_adoption.py +104 -97
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +3 -3
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +7 -0
- agent_lifecycle_kit-2.19.0/src/agent_lifecycle/contracts/release_accounting_schemas.py +0 -123
- agent_lifecycle_kit-2.19.0/src/agent_lifecycle/workflow/initialization.py +0 -129
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/LICENSE +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/NOTICE +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/README.md +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/manifest.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/setup.cfg +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/__main__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/closing_resource_admission.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/closing_resource_policy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/closing_resource_recovery.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/closing_resources.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/contracts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/declared_ledger.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/declared_ledger_legacy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/declared_ledger_records.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/host_bridge.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/input_fit.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/normalization.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/opening_balances.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/profile_schema.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/source_usage_context.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/support_profiles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/workflow_authority_store.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/workflow_state_store.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/workflow_store.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/attempt_authority.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/bootstrap_r11.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/codex_exact_prompt.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/codex_input_diagnostics.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/codex_prompt_preparation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/codex_source_exposure.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/codex_source_subject.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/external_check.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/immutable_input.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/input_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/lifecycle_control.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/limited_native_evidence.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/managed_process.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/ordinary_audit.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/private_input.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_contracts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_history.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_inputs.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_preparation_records.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_roles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_shards.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_support.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/source_review_transcript.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/windows_pipe.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/adapter_sessions/worktree_identity.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/delta.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/domain_language.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/external_checks.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/implementation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/ownership.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/package.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/audit/security_analysis.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/changesets/git.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/changesets/git_io.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/command_registry.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_audit.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_planning.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/errors.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/followup.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/observability_parsers.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/plan_lock_commands.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/planning_parsers.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/policy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/project.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/research.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/start.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/strategy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/workflow_task_parsers.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/cli/worktree.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/compiler/output_contract.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/compiler/phase_packets.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/checkpoint_store.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/external_memory.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/profiles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/rendering.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/artifact_authoring_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/authority_io.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/authority_text.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/bounded_json.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/closing_resource_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/closing_window_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/deadline_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/deadlines.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/domain_language.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/domain_language_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/ed25519.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/errors.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/evidence_receipt_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/external_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/finding_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/immutable_input_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/independent_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/legacy_runner_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/lifecycle_action_catalog.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/lifecycle_control_definitions.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/lifecycle_control_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/lifecycle_control_validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/model_classes.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/multi_run_view_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/ownership_paths.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/paths.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/performance_limits.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/phase_packet_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/plan_manifest_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/private_storage.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/process_lock.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/public_locators.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/review_round_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/reviewer_identity_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/scoped_usage_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/security_analysis_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/statistical_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/structured_result_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/validation_ladder_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/windows_security.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_artifact_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_authority.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_authority_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_authorization_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_continuation_batch_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_continuation_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_run_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/contracts/workflow_state_schemas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/external-checks/declared-dependencies.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/external-checks/import-boundaries.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/external-checks/module-dependencies.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/quick-change.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/research-review.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/followup/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/followup/records.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/freeze/locks.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/goal/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/goal/records.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/goal/view.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/external_jobs.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/lifecycle_control.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/lifecycle_control_qualification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/lifecycle_gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/opencode_compatibility.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/structured_results.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/planning.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/security_findings.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/audit_efficiency.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/costs.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/migration/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/migration/legacy_runner.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/ed25519.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/git_objects.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/matching.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/scanner.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/completeness.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/continuity.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/deltas.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/manifest_contract.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/prerequisites.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/templates.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/tiering.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/traceability.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/planning/verification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/apply.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/proposals.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/domain_language.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/guidance.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/merge.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/presets.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/principles.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/project/profile.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/py.typed +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/dependency_impact.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/external_checks.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/packs.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/security_analysis.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/quality/validation_ladder.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/attention.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/multi_run.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/research/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/research/evidence.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/research/provenance.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/research/validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/resources.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review/provenance.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review/validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/independence.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/review_mesh/validation_helpers.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/runner/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/runner/core.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/specification/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/specification/validation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/artifact_builders.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/audit_evidence.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/authorization.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/closing_policy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/closing_window.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/controller.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/deadline_guards.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/events.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/gates.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/immutable_input.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/leases.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/limited_usage.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/query.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/run.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/state.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/task_outcomes.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/task_start.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/transactions.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/workflow/transition_contract.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
- {agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle_kit.egg-info/top_level.txt +0 -0
{agent_lifecycle_kit-2.19.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.21.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-lifecycle-kit
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.21.0
|
|
4
4
|
Summary: Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion.
|
|
5
5
|
Author: Agent Lifecycle Kit contributors
|
|
6
6
|
License: Apache-2.0
|
|
@@ -41,9 +41,9 @@ and secret handling stay in adapters or host-local profiles.
|
|
|
41
41
|
ALK provides a verifiable finish for external-agent work with proportionate control. It adds only the checks and evidence needed for the task; most of the time remains for research, implementation and product verification.
|
|
42
42
|
|
|
43
43
|
## Quick start
|
|
44
|
-
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
|
|
44
|
+
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.21 adds [command accounting, bounded preparation and response recovery](docs/reference/source-native-workflow-accounting.md). Release 2.20 adds [target-bound initialization](docs/reference/cli.md#release-220-composed-initialization-and-digest-display), [bounded local continuation](docs/reference/workflow-continuation.md) and batched Git snapshots. Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
|
|
45
45
|
|
|
46
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.
|
|
46
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.21.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
|
|
47
47
|
|
|
48
48
|
For a quick start, run:
|
|
49
49
|
|
|
@@ -19,9 +19,9 @@ and secret handling stay in adapters or host-local profiles.
|
|
|
19
19
|
ALK provides a verifiable finish for external-agent work with proportionate control. It adds only the checks and evidence needed for the task; most of the time remains for research, implementation and product verification.
|
|
20
20
|
|
|
21
21
|
## Quick start
|
|
22
|
-
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
|
|
22
|
+
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.21 adds [command accounting, bounded preparation and response recovery](docs/reference/source-native-workflow-accounting.md). Release 2.20 adds [target-bound initialization](docs/reference/cli.md#release-220-composed-initialization-and-digest-display), [bounded local continuation](docs/reference/workflow-continuation.md) and batched Git snapshots. Release 2.19 adds [safe artifact authoring and planning preflight](docs/reference/safe-artifact-authoring.md), [bounded review handoff](docs/reference/review-mesh.md#bounded-review-handoff) and thin skills with complete references. Release 2.18 bounds process/Git diagnostics, hardens signing and distinguishes OpenCode 1.x/2.x compatibility ([adapter notes](docs/adapters/opencode.md)); 2.17 strengthens [workflow validation and recovery](docs/reference/workflow-completeness.md). Release 2.16 introduced cumulative accounting within verified host capabilities; see [retention maintenance](docs/operations/retention-maintenance.md).
|
|
23
23
|
|
|
24
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.
|
|
24
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.21.0`, and common `agent-lifecycle version` errors. See [2.15 migration notes](docs/reference/cli.md#migrating-authority-artifacts-to-215) and [authority boundaries](docs/reference/authority-artifact-boundaries.md).
|
|
25
25
|
|
|
26
26
|
For a quick start, run:
|
|
27
27
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-lifecycle-kit"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.21.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"
|
{agent_lifecycle_kit-2.19.0 → agent_lifecycle_kit-2.21.0}/src/agent_lifecycle/accounting/journal.py
RENAMED
|
@@ -356,6 +356,78 @@ class Journal(
|
|
|
356
356
|
for row in self._db.execute("SELECT * FROM events WHERE scope=? ORDER BY revision,ordinal", (scope,))
|
|
357
357
|
]
|
|
358
358
|
|
|
359
|
+
def bounded_prefix(
|
|
360
|
+
self,
|
|
361
|
+
scope: str,
|
|
362
|
+
*,
|
|
363
|
+
expected_revision: int,
|
|
364
|
+
boundary: tuple[int, int],
|
|
365
|
+
max_rows: int,
|
|
366
|
+
max_bytes: int,
|
|
367
|
+
) -> dict:
|
|
368
|
+
"""Read a complete current prefix; size checks precede payload loading.
|
|
369
|
+
|
|
370
|
+
This adds no event, schema or authority. Closed/compacted or incomplete
|
|
371
|
+
histories cannot qualify as an empty initial preparation history.
|
|
372
|
+
"""
|
|
373
|
+
identity(scope)
|
|
374
|
+
uint(expected_revision)
|
|
375
|
+
if (
|
|
376
|
+
type(max_rows) is not int
|
|
377
|
+
or not 1 <= max_rows <= 4096
|
|
378
|
+
or type(max_bytes) is not int
|
|
379
|
+
or not 1 <= max_bytes <= 16 * 1024 * 1024
|
|
380
|
+
or type(boundary) is not tuple
|
|
381
|
+
or len(boundary) != 2
|
|
382
|
+
or any(type(v) is not int or v < 0 for v in boundary)
|
|
383
|
+
):
|
|
384
|
+
raise ValueError("Invalid bounded prefix limits or boundary")
|
|
385
|
+
with self._transaction(scope):
|
|
386
|
+
row = self._db.execute("SELECT revision FROM scope_state WHERE scope=?", (scope,)).fetchone()
|
|
387
|
+
if row is None:
|
|
388
|
+
raise JournalUnavailable("Complete scope prefix unavailable")
|
|
389
|
+
if row[0] != expected_revision:
|
|
390
|
+
raise RevisionConflict("Prefix revision changed")
|
|
391
|
+
metadata = self._db.execute(
|
|
392
|
+
"SELECT revision,ordinal,"
|
|
393
|
+
"length(CAST(payload AS BLOB))+length(CAST(writer AS BLOB))+"
|
|
394
|
+
"length(CAST(event_id AS BLOB))+length(CAST(scope AS BLOB))+"
|
|
395
|
+
"length(CAST(transaction_id AS BLOB))+length(CAST(kind AS BLOB))+"
|
|
396
|
+
"length(CAST(digest AS BLOB))+"
|
|
397
|
+
"length(CAST(observed_at AS BLOB)) AS bytes "
|
|
398
|
+
"FROM events WHERE scope=? ORDER BY revision,ordinal LIMIT ?",
|
|
399
|
+
(scope, max_rows + 1),
|
|
400
|
+
).fetchall()
|
|
401
|
+
if (
|
|
402
|
+
len(metadata) > max_rows
|
|
403
|
+
or sum(item["bytes"] for item in metadata) > max_bytes
|
|
404
|
+
or not metadata
|
|
405
|
+
or len(metadata) != expected_revision
|
|
406
|
+
or any(item["revision"] != index or item["ordinal"] != 0 for index, item in enumerate(metadata, 1))
|
|
407
|
+
or boundary != (metadata[-1]["revision"], metadata[-1]["ordinal"])
|
|
408
|
+
):
|
|
409
|
+
raise JournalUnavailable("Prefix incomplete or exceeds limits")
|
|
410
|
+
events = [
|
|
411
|
+
dict(item)
|
|
412
|
+
for item in self._db.execute(
|
|
413
|
+
"SELECT * FROM events WHERE scope=? ORDER BY revision,ordinal",
|
|
414
|
+
(scope,),
|
|
415
|
+
)
|
|
416
|
+
]
|
|
417
|
+
if any(hashlib.sha256(item["payload"].encode("utf-8")).hexdigest() != item["digest"] for item in events):
|
|
418
|
+
raise JournalUnavailable("Prefix payload integrity unavailable")
|
|
419
|
+
body = {
|
|
420
|
+
"schemaVersion": "agent-journal-bounded-prefix.v1",
|
|
421
|
+
"scope": scope,
|
|
422
|
+
"revision": expected_revision,
|
|
423
|
+
"boundary": list(boundary),
|
|
424
|
+
"complete": True,
|
|
425
|
+
"rowCount": len(events),
|
|
426
|
+
"utf8Bytes": sum(item["bytes"] for item in metadata),
|
|
427
|
+
"events": events,
|
|
428
|
+
}
|
|
429
|
+
return {**body, "prefixDigest": digest(body)}
|
|
430
|
+
|
|
359
431
|
def _source_preflight(self, receipt: dict) -> None:
|
|
360
432
|
self._check_observed(
|
|
361
433
|
{
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import copy
|
|
5
6
|
import hashlib
|
|
6
7
|
import os
|
|
7
8
|
import stat
|
|
@@ -16,16 +17,30 @@ from typing import Any
|
|
|
16
17
|
from agent_lifecycle.adapter_sessions.process import run_process
|
|
17
18
|
from agent_lifecycle.adapter_sessions.session_store import session_path
|
|
18
19
|
from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
|
|
20
|
+
from agent_lifecycle.contracts.authority_io import create_authority_bytes
|
|
21
|
+
from agent_lifecycle.contracts.canonical import canonical_bytes, require_private_file
|
|
19
22
|
from agent_lifecycle.contracts.external_job_schemas import (
|
|
20
23
|
TERMINAL_JOB_STATES,
|
|
21
24
|
build_external_job_artifact,
|
|
25
|
+
build_external_job_request,
|
|
22
26
|
build_external_job_result,
|
|
23
27
|
build_external_job_status,
|
|
24
28
|
require_external_job_pass,
|
|
25
29
|
validate_external_job_request,
|
|
30
|
+
validate_external_job_result,
|
|
31
|
+
validate_external_job_status,
|
|
26
32
|
)
|
|
33
|
+
from agent_lifecycle.contracts.paths import read_stable_repository_file
|
|
27
34
|
from agent_lifecycle.contracts.persistence import create_private_json, require_private_json
|
|
28
|
-
from agent_lifecycle.contracts.
|
|
35
|
+
from agent_lifecycle.contracts.preparation_policy import (
|
|
36
|
+
REVIEW_PREFLIGHT_FIELDS,
|
|
37
|
+
PreparationAdmission,
|
|
38
|
+
review_invocation_digest,
|
|
39
|
+
)
|
|
40
|
+
from agent_lifecycle.contracts.process_execution_schemas import (
|
|
41
|
+
validate_process_execution_receipt,
|
|
42
|
+
)
|
|
43
|
+
from agent_lifecycle.contracts.redaction import redact_text, redact_value
|
|
29
44
|
from agent_lifecycle.host_protocol.external_jobs import validate_external_job_transition
|
|
30
45
|
|
|
31
46
|
DEFAULT_EXTERNAL_JOB_ROOT = ".alk/external-jobs"
|
|
@@ -78,26 +93,94 @@ def run_external_job(
|
|
|
78
93
|
process_runner: ProcessRunner = run_process,
|
|
79
94
|
now: Clock | None = None,
|
|
80
95
|
post_terminal_quiet_seconds: float = 0.05,
|
|
96
|
+
preparation: PreparationAdmission | None = None,
|
|
97
|
+
review_preflight: Callable[[], dict[str, Any]] | None = None,
|
|
98
|
+
recover_existing: bool = False,
|
|
99
|
+
stdin_text: str | None = None,
|
|
81
100
|
) -> dict[str, Any]:
|
|
82
101
|
"""Execute one adapter-owned process and persist an immutable attempt record."""
|
|
83
102
|
|
|
84
103
|
require_external_job_pass(validate_external_job_request(request), "request")
|
|
85
104
|
_require_portable_request_metadata(request)
|
|
105
|
+
if (
|
|
106
|
+
recover_existing
|
|
107
|
+
and external_job_attempt_path(
|
|
108
|
+
request,
|
|
109
|
+
job_root=job_root,
|
|
110
|
+
).exists()
|
|
111
|
+
):
|
|
112
|
+
return recover_external_job_attempt(request, job_root=job_root)
|
|
86
113
|
if not argv or not all(isinstance(item, str) and item and "\x00" not in item for item in argv):
|
|
87
114
|
raise LifecycleError("external-job-argv-invalid", "external job argv must be a non-empty string list")
|
|
88
115
|
limits = request["limits"]
|
|
89
116
|
_require_usage_bound(cost_micros, limits["maxCostMicros"], "costMicros")
|
|
90
117
|
_require_usage_bound(reported_tokens, limits["maxReportedTokens"], "reportedTokens")
|
|
91
118
|
children = _validated_children(request, child_requests or [])
|
|
119
|
+
preflight_receipt = None
|
|
120
|
+
if review_preflight is not None:
|
|
121
|
+
# The callback cannot replace the invocation while qualifying it.
|
|
122
|
+
request, argv, env = copy.deepcopy(request), list(argv), dict(env)
|
|
123
|
+
cwd = (cwd or Path.cwd()).resolve()
|
|
124
|
+
preflight_receipt = _require_review_preflight(
|
|
125
|
+
review_preflight,
|
|
126
|
+
request=request,
|
|
127
|
+
argv=argv,
|
|
128
|
+
cwd=cwd,
|
|
129
|
+
stdin_text=stdin_text,
|
|
130
|
+
)
|
|
131
|
+
if preparation is not None:
|
|
132
|
+
_require_prior_job_settled(
|
|
133
|
+
request,
|
|
134
|
+
job_root=job_root,
|
|
135
|
+
preparation=preparation,
|
|
136
|
+
)
|
|
137
|
+
preparation.check(repository_root=cwd or Path.cwd())
|
|
92
138
|
context = _prepare_external_job(request, children, job_root=job_root, now=now)
|
|
139
|
+
if preflight_receipt is not None:
|
|
140
|
+
create_private_json(
|
|
141
|
+
context.attempt_root / "review-preflight.json",
|
|
142
|
+
preflight_receipt,
|
|
143
|
+
)
|
|
93
144
|
invocation_started_ns = time.monotonic_ns()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
145
|
+
|
|
146
|
+
def invoke() -> tuple[dict[str, Any], threading.Event]:
|
|
147
|
+
if preparation is not None:
|
|
148
|
+
_require_prior_job_settled(
|
|
149
|
+
request,
|
|
150
|
+
job_root=job_root,
|
|
151
|
+
preparation=preparation,
|
|
152
|
+
)
|
|
153
|
+
if review_preflight is not None:
|
|
154
|
+
current_preflight = _require_review_preflight(
|
|
155
|
+
review_preflight,
|
|
156
|
+
request=request,
|
|
157
|
+
argv=argv,
|
|
158
|
+
cwd=cwd or Path.cwd(),
|
|
159
|
+
stdin_text=stdin_text,
|
|
160
|
+
)
|
|
161
|
+
if current_preflight != preflight_receipt:
|
|
162
|
+
raise LifecycleError(
|
|
163
|
+
"REVIEW_PREFLIGHT_UNAVAILABLE",
|
|
164
|
+
"Review qualification changed",
|
|
165
|
+
)
|
|
166
|
+
return _invoke_external_job_process(
|
|
167
|
+
context,
|
|
168
|
+
argv,
|
|
169
|
+
env=env,
|
|
170
|
+
cwd=cwd,
|
|
171
|
+
cancel_event=cancel_event,
|
|
172
|
+
process_runner=process_runner,
|
|
173
|
+
stdin_text=stdin_text,
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
process, local_cancel = (
|
|
177
|
+
preparation.invoke(
|
|
178
|
+
invoke,
|
|
179
|
+
input_digest=request["requestDigest"],
|
|
180
|
+
repository_root=cwd or Path.cwd(),
|
|
181
|
+
)
|
|
182
|
+
if preparation is not None
|
|
183
|
+
else invoke()
|
|
101
184
|
)
|
|
102
185
|
observed_elapsed_ms = max(0, (time.monotonic_ns() - invocation_started_ns) // 1_000_000)
|
|
103
186
|
return _finalize_external_job(
|
|
@@ -113,6 +196,290 @@ def run_external_job(
|
|
|
113
196
|
)
|
|
114
197
|
|
|
115
198
|
|
|
199
|
+
def _require_review_preflight(
|
|
200
|
+
check: Callable[[], dict[str, Any]],
|
|
201
|
+
*,
|
|
202
|
+
request: dict[str, Any],
|
|
203
|
+
argv: list[str],
|
|
204
|
+
cwd: Path,
|
|
205
|
+
stdin_text: str | None,
|
|
206
|
+
) -> dict[str, Any]:
|
|
207
|
+
try:
|
|
208
|
+
if not isinstance(stdin_text, str):
|
|
209
|
+
raise ValueError("Qualified STDIN delivery required")
|
|
210
|
+
expected = review_invocation_digest(
|
|
211
|
+
request=request,
|
|
212
|
+
argv=argv,
|
|
213
|
+
root_digest=canonical_digest(str(cwd.resolve())),
|
|
214
|
+
rendered_input=stdin_text.encode("utf-8"),
|
|
215
|
+
)
|
|
216
|
+
receipt = check()
|
|
217
|
+
if set(receipt) != REVIEW_PREFLIGHT_FIELDS:
|
|
218
|
+
raise ValueError("Closed portable preflight required")
|
|
219
|
+
body = {k: v for k, v in receipt.items() if k != "preflightDigest"}
|
|
220
|
+
if (
|
|
221
|
+
receipt.get("status") != "PASS"
|
|
222
|
+
or receipt.get("requestDigest") != request["requestDigest"]
|
|
223
|
+
or receipt.get("sourceSnapshotDigest") != request["sourceSnapshotDigest"]
|
|
224
|
+
or receipt.get("invocationDigest") != expected
|
|
225
|
+
or receipt.get("preflightDigest") != canonical_digest(body)
|
|
226
|
+
or receipt.get("schemaVersion") != "agent-reviewer-preflight.v1"
|
|
227
|
+
or receipt.get("reason") != "READY"
|
|
228
|
+
or receipt.get("authorityClaimed") is not False
|
|
229
|
+
or receipt.get("productionPromotionClaimed") is not False
|
|
230
|
+
or type(receipt.get("modelCalls")) is not int
|
|
231
|
+
or receipt["modelCalls"] != 0
|
|
232
|
+
or not isinstance(receipt.get("packetDigest"), str)
|
|
233
|
+
or len(receipt["packetDigest"]) != 64
|
|
234
|
+
or any(v not in "0123456789abcdef" for v in receipt["packetDigest"])
|
|
235
|
+
):
|
|
236
|
+
raise ValueError("Qualified actual invocation required")
|
|
237
|
+
return dict(receipt)
|
|
238
|
+
except (ValueError, KeyError, TypeError, LifecycleError) as exc:
|
|
239
|
+
raise LifecycleError(
|
|
240
|
+
"REVIEW_PREFLIGHT_UNAVAILABLE",
|
|
241
|
+
"Qualified reviewer input required",
|
|
242
|
+
) from exc
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _require_prior_job_settled(
|
|
246
|
+
request: dict[str, Any],
|
|
247
|
+
*,
|
|
248
|
+
job_root: Path | None,
|
|
249
|
+
preparation: PreparationAdmission,
|
|
250
|
+
) -> None:
|
|
251
|
+
"""Generation retry defaults to zero on selected preparation routes."""
|
|
252
|
+
if request["attempt"] <= 1:
|
|
253
|
+
return
|
|
254
|
+
root = external_job_attempt_path(request, job_root=job_root).parent
|
|
255
|
+
previous = root / ("attempt-" + str(request["attempt"] - 1))
|
|
256
|
+
try:
|
|
257
|
+
prior_request = _load_private_json(previous / "request.json", "prior request")
|
|
258
|
+
if any(prior_request[k] != value for k, value in request.items() if k not in {"attempt", "requestDigest"}):
|
|
259
|
+
raise ValueError("Immutable review subject changed")
|
|
260
|
+
prior = load_external_job_attempt(prior_request, job_root=job_root)
|
|
261
|
+
status, result, process = (
|
|
262
|
+
prior["jobStatus"],
|
|
263
|
+
prior["result"],
|
|
264
|
+
prior["processReceipt"],
|
|
265
|
+
)
|
|
266
|
+
require_external_job_pass(
|
|
267
|
+
validate_external_job_status(status, request=prior_request),
|
|
268
|
+
"status",
|
|
269
|
+
)
|
|
270
|
+
require_external_job_pass(
|
|
271
|
+
validate_external_job_result(
|
|
272
|
+
result,
|
|
273
|
+
request=prior_request,
|
|
274
|
+
status=status,
|
|
275
|
+
),
|
|
276
|
+
"result",
|
|
277
|
+
)
|
|
278
|
+
if (
|
|
279
|
+
status["state"] != "FAILED"
|
|
280
|
+
or result["complete"] is not False
|
|
281
|
+
or result["outputBytes"] != 0
|
|
282
|
+
or not isinstance(process, dict)
|
|
283
|
+
or validate_process_execution_receipt(process)["status"] != "PASS"
|
|
284
|
+
or process["exitCode"] != 75
|
|
285
|
+
or process["timedOut"] is not False
|
|
286
|
+
or process["cancelled"] is not False
|
|
287
|
+
or process["cleanup"]["status"] != "PASS"
|
|
288
|
+
):
|
|
289
|
+
raise ValueError("No settled bounded transient failure")
|
|
290
|
+
preparation.check_retry(
|
|
291
|
+
prior_request_digest=prior_request["requestDigest"],
|
|
292
|
+
prior_result_digest=result["resultDigest"],
|
|
293
|
+
retry_ordinal=request["attempt"] - 1,
|
|
294
|
+
)
|
|
295
|
+
except (OSError, TypeError, ValueError, KeyError, LifecycleError) as exc:
|
|
296
|
+
raise LifecycleError(
|
|
297
|
+
"REVIEW_ROUTE_SUSPENDED",
|
|
298
|
+
"Recover/resolve the original attempt first",
|
|
299
|
+
) from exc
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def recover_external_job_attempt(
|
|
303
|
+
request: dict[str, Any],
|
|
304
|
+
*,
|
|
305
|
+
job_root: Path | None = None,
|
|
306
|
+
) -> dict[str, Any]:
|
|
307
|
+
"""Retrieve the same complete response without generation or new usage."""
|
|
308
|
+
try:
|
|
309
|
+
return _recover_complete_attempt(request, job_root=job_root)
|
|
310
|
+
except (OSError, ValueError, KeyError, TypeError, LifecycleError) as exc:
|
|
311
|
+
reason = "REVIEW_RECOVERY_INVALID"
|
|
312
|
+
if isinstance(exc, LifecycleError) and exc.code in {
|
|
313
|
+
"REVIEW_REMOTE_UNRESOLVED",
|
|
314
|
+
"REVIEW_ROUTE_SUSPENDED",
|
|
315
|
+
"REVIEW_RESPONSE_UNAVAILABLE",
|
|
316
|
+
}:
|
|
317
|
+
reason = exc.code
|
|
318
|
+
raise LifecycleError(reason, "Complete reusable response unavailable") from exc
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def _recover_complete_attempt(
|
|
322
|
+
request: dict[str, Any],
|
|
323
|
+
*,
|
|
324
|
+
job_root: Path | None,
|
|
325
|
+
) -> dict[str, Any]:
|
|
326
|
+
view = load_external_job_attempt(request, job_root=job_root)
|
|
327
|
+
status, result = view["jobStatus"], view["result"]
|
|
328
|
+
require_external_job_pass(
|
|
329
|
+
validate_external_job_status(status, request=request),
|
|
330
|
+
"status",
|
|
331
|
+
)
|
|
332
|
+
if result is None or status["state"] not in TERMINAL_JOB_STATES:
|
|
333
|
+
raise LifecycleError(
|
|
334
|
+
"REVIEW_REMOTE_UNRESOLVED",
|
|
335
|
+
"Remote outcome remains unavailable",
|
|
336
|
+
)
|
|
337
|
+
require_external_job_pass(
|
|
338
|
+
validate_external_job_result(result, request=request, status=status),
|
|
339
|
+
"result",
|
|
340
|
+
)
|
|
341
|
+
if result["complete"] is not True or not result["blockingEligible"]:
|
|
342
|
+
raise LifecycleError(
|
|
343
|
+
"REVIEW_ROUTE_SUSPENDED",
|
|
344
|
+
"No complete reusable response",
|
|
345
|
+
)
|
|
346
|
+
_require_portable_recovery_records(request, status, result)
|
|
347
|
+
root = external_job_attempt_path(request, job_root=job_root)
|
|
348
|
+
running = _load_private_json(_status_path(root, 1), "running status")
|
|
349
|
+
transition = validate_external_job_transition(running, status, request=request)
|
|
350
|
+
require_external_job_pass(transition, "transition")
|
|
351
|
+
for artifact in result["artifacts"]:
|
|
352
|
+
path = root / artifact["locator"]
|
|
353
|
+
if not path.resolve().is_relative_to(root.resolve()):
|
|
354
|
+
raise LifecycleError("REVIEW_RECOVERY_INVALID", "Artifact changed")
|
|
355
|
+
data = read_stable_repository_file(
|
|
356
|
+
root,
|
|
357
|
+
artifact["locator"],
|
|
358
|
+
max_bytes=max(1, artifact["bytes"]),
|
|
359
|
+
label="recovered artifact",
|
|
360
|
+
)
|
|
361
|
+
if hashlib.sha256(data).hexdigest() != artifact["sha256"] or len(data) != artifact["bytes"]:
|
|
362
|
+
raise LifecycleError("REVIEW_RECOVERY_INVALID", "Artifact changed")
|
|
363
|
+
# Original process diagnostics remain in the immutable local attempt.
|
|
364
|
+
# Recovery exports the same semantic result/usage, never raw stored extras.
|
|
365
|
+
_read_complete_response(root, request, result)
|
|
366
|
+
view = _attempt_view(request, status, result, None, transition)
|
|
367
|
+
if len(canonical_bytes(view)) > 65536:
|
|
368
|
+
raise ValueError("Portable recovery exceeds its bound")
|
|
369
|
+
return view
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
def _require_portable_recovery_records(
|
|
373
|
+
request: dict[str, Any],
|
|
374
|
+
status: dict[str, Any],
|
|
375
|
+
result: dict[str, Any],
|
|
376
|
+
) -> None:
|
|
377
|
+
"""Refuse unsupported extras without rewriting an accepting identity."""
|
|
378
|
+
normalized_request = build_external_job_request(
|
|
379
|
+
job_id=request["jobId"],
|
|
380
|
+
attempt=request["attempt"],
|
|
381
|
+
adapter_id=request["adapterId"],
|
|
382
|
+
operation=request["operation"],
|
|
383
|
+
execution_kind=request["executionKind"],
|
|
384
|
+
descriptor_digest=request["descriptorDigest"],
|
|
385
|
+
plan_digest=request["planDigest"],
|
|
386
|
+
plan_lock_digest=request["planLockDigest"],
|
|
387
|
+
source_revision=request["sourceRevision"],
|
|
388
|
+
source_snapshot_digest=request["sourceSnapshotDigest"],
|
|
389
|
+
limits=request["limits"],
|
|
390
|
+
parent_job_id=request["parentJobId"],
|
|
391
|
+
parent_attempt=request["parentAttempt"],
|
|
392
|
+
parent_request_digest=request["parentRequestDigest"],
|
|
393
|
+
)
|
|
394
|
+
normalized_status = build_external_job_status(
|
|
395
|
+
request=request,
|
|
396
|
+
state=status["state"],
|
|
397
|
+
sequence=status["sequence"],
|
|
398
|
+
observed_at=status["observedAt"],
|
|
399
|
+
usage=status["usage"],
|
|
400
|
+
started_at=status["startedAt"],
|
|
401
|
+
ended_at=status["endedAt"],
|
|
402
|
+
children=status["children"],
|
|
403
|
+
cancel_requested=status["cancelRequested"],
|
|
404
|
+
process_cleanup_status=status["processCleanupStatus"],
|
|
405
|
+
post_terminal_write_detected=status["postTerminalWriteDetected"],
|
|
406
|
+
observation=status.get("observation"),
|
|
407
|
+
)
|
|
408
|
+
artifacts = [
|
|
409
|
+
build_external_job_artifact(
|
|
410
|
+
request=request,
|
|
411
|
+
artifact_id=item["artifactId"],
|
|
412
|
+
media_type=item["mediaType"],
|
|
413
|
+
bytes_count=item["bytes"],
|
|
414
|
+
sha256=item["sha256"],
|
|
415
|
+
locator=item["locator"],
|
|
416
|
+
)
|
|
417
|
+
for item in result["artifacts"]
|
|
418
|
+
]
|
|
419
|
+
normalized_result = build_external_job_result(
|
|
420
|
+
result_id=result["resultId"],
|
|
421
|
+
request=request,
|
|
422
|
+
status=status,
|
|
423
|
+
verdict=result["verdict"],
|
|
424
|
+
complete=result["complete"],
|
|
425
|
+
artifacts=artifacts,
|
|
426
|
+
output_digest=result["outputDigest"],
|
|
427
|
+
output_bytes=result["outputBytes"],
|
|
428
|
+
blockers=[],
|
|
429
|
+
)
|
|
430
|
+
for original, normalized in (
|
|
431
|
+
(request, normalized_request),
|
|
432
|
+
(status, normalized_status),
|
|
433
|
+
(result, normalized_result),
|
|
434
|
+
):
|
|
435
|
+
_, changed = redact_value(original)
|
|
436
|
+
if original != normalized or changed:
|
|
437
|
+
raise ValueError("Unsupported or sensitive recovery metadata")
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def _read_complete_response(
|
|
441
|
+
root: Path,
|
|
442
|
+
request: dict[str, Any],
|
|
443
|
+
result: dict[str, Any],
|
|
444
|
+
) -> dict[str, str]:
|
|
445
|
+
body = {}
|
|
446
|
+
for stream in ("stdout", "stderr"):
|
|
447
|
+
name = "response." + stream
|
|
448
|
+
try:
|
|
449
|
+
require_private_file(root / name)
|
|
450
|
+
data = read_stable_repository_file(
|
|
451
|
+
root,
|
|
452
|
+
name,
|
|
453
|
+
max_bytes=request["limits"]["maxOutputBytes"],
|
|
454
|
+
label="private recovered response",
|
|
455
|
+
)
|
|
456
|
+
except (OSError, LifecycleError) as exc:
|
|
457
|
+
raise LifecycleError(
|
|
458
|
+
"REVIEW_RESPONSE_UNAVAILABLE",
|
|
459
|
+
"Durable response unavailable",
|
|
460
|
+
) from exc
|
|
461
|
+
body[stream] = data.decode("utf-8")
|
|
462
|
+
count = sum(len(value.encode("utf-8")) for value in body.values())
|
|
463
|
+
expected = canonical_digest(body) if count else None
|
|
464
|
+
if count != result["outputBytes"] or expected != result["outputDigest"]:
|
|
465
|
+
raise ValueError("Durable response identity changed")
|
|
466
|
+
return body
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def load_external_job_response(
|
|
470
|
+
request: dict[str, Any],
|
|
471
|
+
*,
|
|
472
|
+
job_root: Path | None = None,
|
|
473
|
+
) -> dict[str, str]:
|
|
474
|
+
"""Host-local bounded response input for parsing/import; never CLI output."""
|
|
475
|
+
view = recover_external_job_attempt(request, job_root=job_root)
|
|
476
|
+
return _read_complete_response(
|
|
477
|
+
external_job_attempt_path(request, job_root=job_root),
|
|
478
|
+
request,
|
|
479
|
+
view["result"],
|
|
480
|
+
)
|
|
481
|
+
|
|
482
|
+
|
|
116
483
|
def _prepare_external_job(
|
|
117
484
|
request: dict[str, Any],
|
|
118
485
|
children: list[dict[str, Any]],
|
|
@@ -169,6 +536,7 @@ def _invoke_external_job_process(
|
|
|
169
536
|
cwd: Path | None,
|
|
170
537
|
cancel_event: threading.Event | None,
|
|
171
538
|
process_runner: ProcessRunner,
|
|
539
|
+
stdin_text: str | None = None,
|
|
172
540
|
) -> tuple[dict[str, Any], threading.Event]:
|
|
173
541
|
local_cancel = threading.Event()
|
|
174
542
|
monitor_stop = threading.Event()
|
|
@@ -194,6 +562,7 @@ def _invoke_external_job_process(
|
|
|
194
562
|
adapter_id=request["adapterId"],
|
|
195
563
|
cancel_event=local_cancel,
|
|
196
564
|
cleanup_grace_seconds=float(limits["cancelGraceSeconds"]),
|
|
565
|
+
**({"stdin_text": stdin_text, "max_input_bytes": 1024 * 1024} if stdin_text is not None else {}),
|
|
197
566
|
)
|
|
198
567
|
finally:
|
|
199
568
|
create_private_json(
|
|
@@ -231,7 +600,8 @@ def _finalize_external_job(
|
|
|
231
600
|
request, context.artifact_root, quiet_seconds=post_terminal_quiet_seconds
|
|
232
601
|
)
|
|
233
602
|
|
|
234
|
-
|
|
603
|
+
response_blockers = _capture_private_response(context, process)
|
|
604
|
+
blockers = [*process.get("blockers", []), *child_blockers, *artifact_blockers, *response_blockers]
|
|
235
605
|
elapsed_ms = _elapsed_ms(process, observed_elapsed_ms=observed_elapsed_ms)
|
|
236
606
|
wall_limit_ms = int(limits["maxWallSeconds"]) * 1000
|
|
237
607
|
if elapsed_ms > wall_limit_ms:
|
|
@@ -302,6 +672,33 @@ def _finalize_external_job(
|
|
|
302
672
|
return _attempt_view(request, terminal, result, process["processReceipt"], terminal_transition)
|
|
303
673
|
|
|
304
674
|
|
|
675
|
+
def _capture_private_response(
|
|
676
|
+
context: _JobContext,
|
|
677
|
+
process: dict[str, Any],
|
|
678
|
+
) -> list[dict[str, str]]:
|
|
679
|
+
"""Durable complete/partial delivery in the existing private attempt."""
|
|
680
|
+
limit = context.request["limits"]["maxOutputBytes"]
|
|
681
|
+
remaining = limit
|
|
682
|
+
truncated = False
|
|
683
|
+
for stream in ("stdout", "stderr"):
|
|
684
|
+
value = process.get(stream, "")
|
|
685
|
+
if not isinstance(value, str):
|
|
686
|
+
raise LifecycleError(
|
|
687
|
+
"REVIEW_RESPONSE_UNAVAILABLE",
|
|
688
|
+
"Response encoding unavailable",
|
|
689
|
+
)
|
|
690
|
+
data = value.encode("utf-8")
|
|
691
|
+
truncated = truncated or len(data) > remaining
|
|
692
|
+
selected = data[:remaining]
|
|
693
|
+
remaining -= len(selected)
|
|
694
|
+
create_authority_bytes(
|
|
695
|
+
context.attempt_root / ("response." + stream),
|
|
696
|
+
selected,
|
|
697
|
+
private=True,
|
|
698
|
+
)
|
|
699
|
+
return [{"code": "external-job-response-byte-limit"}] if truncated else []
|
|
700
|
+
|
|
701
|
+
|
|
305
702
|
def _settle_artifacts(
|
|
306
703
|
request: dict[str, Any], artifact_root: Path, *, quiet_seconds: float
|
|
307
704
|
) -> tuple[list[dict[str, Any]], list[dict[str, Any]], bool]:
|
|
@@ -38,6 +38,7 @@ from agent_lifecycle.adapter_sessions.qualification import (
|
|
|
38
38
|
)
|
|
39
39
|
from agent_lifecycle.adapter_sessions.worktree_identity import capture_git_worktree_identity
|
|
40
40
|
from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
|
|
41
|
+
from agent_lifecycle.contracts.preparation_policy import PreparationAdmission
|
|
41
42
|
from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
|
|
42
43
|
|
|
43
44
|
|
|
@@ -237,6 +238,8 @@ def launch_from_descriptor(
|
|
|
237
238
|
state_path: Path | None = None,
|
|
238
239
|
policy_path: Path | None = None,
|
|
239
240
|
process_env: dict[str, str] | None = None,
|
|
241
|
+
preparation: PreparationAdmission | None = None,
|
|
242
|
+
project_root: Path | None = None,
|
|
240
243
|
) -> dict[str, Any]:
|
|
241
244
|
"""Block generic descriptor-driven launch until the qualified local route exists."""
|
|
242
245
|
|
|
@@ -248,6 +251,11 @@ def launch_from_descriptor(
|
|
|
248
251
|
adapter_id = raw_adapter_id if isinstance(raw_adapter_id, str) else "unknown"
|
|
249
252
|
timeout_seconds = _timeout_seconds(profile)
|
|
250
253
|
blockers: list[dict[str, Any]] = []
|
|
254
|
+
if preparation is not None:
|
|
255
|
+
try:
|
|
256
|
+
preparation.check(repository_root=project_root or Path.cwd())
|
|
257
|
+
except LifecycleError as exc:
|
|
258
|
+
blockers.append({"code": exc.code})
|
|
251
259
|
if validation["status"] != "PASS":
|
|
252
260
|
blockers.append(
|
|
253
261
|
{
|