agent-lifecycle-kit 1.76.0__tar.gz → 1.78.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_lifecycle_kit-1.76.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-1.78.0}/PKG-INFO +4 -4
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/README.md +3 -3
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/pyproject.toml +29 -7
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/__init__.py +1 -1
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/_version.py +1 -1
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +12 -108
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +19 -17
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +6 -5
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +65 -17
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +44 -14
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +101 -49
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +22 -14
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/adapter_sessions/worktree_identity.py +189 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_integrity.py +15 -1
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/reporting.py +26 -12
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/cli/command_registry.py +41 -0
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/cli/dispatch.py +88 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_planning.py +15 -14
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/cli/errors.py +29 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +17 -5
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/main.py +11 -5
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/metrics_parser.py +9 -3
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/observability_parsers.py +1 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/parsers.py +46 -21
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/planning_parsers.py +7 -1
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/policy.py +7 -3
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/small_model_packets.py +20 -4
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/checkpoint_store.py +19 -9
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/contracts/performance_limits.py +181 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +9 -5
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +71 -21
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +26 -14
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data/__init__.py +1 -0
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +70 -0
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +103 -0
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +21 -0
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +126 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/readiness.py +66 -17
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/view.py +7 -5
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/planning.py +19 -9
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/cost_collection.py +8 -10
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/resolver.py +51 -23
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/canonical.py +2 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/ed25519.py +59 -24
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/neutrality/git_objects.py +177 -0
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/neutrality/matching.py +95 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/scanner.py +34 -82
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/quality_floor.py +13 -2
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/presets.py +13 -11
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/usage_export.py +9 -4
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/provenance.py +12 -7
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/validation.py +56 -23
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/resources.py +60 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/attempt_snapshots.py +45 -13
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_check.py +7 -2
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/leases.py +24 -7
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +4 -4
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +15 -3
- agent_lifecycle_kit-1.76.0/src/agent_lifecycle/cli/dispatch.py +0 -59
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/LICENSE +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/NOTICE +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/README.md +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/manifest.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/setup.cfg +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/__main__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/implementation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/ownership.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/package.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/changesets/git.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/adapter.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/followup.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/project.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/research.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/start.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/strategy.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/worktree.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/external_memory.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/profiles.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/rendering.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/errors.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/paths.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data}/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data}/profiles/project-workflow-presets/quick-change.v1.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0/src/agent_lifecycle/data}/profiles/project-workflow-presets/research-review.v1.json +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/followup/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/followup/records.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/locks.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/records.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/costs.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/completeness.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/continuity.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/deltas.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/templates.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/tiering.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/apply.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/proposals.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/guidance.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/merge.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/principles.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/profile.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/py.typed +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/packs.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/evidence.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review/validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/results.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/core.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/validation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/controller.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/events.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/gates.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/query.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/state.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
- {agent_lifecycle_kit-1.76.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/top_level.txt +0 -0
{agent_lifecycle_kit-1.76.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-1.78.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-lifecycle-kit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.78.0
|
|
4
4
|
Summary: Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion.
|
|
5
5
|
Author: Agent Lifecycle Kit contributors
|
|
6
6
|
License: Apache-2.0
|
|
@@ -43,7 +43,7 @@ ALK provides a verifiable finish for external-agent work with proportionate cont
|
|
|
43
43
|
## Quick start
|
|
44
44
|
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md).
|
|
45
45
|
|
|
46
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==1.
|
|
46
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==1.78.0`, and common `agent-lifecycle version` errors.
|
|
47
47
|
|
|
48
48
|
For a quick start, run:
|
|
49
49
|
|
|
@@ -64,7 +64,6 @@ and pass a task from a file:
|
|
|
64
64
|
agent-lifecycle start --adapter <adapter-id> --file task.md
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
- Start with [quickstart](docs/guides/quickstart.md).
|
|
68
67
|
- Then choose a suitable scenario in [how ALK works for different tasks](docs/guides/how-alk-works.md).
|
|
69
68
|
- The boundaries of [planning-only launch](docs/reference/planning-only-launch.md) and [frozen-task launch through a verified profile](docs/reference/qualified-host-launch.md) are documented in the reference. Shipped planning profiles remain candidates with safe failure until the corresponding profile is verified.
|
|
70
69
|
- The [system architecture](docs/architecture/system-architecture.md) page explains how the project is organized, and [project comparison](docs/reference/project-comparison.md) shows how it differs from similar tools.
|
|
@@ -81,6 +80,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
|
|
|
81
80
|
composes risk, model class, packet size, review and resource limits.
|
|
82
81
|
- Usage visibility: tokens, time, resource counters and structured execution records without sensitive data are native; monetary cost is optional and only used when a metered host reports it.
|
|
83
82
|
- Project-specific workflow settings: ALK can discover and validate uncommitted local defaults, or apply a built-in workflow preset for a common route, while the frozen plan remains authoritative.
|
|
83
|
+
- Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources, an explicit documented Python API, and bounded performance controls that preserve security and evidence rules.
|
|
84
84
|
- Project principles and plan deltas keep long-running work understandable: principles provide bounded defaults, while a digest-bound delta shows which plan authority changed and whether review and a new lock are required. CI also checks an acyclic module/package graph, layer direction and source-size limits; adapter inspection uses bounded literal profiles and fails closed without executing adapter code.
|
|
85
85
|
- Read-only progress and managed sessions: host UIs can show lifecycle state,
|
|
86
86
|
attested tokens and Git-style change counters; `start` accepts task text,
|
|
@@ -195,7 +195,7 @@ Adapter installation and support-level details live in [Adapter install](docs/ad
|
|
|
195
195
|
- Start: [English documentation](docs/README.md), [Русская документация](docs/ru/README.md), [Install](docs/guides/install-and-first-run.md), [Quickstart](docs/guides/quickstart.md), [Beginner and advanced workflows](docs/guides/beginner-and-advanced-workflows.md), [Commands by task](docs/guides/commands-by-task.md), [Research workflow](docs/guides/research-workflow.md), [Lifecycle task scenarios](docs/guides/lifecycle-cookbook.md), and [Code review workflows](docs/guides/code-review-workflows.md).
|
|
196
196
|
- Planning and adapters: [Issue to specification drafts](docs/guides/issue-to-spec.md), [Adapter install](docs/adapters/install.md), and [Adapter support matrix](docs/adapters/support-matrix.md).
|
|
197
197
|
- Reference: [System architecture](docs/architecture/system-architecture.md), [workflow customization and execution controls](docs/reference/workflow-customization.md), [execution strategy](docs/reference/execution-strategy.md), [CLI reference](docs/reference/cli.md), [Research evidence](docs/reference/research-evidence.md), [Source of truth](docs/reference/source-of-truth.md), [Managed lifecycle runner](docs/reference/managed-lifecycle-runner.md), [Managed adapter sessions](docs/reference/managed-adapter-sessions.md), [Portable Agent Plugins](docs/reference/agent-plugins.md), [Plugin publication](docs/reference/plugin-publication.md), [Implementation audit](docs/reference/implementation-audit.md), [Plan completeness](docs/reference/plan-completeness.md), [Public contracts](docs/reference/public-contracts.md), and [Readiness diagnostics](docs/reference/readiness-diagnostics.md).
|
|
198
|
-
- Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
|
|
198
|
+
- Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [performance and resource budgets](docs/reference/performance-and-resource-budgets.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
|
|
199
199
|
- Profiles and operations: [Project workflow presets](docs/reference/workflow-presets.md), [Project workflow profile](docs/reference/project-workflow-profile.md), [Read-only status views](docs/reference/read-only-status-view.md), [Adapter progress bridge](docs/reference/automatic-progress-bridge.md), [Sandbox boundaries](docs/reference/sandbox-boundaries.md), [Import mappers](docs/reference/import-mappers.md), [Episode retrieval](docs/reference/episode-retrieval.md), [Runner recovery](docs/reference/runner-recovery.md), [Cross-check profile](docs/reference/cross-check-profile.md), [Review Mesh](docs/reference/review-mesh.md), [Bug Forensics profile](docs/reference/bug-forensics.md), and [Bug Forensics context budget](docs/reference/bug-forensics-context-budget.md).
|
|
200
200
|
- Release assets: [Task templates](templates/tasks/README.md), [Neutrality scanning](docs/reference/neutrality.md), and [Release security](docs/security/release-security.md).
|
|
201
201
|
|
|
@@ -21,7 +21,7 @@ ALK provides a verifiable finish for external-agent work with proportionate cont
|
|
|
21
21
|
## Quick start
|
|
22
22
|
Start with [install ALK and make the first run](docs/guides/install-and-first-run.md).
|
|
23
23
|
|
|
24
|
-
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==1.
|
|
24
|
+
It includes macOS, Linux and Windows instructions, Python 3.11-3.14, [PyPI](https://pypi.org/project/agent-lifecycle-kit/) installation with `python -m pip install agent-lifecycle-kit==1.78.0`, and common `agent-lifecycle version` errors.
|
|
25
25
|
|
|
26
26
|
For a quick start, run:
|
|
27
27
|
|
|
@@ -42,7 +42,6 @@ and pass a task from a file:
|
|
|
42
42
|
agent-lifecycle start --adapter <adapter-id> --file task.md
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
- Start with [quickstart](docs/guides/quickstart.md).
|
|
46
45
|
- Then choose a suitable scenario in [how ALK works for different tasks](docs/guides/how-alk-works.md).
|
|
47
46
|
- The boundaries of [planning-only launch](docs/reference/planning-only-launch.md) and [frozen-task launch through a verified profile](docs/reference/qualified-host-launch.md) are documented in the reference. Shipped planning profiles remain candidates with safe failure until the corresponding profile is verified.
|
|
48
47
|
- The [system architecture](docs/architecture/system-architecture.md) page explains how the project is organized, and [project comparison](docs/reference/project-comparison.md) shows how it differs from similar tools.
|
|
@@ -59,6 +58,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
|
|
|
59
58
|
composes risk, model class, packet size, review and resource limits.
|
|
60
59
|
- Usage visibility: tokens, time, resource counters and structured execution records without sensitive data are native; monetary cost is optional and only used when a metered host reports it.
|
|
61
60
|
- Project-specific workflow settings: ALK can discover and validate uncommitted local defaults, or apply a built-in workflow preset for a common route, while the frozen plan remains authoritative.
|
|
61
|
+
- Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources, an explicit documented Python API, and bounded performance controls that preserve security and evidence rules.
|
|
62
62
|
- Project principles and plan deltas keep long-running work understandable: principles provide bounded defaults, while a digest-bound delta shows which plan authority changed and whether review and a new lock are required. CI also checks an acyclic module/package graph, layer direction and source-size limits; adapter inspection uses bounded literal profiles and fails closed without executing adapter code.
|
|
63
63
|
- Read-only progress and managed sessions: host UIs can show lifecycle state,
|
|
64
64
|
attested tokens and Git-style change counters; `start` accepts task text,
|
|
@@ -173,7 +173,7 @@ Adapter installation and support-level details live in [Adapter install](docs/ad
|
|
|
173
173
|
- Start: [English documentation](docs/README.md), [Русская документация](docs/ru/README.md), [Install](docs/guides/install-and-first-run.md), [Quickstart](docs/guides/quickstart.md), [Beginner and advanced workflows](docs/guides/beginner-and-advanced-workflows.md), [Commands by task](docs/guides/commands-by-task.md), [Research workflow](docs/guides/research-workflow.md), [Lifecycle task scenarios](docs/guides/lifecycle-cookbook.md), and [Code review workflows](docs/guides/code-review-workflows.md).
|
|
174
174
|
- Planning and adapters: [Issue to specification drafts](docs/guides/issue-to-spec.md), [Adapter install](docs/adapters/install.md), and [Adapter support matrix](docs/adapters/support-matrix.md).
|
|
175
175
|
- Reference: [System architecture](docs/architecture/system-architecture.md), [workflow customization and execution controls](docs/reference/workflow-customization.md), [execution strategy](docs/reference/execution-strategy.md), [CLI reference](docs/reference/cli.md), [Research evidence](docs/reference/research-evidence.md), [Source of truth](docs/reference/source-of-truth.md), [Managed lifecycle runner](docs/reference/managed-lifecycle-runner.md), [Managed adapter sessions](docs/reference/managed-adapter-sessions.md), [Portable Agent Plugins](docs/reference/agent-plugins.md), [Plugin publication](docs/reference/plugin-publication.md), [Implementation audit](docs/reference/implementation-audit.md), [Plan completeness](docs/reference/plan-completeness.md), [Public contracts](docs/reference/public-contracts.md), and [Readiness diagnostics](docs/reference/readiness-diagnostics.md).
|
|
176
|
-
- Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
|
|
176
|
+
- Quality and resources: [Reference-task evaluation](docs/reference/reference-task-evaluation.md), [model routing](docs/reference/model-routing.md), [quality-cost learning](docs/reference/quality-cost-learning.md), [performance and resource budgets](docs/reference/performance-and-resource-budgets.md), [lifecycle cost accounting](docs/reference/lifecycle-cost.md), [host-local token accounting](docs/reference/host-local-token-accounting.md), [process execution observability](docs/reference/process-execution-observability.md), [Usage export](docs/reference/usage-export.md), and [Evidence integrity](docs/reference/evidence-integrity.md).
|
|
177
177
|
- Profiles and operations: [Project workflow presets](docs/reference/workflow-presets.md), [Project workflow profile](docs/reference/project-workflow-profile.md), [Read-only status views](docs/reference/read-only-status-view.md), [Adapter progress bridge](docs/reference/automatic-progress-bridge.md), [Sandbox boundaries](docs/reference/sandbox-boundaries.md), [Import mappers](docs/reference/import-mappers.md), [Episode retrieval](docs/reference/episode-retrieval.md), [Runner recovery](docs/reference/runner-recovery.md), [Cross-check profile](docs/reference/cross-check-profile.md), [Review Mesh](docs/reference/review-mesh.md), [Bug Forensics profile](docs/reference/bug-forensics.md), and [Bug Forensics context budget](docs/reference/bug-forensics-context-budget.md).
|
|
178
178
|
- Release assets: [Task templates](templates/tasks/README.md), [Neutrality scanning](docs/reference/neutrality.md), and [Release security](docs/security/release-security.md).
|
|
179
179
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-lifecycle-kit"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.78.0"
|
|
8
8
|
description = "Provider-neutral lifecycle control layer that helps coding agents plan, execute, validate, and prove software tasks to completion."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.15"
|
|
@@ -39,6 +39,13 @@ classifiers = [
|
|
|
39
39
|
]
|
|
40
40
|
dependencies = []
|
|
41
41
|
|
|
42
|
+
[dependency-groups]
|
|
43
|
+
quality = [
|
|
44
|
+
"ruff==0.16.3",
|
|
45
|
+
"mypy==1.17.1",
|
|
46
|
+
"coverage==7.10.6",
|
|
47
|
+
]
|
|
48
|
+
|
|
42
49
|
[project.scripts]
|
|
43
50
|
agent-lifecycle = "agent_lifecycle.cli:main"
|
|
44
51
|
agent-lifecycle-neutrality = "agent_lifecycle.neutrality.cli:main"
|
|
@@ -47,14 +54,29 @@ agent-lifecycle-neutrality = "agent_lifecycle.neutrality.cli:main"
|
|
|
47
54
|
where = ["src"]
|
|
48
55
|
|
|
49
56
|
[tool.setuptools.package-data]
|
|
50
|
-
agent_lifecycle = ["py.typed"]
|
|
57
|
+
agent_lifecycle = ["py.typed", "data/profiles/**/*.json"]
|
|
58
|
+
|
|
59
|
+
[tool.ruff]
|
|
60
|
+
target-version = "py311"
|
|
61
|
+
line-length = 120
|
|
62
|
+
src = ["src"]
|
|
63
|
+
|
|
64
|
+
[tool.ruff.lint]
|
|
65
|
+
select = ["E4", "E7", "E9", "F", "B", "I", "UP", "RUF", "SIM", "PTH", "ARG", "BLE"]
|
|
66
|
+
|
|
67
|
+
[tool.ruff.lint.isort]
|
|
68
|
+
known-first-party = ["agent_lifecycle"]
|
|
69
|
+
|
|
70
|
+
[tool.ruff.format]
|
|
71
|
+
quote-style = "double"
|
|
72
|
+
|
|
73
|
+
[tool.mypy]
|
|
74
|
+
python_version = "3.11"
|
|
75
|
+
files = ["src/agent_lifecycle"]
|
|
76
|
+
ignore_missing_imports = true
|
|
77
|
+
show_error_codes = true
|
|
51
78
|
|
|
52
79
|
[tool.setuptools.data-files]
|
|
53
|
-
"profiles/project-workflow-presets" = [
|
|
54
|
-
"profiles/project-workflow-presets/quick-change.v1.json",
|
|
55
|
-
"profiles/project-workflow-presets/research-review.v1.json",
|
|
56
|
-
"profiles/project-workflow-presets/feature-implementation.v1.json",
|
|
57
|
-
]
|
|
58
80
|
"benchmarks/reference-tasks" = [
|
|
59
81
|
"benchmarks/reference-tasks/README.md",
|
|
60
82
|
"benchmarks/reference-tasks/manifest.json",
|
|
@@ -2,40 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import os
|
|
7
|
-
import subprocess
|
|
5
|
+
from collections.abc import Callable
|
|
8
6
|
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
10
8
|
|
|
11
9
|
from agent_lifecycle.adapter_sessions.contracts import (
|
|
12
10
|
build_launch_receipt,
|
|
13
|
-
build_local_launch_probe_receipt,
|
|
14
11
|
build_local_launch_profile_receipt,
|
|
15
12
|
)
|
|
16
13
|
from agent_lifecycle.adapter_sessions.env import resolve_launch_env
|
|
17
14
|
from agent_lifecycle.adapter_sessions.local_launch_profile import (
|
|
18
15
|
build_executable_identity,
|
|
19
16
|
load_local_launch_profile,
|
|
20
|
-
local_receipt_argv,
|
|
21
17
|
local_profile_summary,
|
|
22
|
-
planning_receipt_argv,
|
|
23
|
-
render_local_launch_argv,
|
|
24
18
|
render_planning_launch_argv,
|
|
25
19
|
)
|
|
26
20
|
from agent_lifecycle.adapter_sessions.planning_launch import run_planning_launch
|
|
27
|
-
from agent_lifecycle.adapter_sessions.process import run_process as _process_runner
|
|
28
21
|
from agent_lifecycle.adapter_sessions.qualification import (
|
|
29
|
-
build_qualification_receipt,
|
|
30
|
-
require_planning_qualification_receipt,
|
|
31
|
-
require_qualification_receipt,
|
|
32
22
|
shipped_profile_digest,
|
|
33
|
-
write_qualification_receipt,
|
|
34
23
|
)
|
|
24
|
+
from agent_lifecycle.adapter_sessions.worktree_identity import capture_git_worktree_identity
|
|
35
25
|
from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
|
|
36
|
-
from agent_lifecycle.freeze import verify_plan_package_integrity
|
|
37
26
|
from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
|
|
38
|
-
from agent_lifecycle.workflow.risk_execution_gate import validate_task_risk_profile
|
|
39
27
|
|
|
40
28
|
|
|
41
29
|
def load_adapter_descriptor(adapter_id: str, descriptor_path: Path | None = None) -> tuple[Path, dict[str, Any]]:
|
|
@@ -69,7 +57,8 @@ def launch_from_descriptor(
|
|
|
69
57
|
raw_profile = descriptor.get("managedLaunch")
|
|
70
58
|
profile = raw_profile if isinstance(raw_profile, dict) else {}
|
|
71
59
|
validation = validate_managed_launch_profile(profile)
|
|
72
|
-
|
|
60
|
+
raw_adapter_id = descriptor.get("adapterId")
|
|
61
|
+
adapter_id = raw_adapter_id if isinstance(raw_adapter_id, str) else "unknown"
|
|
73
62
|
timeout_seconds = _timeout_seconds(profile)
|
|
74
63
|
blockers: list[dict[str, Any]] = []
|
|
75
64
|
if validation["status"] != "PASS":
|
|
@@ -126,8 +115,6 @@ def inspect_local_launch_profile(
|
|
|
126
115
|
)
|
|
127
116
|
|
|
128
117
|
|
|
129
|
-
|
|
130
|
-
|
|
131
118
|
def run_planning_qualification_candidate(
|
|
132
119
|
*,
|
|
133
120
|
profile_path: Path,
|
|
@@ -198,7 +185,8 @@ def run_planning_qualification_candidate(
|
|
|
198
185
|
)
|
|
199
186
|
after = identity_runner(root)
|
|
200
187
|
blockers = list(receipt.get("blockers", []))
|
|
201
|
-
|
|
188
|
+
raw_usage = receipt.get("usageEvidence")
|
|
189
|
+
usage: dict[str, Any] = raw_usage if isinstance(raw_usage, dict) else {}
|
|
202
190
|
input_tokens = usage.get("inputTokens")
|
|
203
191
|
output_tokens = usage.get("outputTokens")
|
|
204
192
|
if usage.get("confidence") != "ATTESTED" or not isinstance(input_tokens, int) or not isinstance(output_tokens, int):
|
|
@@ -315,90 +303,6 @@ def _state_task(state: dict[str, Any], task_id: str) -> dict[str, Any]:
|
|
|
315
303
|
raise LifecycleError("local-launch-task-missing", "task is not present in workflow state", {"taskId": task_id})
|
|
316
304
|
|
|
317
305
|
|
|
318
|
-
def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
|
|
319
|
-
"""Capture normalized authoritative Git content without requiring cleanliness."""
|
|
320
|
-
|
|
321
|
-
root = project_root.resolve()
|
|
322
|
-
head = _git_bytes(root, ["rev-parse", "HEAD"]).decode("ascii", errors="strict").strip()
|
|
323
|
-
staged = _git_bytes(root, ["diff", "--cached", "--binary", "--no-ext-diff"])
|
|
324
|
-
unstaged = _git_bytes(root, ["diff", "--binary", "--no-ext-diff"])
|
|
325
|
-
submodules = _git_bytes(root, ["submodule", "status", "--recursive"])
|
|
326
|
-
untracked_raw = _git_bytes(root, ["ls-files", "--others", "--exclude-standard", "-z"])
|
|
327
|
-
untracked_rows: list[dict[str, Any]] = []
|
|
328
|
-
total_bytes = 0
|
|
329
|
-
for raw_name in sorted(item for item in untracked_raw.split(b"\0") if item):
|
|
330
|
-
relative = os.fsdecode(raw_name)
|
|
331
|
-
path = root / relative
|
|
332
|
-
try:
|
|
333
|
-
before = path.lstat()
|
|
334
|
-
if path.is_symlink():
|
|
335
|
-
payload = os.fsencode(os.readlink(path))
|
|
336
|
-
kind = "symlink"
|
|
337
|
-
else:
|
|
338
|
-
payload = path.read_bytes()
|
|
339
|
-
kind = "file"
|
|
340
|
-
after = path.lstat()
|
|
341
|
-
except OSError as exc:
|
|
342
|
-
raise LifecycleError(
|
|
343
|
-
"planning-worktree-read-race",
|
|
344
|
-
"failed to capture an untracked worktree entry",
|
|
345
|
-
{"errorType": type(exc).__name__},
|
|
346
|
-
) from exc
|
|
347
|
-
if (before.st_size, before.st_mtime_ns) != (after.st_size, after.st_mtime_ns):
|
|
348
|
-
raise LifecycleError(
|
|
349
|
-
"planning-worktree-read-race",
|
|
350
|
-
"untracked worktree entry changed during identity capture",
|
|
351
|
-
)
|
|
352
|
-
total_bytes += len(payload)
|
|
353
|
-
untracked_rows.append(
|
|
354
|
-
{
|
|
355
|
-
"pathBytesSha256": hashlib.sha256(raw_name).hexdigest(),
|
|
356
|
-
"kind": kind,
|
|
357
|
-
"bytes": len(payload),
|
|
358
|
-
"sha256": hashlib.sha256(payload).hexdigest(),
|
|
359
|
-
}
|
|
360
|
-
)
|
|
361
|
-
body = {
|
|
362
|
-
"schemaVersion": "agent-planning-worktree-identity.v1",
|
|
363
|
-
"head": head,
|
|
364
|
-
"stagedDiffSha256": hashlib.sha256(staged).hexdigest(),
|
|
365
|
-
"unstagedDiffSha256": hashlib.sha256(unstaged).hexdigest(),
|
|
366
|
-
"submoduleStateSha256": hashlib.sha256(submodules).hexdigest(),
|
|
367
|
-
"untrackedTreeSha256": canonical_digest({"entries": untracked_rows}),
|
|
368
|
-
"untrackedCount": len(untracked_rows),
|
|
369
|
-
"untrackedBytes": total_bytes,
|
|
370
|
-
"ignoredLocalStateExcluded": True,
|
|
371
|
-
}
|
|
372
|
-
return {**body, "identityDigest": canonical_digest(body)}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
def _git_bytes(root: Path, args: list[str]) -> bytes:
|
|
376
|
-
try:
|
|
377
|
-
result = subprocess.run(
|
|
378
|
-
["git", *args],
|
|
379
|
-
cwd=root,
|
|
380
|
-
shell=False,
|
|
381
|
-
stdin=subprocess.DEVNULL,
|
|
382
|
-
stdout=subprocess.PIPE,
|
|
383
|
-
stderr=subprocess.PIPE,
|
|
384
|
-
timeout=10,
|
|
385
|
-
check=False,
|
|
386
|
-
)
|
|
387
|
-
except (OSError, subprocess.TimeoutExpired) as exc:
|
|
388
|
-
raise LifecycleError(
|
|
389
|
-
"planning-worktree-identity-failed",
|
|
390
|
-
"Git identity capture failed closed",
|
|
391
|
-
{"errorType": type(exc).__name__},
|
|
392
|
-
) from exc
|
|
393
|
-
if result.returncode != 0:
|
|
394
|
-
raise LifecycleError(
|
|
395
|
-
"planning-worktree-identity-failed",
|
|
396
|
-
"Git identity command failed closed",
|
|
397
|
-
{"command": args[0], "exitCode": result.returncode},
|
|
398
|
-
)
|
|
399
|
-
return result.stdout
|
|
400
|
-
|
|
401
|
-
|
|
402
306
|
def _blocked_planning_launch(
|
|
403
307
|
*,
|
|
404
308
|
adapter_id: str,
|
|
@@ -478,7 +382,8 @@ def _planning_qualification_report(
|
|
|
478
382
|
and before.get("identityDigest") == after.get("identityDigest")
|
|
479
383
|
and not blockers
|
|
480
384
|
)
|
|
481
|
-
|
|
385
|
+
raw_policy = profile.get("qualification")
|
|
386
|
+
policy: dict[str, Any] = raw_policy if isinstance(raw_policy, dict) else {}
|
|
482
387
|
body = {
|
|
483
388
|
"schemaVersion": "agent-planning-launch-qualification-evidence.v1",
|
|
484
389
|
"status": "PASS" if passed else "FAIL",
|
|
@@ -490,7 +395,8 @@ def _planning_qualification_report(
|
|
|
490
395
|
"maxWallSeconds": approved_wall_seconds,
|
|
491
396
|
"modelTokenBudget": approved_model_token_budget,
|
|
492
397
|
},
|
|
493
|
-
"usageEvidence": usage_evidence
|
|
398
|
+
"usageEvidence": usage_evidence
|
|
399
|
+
or {
|
|
494
400
|
"confidence": "MISSING",
|
|
495
401
|
"inputTokens": None,
|
|
496
402
|
"outputTokens": None,
|
|
@@ -499,9 +405,7 @@ def _planning_qualification_report(
|
|
|
499
405
|
"planningSupportStatus": "PLANNING_ONLY_QUALIFIED" if passed else "PLANNING_ONLY_UNSUPPORTED",
|
|
500
406
|
"processCalls": 1 if receipt and receipt.get("hostLaunchStarted") else 0,
|
|
501
407
|
"modelCallsStarted": bool(receipt and receipt.get("modelCallsStarted")),
|
|
502
|
-
"worktreeUnchanged": bool(
|
|
503
|
-
before and after and before.get("identityDigest") == after.get("identityDigest")
|
|
504
|
-
),
|
|
408
|
+
"worktreeUnchanged": bool(before and after and before.get("identityDigest") == after.get("identityDigest")),
|
|
505
409
|
"planningReceiptDigest": receipt.get("receiptDigest") if receipt else None,
|
|
506
410
|
"blockers": blockers,
|
|
507
411
|
"productionPromotionClaimed": False,
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from collections.abc import Callable
|
|
5
6
|
from dataclasses import dataclass
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
8
9
|
|
|
9
10
|
from agent_lifecycle.adapter_sessions.contracts import (
|
|
10
11
|
build_launch_receipt,
|
|
@@ -12,11 +13,19 @@ from agent_lifecycle.adapter_sessions.contracts import (
|
|
|
12
13
|
build_local_launch_profile_receipt,
|
|
13
14
|
)
|
|
14
15
|
from agent_lifecycle.adapter_sessions.env import resolve_launch_env
|
|
16
|
+
from agent_lifecycle.adapter_sessions.launch_execution import (
|
|
17
|
+
_attach_qualification_receipt,
|
|
18
|
+
_blocked_local_launch,
|
|
19
|
+
_blocked_planning_launch,
|
|
20
|
+
_managed_launch_blockers,
|
|
21
|
+
_state_task,
|
|
22
|
+
capture_git_worktree_identity,
|
|
23
|
+
)
|
|
15
24
|
from agent_lifecycle.adapter_sessions.local_launch_profile import (
|
|
16
25
|
build_executable_identity,
|
|
17
26
|
load_local_launch_profile,
|
|
18
|
-
local_receipt_argv,
|
|
19
27
|
local_profile_summary,
|
|
28
|
+
local_receipt_argv,
|
|
20
29
|
planning_receipt_argv,
|
|
21
30
|
render_local_launch_argv,
|
|
22
31
|
render_planning_launch_argv,
|
|
@@ -32,19 +41,8 @@ from agent_lifecycle.adapter_sessions.qualification import (
|
|
|
32
41
|
)
|
|
33
42
|
from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
|
|
34
43
|
from agent_lifecycle.freeze import verify_plan_package_integrity
|
|
35
|
-
from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
|
|
36
44
|
from agent_lifecycle.workflow.risk_execution_gate import validate_task_risk_profile
|
|
37
45
|
|
|
38
|
-
from agent_lifecycle.adapter_sessions.launch_execution import (
|
|
39
|
-
_attach_qualification_receipt,
|
|
40
|
-
_blocked_local_launch,
|
|
41
|
-
_blocked_planning_launch,
|
|
42
|
-
_managed_launch_blockers,
|
|
43
|
-
_planning_qualification_report,
|
|
44
|
-
_state_task,
|
|
45
|
-
capture_git_worktree_identity,
|
|
46
|
-
)
|
|
47
|
-
|
|
48
46
|
|
|
49
47
|
@dataclass(frozen=True)
|
|
50
48
|
class _LaunchContext:
|
|
@@ -56,7 +54,7 @@ class _LaunchContext:
|
|
|
56
54
|
env: dict[str, str]
|
|
57
55
|
env_receipt: dict[str, Any]
|
|
58
56
|
timeout_seconds: float
|
|
59
|
-
shipped_digest: str
|
|
57
|
+
shipped_digest: str | None
|
|
60
58
|
runner: Callable[..., dict[str, Any]]
|
|
61
59
|
|
|
62
60
|
|
|
@@ -232,7 +230,9 @@ def _planning_task(
|
|
|
232
230
|
identity = _identity(context, strict=False)
|
|
233
231
|
try:
|
|
234
232
|
if identity["status"] != "PASS":
|
|
235
|
-
raise LifecycleError(
|
|
233
|
+
raise LifecycleError(
|
|
234
|
+
"local-launch-executable-identity-unavailable", "planning launch executable identity is unavailable"
|
|
235
|
+
)
|
|
236
236
|
qualification_receipt = require_planning_qualification_receipt(
|
|
237
237
|
project_root=context.root,
|
|
238
238
|
profile=context.profile,
|
|
@@ -345,7 +345,9 @@ def _managed_task(
|
|
|
345
345
|
if manifest.get("status") != "FROZEN":
|
|
346
346
|
raise LifecycleError("local-launch-frozen-plan-required", "local launch requires a frozen plan")
|
|
347
347
|
task = _state_task(state, task_id)
|
|
348
|
-
validate_task_risk_profile(
|
|
348
|
+
validate_task_risk_profile(
|
|
349
|
+
state, task, risk_profile, operation_id=operation_id, source_revision=source_revision
|
|
350
|
+
)
|
|
349
351
|
qualification_receipt = require_qualification_receipt(
|
|
350
352
|
project_root=context.root,
|
|
351
353
|
profile=context.profile,
|
|
@@ -389,7 +391,7 @@ def _run_managed_process(
|
|
|
389
391
|
operation_id: str,
|
|
390
392
|
source_revision: str,
|
|
391
393
|
risk_profile: dict[str, Any],
|
|
392
|
-
qualification_receipt: dict[str, Any],
|
|
394
|
+
qualification_receipt: dict[str, Any] | None,
|
|
393
395
|
host_identity: dict[str, Any],
|
|
394
396
|
) -> dict[str, Any]:
|
|
395
397
|
bindings = {
|
|
@@ -15,15 +15,14 @@ from agent_lifecycle.contracts import (
|
|
|
15
15
|
from agent_lifecycle.contracts.canonical import ensure_private_directory
|
|
16
16
|
from agent_lifecycle.contracts.persistence import (
|
|
17
17
|
create_private_json as write_json_create_private,
|
|
18
|
+
)
|
|
19
|
+
from agent_lifecycle.contracts.persistence import (
|
|
18
20
|
replace_private_json as write_json_replace_private,
|
|
19
|
-
require_private_json as require_private_file,
|
|
20
21
|
)
|
|
21
22
|
|
|
22
23
|
PLANNING_SESSION_SCHEMA = "agent-planning-session-state.v1"
|
|
23
24
|
PLANNING_SESSION_ROOT = Path(".alk/planning-sessions")
|
|
24
|
-
PLANNING_SESSION_STATES = frozenset(
|
|
25
|
-
{"INTAKE_ACCEPTED", "PLANNING_RUNNING", "REVIEW_REQUIRED", "BLOCKED"}
|
|
26
|
-
)
|
|
25
|
+
PLANNING_SESSION_STATES = frozenset({"INTAKE_ACCEPTED", "PLANNING_RUNNING", "REVIEW_REQUIRED", "BLOCKED"})
|
|
27
26
|
MAX_PLANNING_SESSION_BYTES = 65_536
|
|
28
27
|
_SESSION_ID = re.compile(r"^[a-f0-9]{32}$")
|
|
29
28
|
_TRANSITIONS = {
|
|
@@ -194,7 +193,9 @@ def _validate_state(
|
|
|
194
193
|
if state.get("state") not in PLANNING_SESSION_STATES:
|
|
195
194
|
raise LifecycleError("planning-session-state-invalid", "planning session state is invalid")
|
|
196
195
|
if state.get("implementationAuthorized") is not False or state.get("rawTaskTextStored") is not False:
|
|
197
|
-
raise LifecycleError(
|
|
196
|
+
raise LifecycleError(
|
|
197
|
+
"planning-session-authority-invalid", "planning session cannot carry implementation authority"
|
|
198
|
+
)
|
|
198
199
|
if state.get("productionPromotionClaimed") is not False:
|
|
199
200
|
raise LifecycleError("planning-session-production-claim", "planning session cannot claim production promotion")
|
|
200
201
|
body = {key: value for key, value in state.items() if key != "stateDigest"}
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import os
|
|
6
6
|
import signal
|
|
7
7
|
import subprocess
|
|
8
|
-
import
|
|
8
|
+
from contextlib import suppress
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
@@ -39,16 +39,12 @@ class ProcessGroupOwner:
|
|
|
39
39
|
escalation = "none"
|
|
40
40
|
if self.process.poll() is None:
|
|
41
41
|
if os.name == "posix":
|
|
42
|
-
|
|
42
|
+
with suppress(ProcessLookupError):
|
|
43
43
|
os.killpg(self.pid, signal.SIGTERM)
|
|
44
|
-
except ProcessLookupError:
|
|
45
|
-
pass
|
|
46
44
|
if not _wait_process(self.process, grace_seconds):
|
|
47
45
|
escalation = "SIGKILL"
|
|
48
|
-
|
|
46
|
+
with suppress(ProcessLookupError):
|
|
49
47
|
os.killpg(self.pid, signal.SIGKILL)
|
|
50
|
-
except ProcessLookupError:
|
|
51
|
-
pass
|
|
52
48
|
_wait_process(self.process, grace_seconds)
|
|
53
49
|
elif self._job_handle is not None:
|
|
54
50
|
_terminate_windows_job(self._job_handle)
|
|
@@ -132,7 +128,10 @@ def _create_windows_job(process: subprocess.Popen[Any]) -> int | None:
|
|
|
132
128
|
import ctypes
|
|
133
129
|
from ctypes import wintypes
|
|
134
130
|
|
|
135
|
-
|
|
131
|
+
win_dll = getattr(ctypes, "WinDLL", None)
|
|
132
|
+
if not callable(win_dll):
|
|
133
|
+
return None
|
|
134
|
+
kernel32 = win_dll("kernel32", use_last_error=True)
|
|
136
135
|
kernel32.CreateJobObjectW.argtypes = [wintypes.LPVOID, wintypes.LPCWSTR]
|
|
137
136
|
kernel32.CreateJobObjectW.restype = wintypes.HANDLE
|
|
138
137
|
kernel32.SetInformationJobObject.argtypes = [wintypes.HANDLE, wintypes.INT, ctypes.c_void_p, wintypes.DWORD]
|
|
@@ -146,20 +145,45 @@ def _create_windows_job(process: subprocess.Popen[Any]) -> int | None:
|
|
|
146
145
|
return None
|
|
147
146
|
|
|
148
147
|
class IO_COUNTERS(ctypes.Structure):
|
|
149
|
-
_fields_ = [
|
|
148
|
+
_fields_ = [
|
|
149
|
+
("ReadOperationCount", ctypes.c_uint64),
|
|
150
|
+
("WriteOperationCount", ctypes.c_uint64),
|
|
151
|
+
("OtherOperationCount", ctypes.c_uint64),
|
|
152
|
+
("ReadTransferCount", ctypes.c_uint64),
|
|
153
|
+
("WriteTransferCount", ctypes.c_uint64),
|
|
154
|
+
("OtherTransferCount", ctypes.c_uint64),
|
|
155
|
+
]
|
|
150
156
|
|
|
151
157
|
class BASIC_LIMITS(ctypes.Structure):
|
|
152
|
-
_fields_ = [
|
|
158
|
+
_fields_ = [
|
|
159
|
+
("PerProcessUserTimeLimit", ctypes.c_int64),
|
|
160
|
+
("PerJobUserTimeLimit", ctypes.c_int64),
|
|
161
|
+
("LimitFlags", wintypes.DWORD),
|
|
162
|
+
("MinimumWorkingSetSize", ctypes.c_size_t),
|
|
163
|
+
("MaximumWorkingSetSize", ctypes.c_size_t),
|
|
164
|
+
("ActiveProcessLimit", wintypes.DWORD),
|
|
165
|
+
("Affinity", ctypes.c_size_t),
|
|
166
|
+
("PriorityClass", wintypes.DWORD),
|
|
167
|
+
("SchedulingClass", wintypes.DWORD),
|
|
168
|
+
]
|
|
153
169
|
|
|
154
170
|
class EXTENDED_LIMITS(ctypes.Structure):
|
|
155
|
-
_fields_ = [
|
|
171
|
+
_fields_ = [
|
|
172
|
+
("BasicLimitInformation", BASIC_LIMITS),
|
|
173
|
+
("IoInfo", IO_COUNTERS),
|
|
174
|
+
("ProcessMemoryLimit", ctypes.c_size_t),
|
|
175
|
+
("JobMemoryLimit", ctypes.c_size_t),
|
|
176
|
+
("PeakProcessMemoryUsed", ctypes.c_size_t),
|
|
177
|
+
("PeakJobMemoryUsed", ctypes.c_size_t),
|
|
178
|
+
]
|
|
156
179
|
|
|
157
180
|
limits = EXTENDED_LIMITS()
|
|
158
181
|
limits.BasicLimitInformation.LimitFlags = 0x2000 # JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
|
|
159
182
|
if not kernel32.SetInformationJobObject(handle, 9, ctypes.byref(limits), ctypes.sizeof(limits)):
|
|
160
183
|
kernel32.CloseHandle(handle)
|
|
161
184
|
return None
|
|
162
|
-
|
|
185
|
+
process_handle = getattr(process, "_handle", None)
|
|
186
|
+
process_handle_value = getattr(process_handle, "value", process_handle)
|
|
163
187
|
if not process_handle_value:
|
|
164
188
|
kernel32.CloseHandle(handle)
|
|
165
189
|
return None
|
|
@@ -177,7 +201,10 @@ def _terminate_windows_job(handle: int) -> None:
|
|
|
177
201
|
import ctypes
|
|
178
202
|
from ctypes import wintypes
|
|
179
203
|
|
|
180
|
-
|
|
204
|
+
win_dll = getattr(ctypes, "WinDLL", None)
|
|
205
|
+
if not callable(win_dll):
|
|
206
|
+
return
|
|
207
|
+
kernel32 = win_dll("kernel32", use_last_error=True)
|
|
181
208
|
kernel32.TerminateJobObject.argtypes = [wintypes.HANDLE, wintypes.UINT]
|
|
182
209
|
kernel32.TerminateJobObject.restype = wintypes.BOOL
|
|
183
210
|
kernel32.TerminateJobObject(handle, 1)
|
|
@@ -193,11 +220,29 @@ def _windows_job_active_processes(handle: int) -> int | None:
|
|
|
193
220
|
from ctypes import wintypes
|
|
194
221
|
|
|
195
222
|
class ACCOUNTING(ctypes.Structure):
|
|
196
|
-
_fields_ = [
|
|
223
|
+
_fields_ = [
|
|
224
|
+
("TotalUserTime", ctypes.c_int64),
|
|
225
|
+
("TotalKernelTime", ctypes.c_int64),
|
|
226
|
+
("ThisPeriodTotalUserTime", ctypes.c_int64),
|
|
227
|
+
("ThisPeriodTotalKernelTime", ctypes.c_int64),
|
|
228
|
+
("TotalPageFaultCount", wintypes.DWORD),
|
|
229
|
+
("TotalProcesses", wintypes.DWORD),
|
|
230
|
+
("ActiveProcesses", wintypes.DWORD),
|
|
231
|
+
("TotalTerminatedProcesses", wintypes.DWORD),
|
|
232
|
+
]
|
|
197
233
|
|
|
198
234
|
info = ACCOUNTING()
|
|
199
|
-
|
|
200
|
-
|
|
235
|
+
win_dll = getattr(ctypes, "WinDLL", None)
|
|
236
|
+
if not callable(win_dll):
|
|
237
|
+
return None
|
|
238
|
+
kernel32 = win_dll("kernel32", use_last_error=True)
|
|
239
|
+
kernel32.QueryInformationJobObject.argtypes = [
|
|
240
|
+
wintypes.HANDLE,
|
|
241
|
+
wintypes.INT,
|
|
242
|
+
ctypes.c_void_p,
|
|
243
|
+
wintypes.DWORD,
|
|
244
|
+
ctypes.POINTER(wintypes.DWORD),
|
|
245
|
+
]
|
|
201
246
|
kernel32.QueryInformationJobObject.restype = wintypes.BOOL
|
|
202
247
|
if not kernel32.QueryInformationJobObject(handle, 1, ctypes.byref(info), ctypes.sizeof(info), None):
|
|
203
248
|
return None
|
|
@@ -211,7 +256,10 @@ def _close_windows_handle(handle: int) -> None:
|
|
|
211
256
|
import ctypes
|
|
212
257
|
from ctypes import wintypes
|
|
213
258
|
|
|
214
|
-
|
|
259
|
+
win_dll = getattr(ctypes, "WinDLL", None)
|
|
260
|
+
if not callable(win_dll):
|
|
261
|
+
return
|
|
262
|
+
kernel32 = win_dll("kernel32", use_last_error=True)
|
|
215
263
|
kernel32.CloseHandle.argtypes = [wintypes.HANDLE]
|
|
216
264
|
kernel32.CloseHandle.restype = wintypes.BOOL
|
|
217
265
|
kernel32.CloseHandle(handle)
|