agent-lifecycle-kit 2.26.0__tar.gz → 2.28.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.26.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.28.0}/PKG-INFO +9 -8
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/README.md +6 -6
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/pyproject.toml +3 -2
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/_version.py +1 -1
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/contracts.py +19 -9
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/declared_ledger_legacy.py +10 -36
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/financial_transactions.py +6 -18
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/journal.py +24 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/private_input.py +10 -36
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +28 -11
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/authority_io.py +16 -5
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/performance_limits.py +38 -14
- agent_lifecycle_kit-2.28.0/src/agent_lifecycle/contracts/preparation_policy.py +284 -0
- agent_lifecycle_kit-2.28.0/src/agent_lifecycle/contracts/private_storage_compat.py +57 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/architecture_policy.py +13 -2
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +9 -8
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +1 -0
- agent_lifecycle_kit-2.26.0/src/agent_lifecycle/contracts/preparation_policy.py +0 -241
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/LICENSE +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/NOTICE +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/README.md +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/manifest.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/setup.cfg +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/__main__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/closing_resource_admission.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/closing_resource_policy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/closing_resource_recovery.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/closing_resources.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/closing_types.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/declared_ledger.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/declared_ledger_records.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/host_bridge.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/input_fit.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/legacy_source_usage.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/normalization.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/opening_balances.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/profile_schema.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/source_usage_context.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/support_profiles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/usage_types.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/workflow_authority_store.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/workflow_state_store.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/workflow_store.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/attempt_authority.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/bootstrap_r11.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/codex_exact_prompt.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/codex_input_diagnostics.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/codex_prompt_preparation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/codex_source_exposure.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/codex_source_subject.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/external_check.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/external_jobs.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/immutable_input.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/input_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/lifecycle_control.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/limited_native_evidence.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/managed_process.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/ordinary_audit.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/process_admission.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/qualification_context.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_contracts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_history.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_inputs.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_preparation_records.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_roles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_shards.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_support.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/source_review_transcript.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/windows_pipe.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/adapter_sessions/worktree_identity.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/delta.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/delta_review.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/domain_language.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/external_checks.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/implementation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/ownership.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/package.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/review_packet.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/audit/security_analysis.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/changesets/git.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/changesets/git_io.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/changesets/snapshot.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/adapter.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/command_registry.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/compact_plan_commands.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_audit.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_planning.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/errors.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/followup.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/main.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/metrics_parser.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/observability_parsers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/parsers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/plan_lock_commands.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/planning_parsers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/policy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/project.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/research.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/start.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/strategy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/workflow_task_parsers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/cli/worktree.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/compiler/output_contract.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/compiler/phase_packets.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/checkpoint_store.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/external_memory.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/profiles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/rendering.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/artifact_authoring_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/authority_text.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/bounded_json.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/closing_resource_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/closing_time.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/closing_window_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/compact_plan_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/deadline_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/deadlines.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/display_identity.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/domain_language.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/domain_language_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/ed25519.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/errors.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/evidence_receipt_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/execution_target.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/external_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/external_job_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/finding_check_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/immutable_input_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/independent_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/legacy_runner_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/lifecycle_action_catalog.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/lifecycle_control_definitions.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/lifecycle_control_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/lifecycle_control_validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/model_classes.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/multi_run_view_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/ownership_paths.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/paths.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/phase_packet_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/plan_manifest_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/private_storage.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/process_lock.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/public_locators.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/release_accounting_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/review_input_types.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/review_round_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/reviewer_identity_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/scoped_usage_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/security_analysis_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/statistical_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/structured_result_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/validation_ladder_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/windows_security.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_artifact_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_authority.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_authority_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_authorization_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_continuation_batch_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_continuation_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_economics_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_finalization_types.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_run_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/contracts/workflow_state_schemas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/external-checks/declared-dependencies.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/external-checks/import-boundaries.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/external-checks/module-dependencies.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/quick-change.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/research-review.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/followup/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/followup/records.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/freeze/locks.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/freeze/review_inputs.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/goal/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/goal/records.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/goal/view.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/external_jobs.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/lifecycle_control.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/lifecycle_control_qualification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/lifecycle_gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/opencode_compatibility.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/structured_results.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/planning.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/security_findings.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/audit_efficiency.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/command_resources.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/costs.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/goal_progress.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/plan_package_comparison.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/release_accounting.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/metrics/workflow_economics.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/migration/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/migration/legacy_runner.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/ed25519.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/git_objects.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/matching.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/scanner.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/compact_packages.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/completeness.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/continuity.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/deltas.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/manifest_contract.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/prerequisites.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/templates.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/tiering.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/traceability.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/planning/verification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/apply.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/proposals.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/domain_language.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/guidance.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/merge.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/presets.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/principles.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/project/profile.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/py.typed +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/dependency_impact.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/external_checks.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/packs.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/security_analysis.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/quality/validation_ladder.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/attention.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/multi_run.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/research/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/research/evidence.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/research/provenance.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/research/validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/resources.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review/provenance.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review/validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/independence.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/preflight.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/results.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/review_mesh/validation_helpers.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/runner/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/runner/core.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/specification/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/specification/validation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/artifact_builders.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/audit_evidence.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/authorization.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/closing_policy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/closing_window.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/continuation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/continuation_batch.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/controller.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/deadline_guards.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/events.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/gates.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/immutable_input.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/initialization.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/leases.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/limited_usage.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/query.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/run.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/state.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/task_outcomes.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/task_start.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/transactions.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/workflow/transition_contract.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
- {agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle_kit.egg-info/top_level.txt +0 -0
{agent_lifecycle_kit-2.26.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-2.28.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.28.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
|
|
@@ -13,8 +13,9 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
16
17
|
Classifier: Typing :: Typed
|
|
17
|
-
Requires-Python: <3.
|
|
18
|
+
Requires-Python: <3.16,>=3.11
|
|
18
19
|
Description-Content-Type: text/markdown
|
|
19
20
|
License-File: LICENSE
|
|
20
21
|
License-File: NOTICE
|
|
@@ -28,20 +29,20 @@ Dynamic: license-file
|
|
|
28
29
|
|
|
29
30
|
[](LICENSE)
|
|
30
31
|
[](https://github.com/avksp/agent-lifecycle-kit/releases)
|
|
31
|
-

|
|
32
33
|
|
|
33
|
-
**Agent Lifecycle Kit (ALK)** coordinates coding-agent work through a verifiable finish. It keeps the requested outcome, reviewed plan, execution boundaries, evidence and
|
|
34
|
-
acceptance decisions connected while the external agent changes the project.
|
|
34
|
+
**Agent Lifecycle Kit (ALK)** coordinates coding-agent work through a verifiable finish. It keeps the requested outcome, reviewed plan, execution boundaries, evidence and acceptance decisions connected while the external agent changes the project.
|
|
35
35
|
|
|
36
|
-
The provider-neutral workflow works with Codex, Claude Code, Qwen Code, Goose, OpenInterpreter, Pi, Grok Build, or another CLI. Provider commands, model choice and secret handling
|
|
37
|
-
stay in adapters or host-local profiles.
|
|
36
|
+
The provider-neutral workflow works with Codex, Claude Code, Qwen Code, Goose, OpenInterpreter, Pi, Grok Build, or another CLI. Provider commands, model choice and secret handling stay in adapters or host-local profiles.
|
|
38
37
|
|
|
39
38
|
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.
|
|
40
39
|
|
|
40
|
+
Release 2.28 adds [bounded lifecycle and accounting baselines](docs/reference/performance-and-resource-budgets.md#release-228-lifecycle-and-accounting-baselines). Repository tools measure real read-only operations and separate fixture preparation from operation and subprocess time. The Windows fixture comparison observed a 13.08% median reduction in one six-sample experiment; it is not a universal speed promise. All security and platform checks remain required.
|
|
41
|
+
|
|
41
42
|
## Quick start
|
|
42
43
|
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.23 adds [compact S0/S1 authoring](docs/reference/tier-proportional-plan-packages.md) with explicit checklist completion and unchanged approval gates. Release 2.22 adds [conservative plan-review reuse](docs/reference/conservative-delta-review.md) with independent current applicability and no automatic full reruns. 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).
|
|
43
44
|
|
|
44
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.
|
|
45
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.15, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.28.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).
|
|
45
46
|
|
|
46
47
|
For a quick start, run:
|
|
47
48
|
|
|
@@ -6,20 +6,20 @@
|
|
|
6
6
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](https://github.com/avksp/agent-lifecycle-kit/releases)
|
|
9
|
-

|
|
10
10
|
|
|
11
|
-
**Agent Lifecycle Kit (ALK)** coordinates coding-agent work through a verifiable finish. It keeps the requested outcome, reviewed plan, execution boundaries, evidence and
|
|
12
|
-
acceptance decisions connected while the external agent changes the project.
|
|
11
|
+
**Agent Lifecycle Kit (ALK)** coordinates coding-agent work through a verifiable finish. It keeps the requested outcome, reviewed plan, execution boundaries, evidence and acceptance decisions connected while the external agent changes the project.
|
|
13
12
|
|
|
14
|
-
The provider-neutral workflow works with Codex, Claude Code, Qwen Code, Goose, OpenInterpreter, Pi, Grok Build, or another CLI. Provider commands, model choice and secret handling
|
|
15
|
-
stay in adapters or host-local profiles.
|
|
13
|
+
The provider-neutral workflow works with Codex, Claude Code, Qwen Code, Goose, OpenInterpreter, Pi, Grok Build, or another CLI. Provider commands, model choice and secret handling stay in adapters or host-local profiles.
|
|
16
14
|
|
|
17
15
|
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.
|
|
18
16
|
|
|
17
|
+
Release 2.28 adds [bounded lifecycle and accounting baselines](docs/reference/performance-and-resource-budgets.md#release-228-lifecycle-and-accounting-baselines). Repository tools measure real read-only operations and separate fixture preparation from operation and subprocess time. The Windows fixture comparison observed a 13.08% median reduction in one six-sample experiment; it is not a universal speed promise. All security and platform checks remain required.
|
|
18
|
+
|
|
19
19
|
## Quick start
|
|
20
20
|
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md). Release 2.23 adds [compact S0/S1 authoring](docs/reference/tier-proportional-plan-packages.md) with explicit checklist completion and unchanged approval gates. Release 2.22 adds [conservative plan-review reuse](docs/reference/conservative-delta-review.md) with independent current applicability and no automatic full reruns. 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).
|
|
21
21
|
|
|
22
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.
|
|
22
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.15, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==2.28.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).
|
|
23
23
|
|
|
24
24
|
For a quick start, run:
|
|
25
25
|
|
|
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-lifecycle-kit"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.28.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
|
-
requires-python = ">=3.11,<3.
|
|
10
|
+
requires-python = ">=3.11,<3.16"
|
|
11
11
|
license = { text = "Apache-2.0" }
|
|
12
12
|
authors = [{ name = "Agent Lifecycle Kit contributors" }]
|
|
13
13
|
keywords = [
|
|
@@ -35,6 +35,7 @@ classifiers = [
|
|
|
35
35
|
"Programming Language :: Python :: 3.12",
|
|
36
36
|
"Programming Language :: Python :: 3.13",
|
|
37
37
|
"Programming Language :: Python :: 3.14",
|
|
38
|
+
"Programming Language :: Python :: 3.15",
|
|
38
39
|
"Typing :: Typed",
|
|
39
40
|
]
|
|
40
41
|
dependencies = []
|
|
@@ -627,7 +627,24 @@ if TYPE_CHECKING:
|
|
|
627
627
|
from contextlib import AbstractContextManager
|
|
628
628
|
from typing import Protocol
|
|
629
629
|
|
|
630
|
-
class
|
|
630
|
+
class _FinancialTransactionPort(Protocol):
|
|
631
|
+
"""Only the capabilities used by admitted reservation and claim rules."""
|
|
632
|
+
|
|
633
|
+
def _require_financial_transaction(self) -> None: ...
|
|
634
|
+
|
|
635
|
+
def _reserve_identity_keys(self, operation: Operation) -> None: ...
|
|
636
|
+
|
|
637
|
+
def _closed_scope(self, scope: str) -> object | None: ...
|
|
638
|
+
|
|
639
|
+
def _conflict(self, scopes: tuple[str, ...], reason: str, payload: dict) -> str: ...
|
|
640
|
+
|
|
641
|
+
def _key(self, kind: str, key: object, scope: str, owner: str, value: str) -> bool: ...
|
|
642
|
+
|
|
643
|
+
def _load(self, scope: str) -> tuple[dict | None, int]: ...
|
|
644
|
+
|
|
645
|
+
def _record(self, scope: str, state: dict | None, revision: int, kind: str, payload: dict) -> int: ...
|
|
646
|
+
|
|
647
|
+
class _JournalStoragePort(_FinancialTransactionPort, Protocol):
|
|
631
648
|
"""Static view of the existing live Journal composition; no runtime base."""
|
|
632
649
|
|
|
633
650
|
_admission_depth: int
|
|
@@ -669,8 +686,6 @@ if TYPE_CHECKING:
|
|
|
669
686
|
@staticmethod
|
|
670
687
|
def _compile_opening(scope: BudgetScope, policy: BudgetPolicy, value: OpeningImport) -> dict: ...
|
|
671
688
|
|
|
672
|
-
def _conflict(self, scopes: tuple[str, ...], reason: str, payload: dict) -> str: ...
|
|
673
|
-
|
|
674
689
|
@staticmethod
|
|
675
690
|
def _create_v4_schema(db: sqlite3.Connection, *, writer_version: int = 4) -> None: ...
|
|
676
691
|
|
|
@@ -697,12 +712,8 @@ if TYPE_CHECKING:
|
|
|
697
712
|
|
|
698
713
|
def _index(self, table: str, key: str, scope: str, owner: str, payload: dict) -> dict: ...
|
|
699
714
|
|
|
700
|
-
def _key(self, kind: str, key: object, scope: str, owner: str, value: str) -> bool: ...
|
|
701
|
-
|
|
702
715
|
def _live_facts(self, scope: str, *, restore: bool = False) -> tuple[dict, int, list, list]: ...
|
|
703
716
|
|
|
704
|
-
def _load(self, scope: str) -> tuple[dict | None, int]: ...
|
|
705
|
-
|
|
706
717
|
_observation_scope: str | None
|
|
707
718
|
|
|
708
719
|
def _observed_candidates(self, scope: str, evidence: dict) -> list[dict]: ...
|
|
@@ -714,8 +725,6 @@ if TYPE_CHECKING:
|
|
|
714
725
|
|
|
715
726
|
def _preflight_supplied_finals(self, scope: str, receipts: list[dict]) -> None: ...
|
|
716
727
|
|
|
717
|
-
def _record(self, scope: str, state: dict | None, revision: int, kind: str, payload: dict) -> int: ...
|
|
718
|
-
|
|
719
728
|
def _retained(self, table: str, key: str) -> dict | None: ...
|
|
720
729
|
|
|
721
730
|
def _source_preflight(self, receipt: dict) -> None: ...
|
|
@@ -755,6 +764,7 @@ if TYPE_CHECKING:
|
|
|
755
764
|
writer: EvidenceRef
|
|
756
765
|
else:
|
|
757
766
|
# Preserve the exact nominal runtime bases and authority checks.
|
|
767
|
+
_FinancialTransactionPort = object
|
|
758
768
|
_JournalStoragePort = object
|
|
759
769
|
|
|
760
770
|
|
|
@@ -21,6 +21,7 @@ from agent_lifecycle.accounting.declared_ledger_records import (
|
|
|
21
21
|
from agent_lifecycle.contracts import LifecycleError, canonical_bytes, canonical_digest
|
|
22
22
|
from agent_lifecycle.contracts.authority_io import normalize_authority_path, read_authority_bytes
|
|
23
23
|
from agent_lifecycle.contracts.bounded_json import load_bounded_json as _r11_json
|
|
24
|
+
from agent_lifecycle.contracts.private_storage_compat import read_compat_private_bytes
|
|
24
25
|
|
|
25
26
|
_MAX_REQUEST_BYTES = 131_072
|
|
26
27
|
|
|
@@ -32,42 +33,15 @@ def _read_private(
|
|
|
32
33
|
allowed_modes: tuple[int, ...] = (0o600,),
|
|
33
34
|
max_bytes: int = _MAX_REQUEST_BYTES,
|
|
34
35
|
) -> bytes:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
current = path.parent
|
|
45
|
-
while current != root:
|
|
46
|
-
info = current.lstat()
|
|
47
|
-
relative = current.relative_to(root).parts
|
|
48
|
-
shared_parent = relative in {("work",), ("work", "release-2-16"), ("work", "release-2-16", "evidence")}
|
|
49
|
-
if not stat.S_ISDIR(info.st_mode) or (not shared_parent and stat.S_IMODE(info.st_mode) != 0o700):
|
|
50
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private parent is not mode 0700")
|
|
51
|
-
current = current.parent
|
|
52
|
-
info = path.lstat()
|
|
53
|
-
if not stat.S_ISREG(info.st_mode) or stat.S_IMODE(info.st_mode) not in allowed_modes or info.st_size > max_bytes:
|
|
54
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private file has unsafe mode, type or size")
|
|
55
|
-
flags = os.O_RDONLY | getattr(os, "O_NOFOLLOW", 0)
|
|
56
|
-
fd = os.open(path, flags)
|
|
57
|
-
with os.fdopen(fd, "rb") as stream:
|
|
58
|
-
opened = os.fstat(stream.fileno())
|
|
59
|
-
|
|
60
|
-
def identity(item: os.stat_result) -> tuple[int, int, int, int, int]:
|
|
61
|
-
return (item.st_dev, item.st_ino, item.st_mode, item.st_size, item.st_mtime_ns)
|
|
62
|
-
|
|
63
|
-
if identity(opened) != identity(info):
|
|
64
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private file changed before reading")
|
|
65
|
-
raw = stream.read(max_bytes + 1)
|
|
66
|
-
if identity(os.fstat(stream.fileno())) != identity(opened):
|
|
67
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private file changed while reading")
|
|
68
|
-
if len(raw) > max_bytes:
|
|
69
|
-
raise LifecycleError("codex-exact-private-overflow", "private artifact exceeds byte limit")
|
|
70
|
-
return raw
|
|
36
|
+
return read_compat_private_bytes(
|
|
37
|
+
path,
|
|
38
|
+
root=root,
|
|
39
|
+
allowed_modes=allowed_modes,
|
|
40
|
+
max_bytes=max_bytes,
|
|
41
|
+
shared_parents=frozenset({("work",), ("work", "release-2-16"), ("work", "release-2-16", "evidence")}),
|
|
42
|
+
unsafe_code="codex-exact-private-path-unsafe",
|
|
43
|
+
overflow_code="codex-exact-private-overflow",
|
|
44
|
+
)
|
|
71
45
|
|
|
72
46
|
|
|
73
47
|
def _r11_git(root: Path, *args: str) -> bytes:
|
|
@@ -6,11 +6,10 @@ These primitives confer no host, provider or dispatch authority.
|
|
|
6
6
|
from dataclasses import asdict
|
|
7
7
|
|
|
8
8
|
from .contracts import (
|
|
9
|
-
JournalUnavailable,
|
|
10
9
|
Operation,
|
|
11
10
|
RevisionConflict,
|
|
12
11
|
_BindingConflict,
|
|
13
|
-
|
|
12
|
+
_FinancialTransactionPort,
|
|
14
13
|
_projection,
|
|
15
14
|
digest,
|
|
16
15
|
identity,
|
|
@@ -18,14 +17,12 @@ from .contracts import (
|
|
|
18
17
|
)
|
|
19
18
|
|
|
20
19
|
|
|
21
|
-
def _require_financial_transaction(journal:
|
|
22
|
-
journal.
|
|
23
|
-
if not journal._db.in_transaction or journal._admission_depth != 1:
|
|
24
|
-
raise JournalUnavailable("Financial operation requires admitted transaction", write_outcome="NOT_STARTED")
|
|
20
|
+
def _require_financial_transaction(journal: _FinancialTransactionPort) -> None:
|
|
21
|
+
journal._require_financial_transaction()
|
|
25
22
|
|
|
26
23
|
|
|
27
24
|
def _reserve_in_transaction(
|
|
28
|
-
journal:
|
|
25
|
+
journal: _FinancialTransactionPort, operation: Operation, *, expected_revision: int | None = None
|
|
29
26
|
) -> str:
|
|
30
27
|
"""Apply ordinary reservation arithmetic inside the caller's admitted transaction."""
|
|
31
28
|
_require_financial_transaction(journal)
|
|
@@ -61,25 +58,16 @@ def _reserve_in_transaction(
|
|
|
61
58
|
return journal._conflict((scope,), "Scope/policy/task binding mismatch", op)
|
|
62
59
|
if not _reservation_fits(state, revision, operation):
|
|
63
60
|
return "DENY"
|
|
64
|
-
journal._db.execute("SAVEPOINT identity_batch")
|
|
65
61
|
try:
|
|
66
|
-
|
|
67
|
-
("operation", [scope, operation.operation_id]),
|
|
68
|
-
("dispatch", [scope, operation.dispatch_key]),
|
|
69
|
-
("permit", operation.permit_id),
|
|
70
|
-
):
|
|
71
|
-
journal._key(kind, key, scope, operation.operation_id, operation.binding_digest)
|
|
72
|
-
journal._db.execute("RELEASE identity_batch")
|
|
62
|
+
journal._reserve_identity_keys(operation)
|
|
73
63
|
except _BindingConflict as exc:
|
|
74
|
-
journal._db.execute("ROLLBACK TO identity_batch")
|
|
75
|
-
journal._db.execute("RELEASE identity_batch")
|
|
76
64
|
return journal._conflict(exc.scopes, str(exc), op)
|
|
77
65
|
journal._record(scope, state, revision, "RESERVE", {"operation": op})
|
|
78
66
|
return "RESERVED"
|
|
79
67
|
|
|
80
68
|
|
|
81
69
|
def _claim_in_transaction(
|
|
82
|
-
journal:
|
|
70
|
+
journal: _FinancialTransactionPort, scope: str, operation_id: str, binding_digest: str, claim_id: str
|
|
83
71
|
) -> str:
|
|
84
72
|
"""Claim once inside the caller's admitted transaction; no dispatch authority is conferred."""
|
|
85
73
|
_require_financial_transaction(journal)
|
{agent_lifecycle_kit-2.26.0 → agent_lifecycle_kit-2.28.0}/src/agent_lifecycle/accounting/journal.py
RENAMED
|
@@ -32,6 +32,7 @@ from .contracts import (
|
|
|
32
32
|
EvidenceRef,
|
|
33
33
|
JournalEvent,
|
|
34
34
|
JournalHandle,
|
|
35
|
+
Operation,
|
|
35
36
|
UsageOutcome,
|
|
36
37
|
canonical,
|
|
37
38
|
digest,
|
|
@@ -270,6 +271,29 @@ class Journal(
|
|
|
270
271
|
return self._archive_state(scope)
|
|
271
272
|
return None, 0
|
|
272
273
|
|
|
274
|
+
def _require_financial_transaction(self) -> None:
|
|
275
|
+
self._check_owner()
|
|
276
|
+
if not self._db.in_transaction or self._admission_depth != 1:
|
|
277
|
+
raise JournalUnavailable("Financial operation requires admitted transaction", write_outcome="NOT_STARTED")
|
|
278
|
+
|
|
279
|
+
def _reserve_identity_keys(self, operation: Operation) -> None:
|
|
280
|
+
"""Keep a reservation's immutable identities atomic inside admission."""
|
|
281
|
+
self._require_financial_transaction()
|
|
282
|
+
scope = operation.budget_scope_id
|
|
283
|
+
self._db.execute("SAVEPOINT identity_batch")
|
|
284
|
+
try:
|
|
285
|
+
for kind, key in (
|
|
286
|
+
("operation", [scope, operation.operation_id]),
|
|
287
|
+
("dispatch", [scope, operation.dispatch_key]),
|
|
288
|
+
("permit", operation.permit_id),
|
|
289
|
+
):
|
|
290
|
+
self._key(kind, key, scope, operation.operation_id, operation.binding_digest)
|
|
291
|
+
self._db.execute("RELEASE identity_batch")
|
|
292
|
+
except _BindingConflict:
|
|
293
|
+
self._db.execute("ROLLBACK TO identity_batch")
|
|
294
|
+
self._db.execute("RELEASE identity_batch")
|
|
295
|
+
raise
|
|
296
|
+
|
|
273
297
|
def _key(self, kind: str, key: object, scope: str, owner: str, value: str) -> bool:
|
|
274
298
|
"""Reserve/check a global immutable key inside the current transaction."""
|
|
275
299
|
encoded = canonical(key)
|
|
@@ -8,6 +8,7 @@ import stat
|
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
|
|
10
10
|
from agent_lifecycle.contracts import LifecycleError
|
|
11
|
+
from agent_lifecycle.contracts.private_storage_compat import read_compat_private_bytes
|
|
11
12
|
|
|
12
13
|
_MAX_REQUEST_BYTES = 131_072
|
|
13
14
|
|
|
@@ -102,42 +103,15 @@ def _read_private(
|
|
|
102
103
|
allowed_modes: tuple[int, ...] = (0o600,),
|
|
103
104
|
max_bytes: int = _MAX_REQUEST_BYTES,
|
|
104
105
|
) -> bytes:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
current = path.parent
|
|
115
|
-
while current != root:
|
|
116
|
-
info = current.lstat()
|
|
117
|
-
relative = current.relative_to(root).parts
|
|
118
|
-
shared_parent = relative in {("work",), ("work", "release-2-16"), ("work", "release-2-16", "evidence")}
|
|
119
|
-
if not stat.S_ISDIR(info.st_mode) or (not shared_parent and stat.S_IMODE(info.st_mode) != 0o700):
|
|
120
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private parent is not mode 0700")
|
|
121
|
-
current = current.parent
|
|
122
|
-
info = path.lstat()
|
|
123
|
-
if not stat.S_ISREG(info.st_mode) or stat.S_IMODE(info.st_mode) not in allowed_modes or info.st_size > max_bytes:
|
|
124
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private file has unsafe mode, type or size")
|
|
125
|
-
flags = os.O_RDONLY | getattr(os, "O_NOFOLLOW", 0)
|
|
126
|
-
fd = os.open(path, flags)
|
|
127
|
-
with os.fdopen(fd, "rb") as stream:
|
|
128
|
-
opened = os.fstat(stream.fileno())
|
|
129
|
-
|
|
130
|
-
def identity(item: os.stat_result) -> tuple[int, int, int, int, int]:
|
|
131
|
-
return (item.st_dev, item.st_ino, item.st_mode, item.st_size, item.st_mtime_ns)
|
|
132
|
-
|
|
133
|
-
if identity(opened) != identity(info):
|
|
134
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private file changed before reading")
|
|
135
|
-
raw = stream.read(max_bytes + 1)
|
|
136
|
-
if identity(os.fstat(stream.fileno())) != identity(opened):
|
|
137
|
-
raise LifecycleError("codex-exact-private-path-unsafe", "private file changed while reading")
|
|
138
|
-
if len(raw) > max_bytes:
|
|
139
|
-
raise LifecycleError("codex-exact-private-overflow", "private artifact exceeds byte limit")
|
|
140
|
-
return raw
|
|
106
|
+
return read_compat_private_bytes(
|
|
107
|
+
path,
|
|
108
|
+
root=root,
|
|
109
|
+
allowed_modes=allowed_modes,
|
|
110
|
+
max_bytes=max_bytes,
|
|
111
|
+
shared_parents=frozenset({("work",), ("work", "release-2-16"), ("work", "release-2-16", "evidence")}),
|
|
112
|
+
unsafe_code="codex-exact-private-path-unsafe",
|
|
113
|
+
overflow_code="codex-exact-private-overflow",
|
|
114
|
+
)
|
|
141
115
|
|
|
142
116
|
|
|
143
117
|
def _require(value: bool, code: str, message: str) -> None:
|
|
@@ -126,17 +126,7 @@ AGENT_PLUGIN_QUALIFICATION_SCHEMAS: dict[str, dict[str, Any]] = {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
def
|
|
130
|
-
"""Validate a data-only client profile and its self-digest."""
|
|
131
|
-
|
|
132
|
-
blockers: list[dict[str, Any]] = []
|
|
133
|
-
if not isinstance(profile, dict):
|
|
134
|
-
return _validation([_issue("profile-not-object")])
|
|
135
|
-
_required_text(profile, "schemaVersion", PROFILE_SCHEMA, blockers)
|
|
136
|
-
for field in ("profileId", "adapterId", "client", "host"):
|
|
137
|
-
if not isinstance(profile.get(field), str) or not profile[field].strip():
|
|
138
|
-
blockers.append(_issue("profile-field-invalid", field=field))
|
|
139
|
-
|
|
129
|
+
def _profile_package(profile: dict[str, Any], blockers: list[dict[str, Any]]) -> None:
|
|
140
130
|
package = profile.get("package")
|
|
141
131
|
if not isinstance(package, dict):
|
|
142
132
|
blockers.append(_issue("profile-package-invalid"))
|
|
@@ -149,6 +139,8 @@ def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
|
149
139
|
if skills != list(CANONICAL_SKILLS):
|
|
150
140
|
blockers.append(_issue("profile-required-skills", expected=list(CANONICAL_SKILLS), actual=skills))
|
|
151
141
|
|
|
142
|
+
|
|
143
|
+
def _profile_discovery(profile: dict[str, Any], blockers: list[dict[str, Any]]) -> None:
|
|
152
144
|
discovery = profile.get("discovery")
|
|
153
145
|
if not isinstance(discovery, dict):
|
|
154
146
|
blockers.append(_issue("profile-discovery-invalid"))
|
|
@@ -165,6 +157,8 @@ def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
|
165
157
|
if not isinstance(markers, list) or not all(isinstance(item, str) and item for item in markers):
|
|
166
158
|
blockers.append(_issue("profile-discovery-markers"))
|
|
167
159
|
|
|
160
|
+
|
|
161
|
+
def _profile_installation(profile: dict[str, Any], blockers: list[dict[str, Any]]) -> None:
|
|
168
162
|
installation = profile.get("installation")
|
|
169
163
|
if not isinstance(installation, dict):
|
|
170
164
|
blockers.append(_issue("profile-installation-invalid"))
|
|
@@ -176,6 +170,8 @@ def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
|
176
170
|
):
|
|
177
171
|
blockers.append(_issue("profile-installation-boundary"))
|
|
178
172
|
|
|
173
|
+
|
|
174
|
+
def _profile_environment(profile: dict[str, Any], blockers: list[dict[str, Any]]) -> None:
|
|
179
175
|
environment = profile.get("environment")
|
|
180
176
|
if not isinstance(environment, dict):
|
|
181
177
|
blockers.append(_issue("profile-environment-invalid"))
|
|
@@ -187,6 +183,8 @@ def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
|
187
183
|
if environment.get("allowPatterns"):
|
|
188
184
|
blockers.append(_issue("profile-environment-wildcard"))
|
|
189
185
|
|
|
186
|
+
|
|
187
|
+
def _profile_host_version(profile: dict[str, Any], blockers: list[dict[str, Any]]) -> None:
|
|
190
188
|
host_version_policy = profile.get("hostVersionPolicy")
|
|
191
189
|
if not isinstance(host_version_policy, dict):
|
|
192
190
|
blockers.append(_issue("profile-host-version-policy-invalid"))
|
|
@@ -205,6 +203,8 @@ def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
|
205
203
|
except ValueError:
|
|
206
204
|
blockers.append(_issue("profile-host-version-policy-invalid", mode=mode))
|
|
207
205
|
|
|
206
|
+
|
|
207
|
+
def _profile_qualification(profile: dict[str, Any], blockers: list[dict[str, Any]]) -> None:
|
|
208
208
|
qualification = profile.get("qualification")
|
|
209
209
|
if not isinstance(qualification, dict):
|
|
210
210
|
blockers.append(_issue("profile-qualification-invalid"))
|
|
@@ -222,6 +222,23 @@ def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
|
222
222
|
if qualification.get("modelCalls") != 0 or qualification.get("hostLaunch") is not True:
|
|
223
223
|
blockers.append(_issue("profile-qualification-safety"))
|
|
224
224
|
|
|
225
|
+
|
|
226
|
+
def validate_qualification_profile(profile: dict[str, Any]) -> dict[str, Any]:
|
|
227
|
+
"""Validate a data-only client profile and its self-digest."""
|
|
228
|
+
|
|
229
|
+
blockers: list[dict[str, Any]] = []
|
|
230
|
+
if not isinstance(profile, dict):
|
|
231
|
+
return _validation([_issue("profile-not-object")])
|
|
232
|
+
_required_text(profile, "schemaVersion", PROFILE_SCHEMA, blockers)
|
|
233
|
+
for field in ("profileId", "adapterId", "client", "host"):
|
|
234
|
+
if not isinstance(profile.get(field), str) or not profile[field].strip():
|
|
235
|
+
blockers.append(_issue("profile-field-invalid", field=field))
|
|
236
|
+
_profile_package(profile, blockers)
|
|
237
|
+
_profile_discovery(profile, blockers)
|
|
238
|
+
_profile_installation(profile, blockers)
|
|
239
|
+
_profile_environment(profile, blockers)
|
|
240
|
+
_profile_host_version(profile, blockers)
|
|
241
|
+
_profile_qualification(profile, blockers)
|
|
225
242
|
boundary = profile.get("descriptorBoundary")
|
|
226
243
|
if (
|
|
227
244
|
not isinstance(boundary, dict)
|
|
@@ -12,6 +12,7 @@ import time
|
|
|
12
12
|
import uuid
|
|
13
13
|
from collections.abc import Iterator
|
|
14
14
|
from contextlib import ExitStack, contextmanager, suppress
|
|
15
|
+
from functools import cache
|
|
15
16
|
from pathlib import Path
|
|
16
17
|
from typing import Any, BinaryIO
|
|
17
18
|
|
|
@@ -165,7 +166,7 @@ class _Directory:
|
|
|
165
166
|
def stat_child(self, name: str) -> os.stat_result:
|
|
166
167
|
if self.fd is not None:
|
|
167
168
|
return os.stat(name, dir_fd=self.fd, follow_symlinks=False)
|
|
168
|
-
return (self.path
|
|
169
|
+
return os.stat(os.path.join(self.path, name), follow_symlinks=False) # noqa: PTH116, PTH118
|
|
169
170
|
|
|
170
171
|
def open_child(self, name: str) -> int:
|
|
171
172
|
if self.fd is not None:
|
|
@@ -207,11 +208,7 @@ class _Directory:
|
|
|
207
208
|
elif self.handle is not None:
|
|
208
209
|
if not self.writable:
|
|
209
210
|
raise LifecycleError("authority-io-unavailable", "Directory write authority is required")
|
|
210
|
-
from ctypes import wintypes
|
|
211
|
-
|
|
212
211
|
api = _windows_api()
|
|
213
|
-
api.FlushFileBuffers.argtypes = [wintypes.HANDLE]
|
|
214
|
-
api.FlushFileBuffers.restype = wintypes.BOOL
|
|
215
212
|
if not api.FlushFileBuffers(self.handle):
|
|
216
213
|
raise LifecycleError("authority-durability-unavailable", "Directory durability barrier failed")
|
|
217
214
|
else:
|
|
@@ -484,6 +481,18 @@ def append_authority_bytes(path: Path, data: bytes, *, root: Path | None = None)
|
|
|
484
481
|
|
|
485
482
|
|
|
486
483
|
def _windows_api() -> Any:
|
|
484
|
+
if sys.platform != "win32":
|
|
485
|
+
raise LifecycleError("authority-io-unavailable", "Windows authority I/O is unavailable")
|
|
486
|
+
return _windows_api_bindings()
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
@cache
|
|
490
|
+
def _windows_api_bindings() -> Any:
|
|
491
|
+
"""Publish only complete bindings; concurrent first calls may build equivalent copies.
|
|
492
|
+
|
|
493
|
+
Cache DLL/function configuration only. Handles, I/O, identities and ctypes'
|
|
494
|
+
thread-local last-error values remain live at each call site.
|
|
495
|
+
"""
|
|
487
496
|
if sys.platform != "win32":
|
|
488
497
|
raise LifecycleError("authority-io-unavailable", "Windows authority I/O is unavailable")
|
|
489
498
|
import ctypes
|
|
@@ -504,6 +513,8 @@ def _windows_api() -> Any:
|
|
|
504
513
|
api.CloseHandle.restype = wintypes.BOOL
|
|
505
514
|
api.GetFileInformationByHandleEx.argtypes = [wintypes.HANDLE, ctypes.c_int, wintypes.LPVOID, wintypes.DWORD]
|
|
506
515
|
api.GetFileInformationByHandleEx.restype = wintypes.BOOL
|
|
516
|
+
api.FlushFileBuffers.argtypes = [wintypes.HANDLE]
|
|
517
|
+
api.FlushFileBuffers.restype = wintypes.BOOL
|
|
507
518
|
return api
|
|
508
519
|
|
|
509
520
|
|
|
@@ -32,7 +32,7 @@ class PerformanceLimits:
|
|
|
32
32
|
max_simple_literal_rules: int = 64
|
|
33
33
|
max_linux_group_samples_per_second: int = 4
|
|
34
34
|
max_ed25519_optimized_to_reference_median_ratio_bps: int = 2_000
|
|
35
|
-
max_benchmark_samples_per_case: int =
|
|
35
|
+
max_benchmark_samples_per_case: int = 7
|
|
36
36
|
max_benchmark_output_bytes: int = 16 * 1024 * 1024
|
|
37
37
|
max_evidence_bytes_per_run: int = 96 * 1024 * 1024
|
|
38
38
|
|
|
@@ -126,7 +126,26 @@ def validate_performance_policy(policy: Mapping[str, Any]) -> PerformanceLimits:
|
|
|
126
126
|
if not isinstance(raw_limits, Mapping):
|
|
127
127
|
raise LifecycleError("performance-policy-limits-invalid", "performance policy limits must be an object")
|
|
128
128
|
limits = performance_limits_from_json(raw_limits)
|
|
129
|
-
|
|
129
|
+
_validate_benchmark_policy(policy.get("benchmark"), limits)
|
|
130
|
+
operations = policy.get("operations")
|
|
131
|
+
if (
|
|
132
|
+
not isinstance(operations, list)
|
|
133
|
+
or not operations
|
|
134
|
+
or not all(isinstance(item, str) and item for item in operations)
|
|
135
|
+
):
|
|
136
|
+
raise LifecycleError(
|
|
137
|
+
"performance-policy-operations-invalid", "performance policy operations must be non-empty strings"
|
|
138
|
+
)
|
|
139
|
+
if len(set(operations)) != len(operations):
|
|
140
|
+
raise LifecycleError("performance-policy-operations-invalid", "performance policy operations must be unique")
|
|
141
|
+
if policy.get("productionPromotionClaimed") is not False:
|
|
142
|
+
raise LifecycleError(
|
|
143
|
+
"performance-policy-promotion-invalid", "performance policy cannot claim production promotion"
|
|
144
|
+
)
|
|
145
|
+
return limits
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def _validate_benchmark_policy(benchmark: Any, limits: PerformanceLimits) -> None:
|
|
130
149
|
if not isinstance(benchmark, Mapping):
|
|
131
150
|
raise LifecycleError("performance-policy-benchmark-invalid", "performance policy benchmark must be an object")
|
|
132
151
|
benchmark_allowed = {
|
|
@@ -153,22 +172,27 @@ def validate_performance_policy(policy: Mapping[str, Any]) -> PerformanceLimits:
|
|
|
153
172
|
raise LifecycleError("performance-policy-benchmark-exceeds-limit", "samplesPerCase exceeds the typed ceiling")
|
|
154
173
|
if benchmark["maxOutputBytes"] > limits.max_benchmark_output_bytes:
|
|
155
174
|
raise LifecycleError("performance-policy-benchmark-exceeds-limit", "maxOutputBytes exceeds the typed ceiling")
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
175
|
+
_validate_benchmark_caps(benchmark, limits)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def _validate_benchmark_caps(benchmark: Mapping[str, Any], limits: PerformanceLimits) -> None:
|
|
179
|
+
hard_caps = {
|
|
180
|
+
"warmupSamples": 2,
|
|
181
|
+
"samplesPerCase": 7,
|
|
182
|
+
"maxCommandWallSeconds": 120,
|
|
183
|
+
"maxTotalWallSeconds": 600,
|
|
184
|
+
"maxOutputBytes": 16 * 1024 * 1024,
|
|
185
|
+
}
|
|
186
|
+
if any(benchmark[name] > cap for name, cap in hard_caps.items()):
|
|
162
187
|
raise LifecycleError(
|
|
163
|
-
"performance-policy-
|
|
188
|
+
"performance-policy-benchmark-exceeds-limit",
|
|
189
|
+
"Benchmark exceeds an immutable sampling, wall or output ceiling",
|
|
164
190
|
)
|
|
165
|
-
if
|
|
166
|
-
raise LifecycleError("performance-policy-operations-invalid", "performance policy operations must be unique")
|
|
167
|
-
if policy.get("productionPromotionClaimed") is not False:
|
|
191
|
+
if limits.max_benchmark_samples_per_case > 7 or limits.max_benchmark_output_bytes > 16 * 1024 * 1024:
|
|
168
192
|
raise LifecycleError(
|
|
169
|
-
"performance-policy-
|
|
193
|
+
"performance-policy-benchmark-exceeds-limit",
|
|
194
|
+
"Typed benchmark ceilings cannot exceed the hard limits",
|
|
170
195
|
)
|
|
171
|
-
return limits
|
|
172
196
|
|
|
173
197
|
|
|
174
198
|
__all__ = [
|