agent-lifecycle-kit 1.77.0__tar.gz → 1.78.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_lifecycle_kit-1.77.0/src/agent_lifecycle_kit.egg-info → agent_lifecycle_kit-1.78.0}/PKG-INFO +4 -4
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/README.md +3 -3
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/pyproject.toml +1 -1
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/_version.py +1 -1
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launch_execution.py +1 -86
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_telemetry.py +44 -14
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/adapter_sessions/worktree_identity.py +189 -0
- 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.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/main.py +3 -2
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/parsers.py +44 -30
- agent_lifecycle_kit-1.78.0/src/agent_lifecycle/contracts/performance_limits.py +181 -0
- {agent_lifecycle_kit-1.77.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.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/scanner.py +34 -82
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0/src/agent_lifecycle_kit.egg-info}/PKG-INFO +4 -4
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/SOURCES.txt +5 -0
- agent_lifecycle_kit-1.77.0/src/agent_lifecycle/cli/dispatch.py +0 -59
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/LICENSE +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/NOTICE +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/README.md +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/manifest.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt01-planning/oracle.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt01-planning/task.md +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt02-architecture-review/oracle.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt02-architecture-review/task.md +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt03-bug-forensics/oracle.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt03-bug-forensics/task.md +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt04-s1-managed-task/oracle.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt04-s1-managed-task/task.md +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/oracle.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/benchmarks/reference-tasks/rt05-s2-evidence-task/task.md +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/setup.cfg +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/__main__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/agent_plugin_probe.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/contracts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/env.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launch_preflight.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/launcher.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/local_launch_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/planning_launch.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/planning_session.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_capture.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_control.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/process_groups.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/qualification.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/redaction.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/session_store.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_input.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_receipts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/start_routing.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/task_intake.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/unified_start.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/adapter_sessions/workflow_bridge.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/bug_forensics.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/implementation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/ownership.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/package.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_chain.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_findings.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/proof_integrity.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/audit/review_verdict.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/comparison.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/contracts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/evaluator.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/oracles.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/qualification.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/reporting.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/benchmarks/stratification.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/changesets/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/changesets/git.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/adapter.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/benchmarks.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_adapters.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_contracts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_lifecycle.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_metrics.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_observability.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_planning.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/dispatch_research.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/errors.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/followup.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/host_launch.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/lifecycle_parsers.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/metrics_parser.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/observability_parsers.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/planning_parsers.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/policy.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/progress_hooks.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/project.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/research.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/start.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/strategy.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/cli/worktree.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/small_model_packets.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/compiler/task_packets.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/checkpoint_store.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/checkpoints.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/episode_retrieval.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/external_memory.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/profiles.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/rendering.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/context/thread_bridge_context.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_contract_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_event_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_session_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/adapter_task_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/agent_plugin_qualification_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/audit_optimization_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/audit_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/benchmark_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/bug_forensics_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/canonical.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/compatibility.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/context_checkpoint_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/context_model_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/core_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/cross_check_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/errors.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/evidence_import_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/execution_strategy_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/goal_validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/host_capability_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/implementation_audit_validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/import_dialect_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/launch_qualification.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/local_launch_validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/metric_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/paths.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/persistence.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/plan_contract_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/plan_delta_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/planning_launch_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/policy_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/process_execution_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/process_redaction.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/progress_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/progress_hook_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/project_profile_preset_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/project_profile_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/proof_integrity_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/proof_validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/quality_modes.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/redaction.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/release_contract_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/research_evidence_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_mesh_recommendation_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_mesh_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_quality_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/review_verdict.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/runner_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/runner_worktree_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/sandbox_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/schema_builders.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/status_goal_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/task_template_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_schema_definitions.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/thread_bridge_validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/token_estimation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/usage_export_schemas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/contracts/validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/lifecycle-baselines.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/model-routing-profile.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/feature-implementation.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/quick-change.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/project-workflow-presets/research-review.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/risk-execution-policy.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/data/profiles/small-context-profile.v1.json +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/bundles.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/installation_catalog.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/diagnostics/readiness.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/core.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/episode_index.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/evidence_index/external_context.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/followup/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/followup/records.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/locks.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/freeze/package_integrity.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/records.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/goal/view.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/acp_capability.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/agent_plugin_qualification.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/capabilities.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/context_events.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/contracts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/event_capture.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/events.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_claude.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_codex.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_common.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_cursor.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_gemini_cli.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_hermes.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_kimi_code.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_opencode.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/inspection_qwen_code.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/process_port.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/receipts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/scaffold.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/thread_bridge.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/usage_normalizers.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/host_protocol/validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/agentskills_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/bmad_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/constitution_adr.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/dialect_profiles.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_agent.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_dialects.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/external_workflow.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/multi_markdown.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/openspec_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/planning.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/spec_kit_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/imports/spec_kitty_profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/audit_optimization.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/audit_samples.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/cost_collection.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/costs.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/outcome_index.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/phase_resources.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/recommendations.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/regression_signals.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/metrics/usage_export.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/profiles.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/receipts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/model_routing/resolver.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/__main__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/authority.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/canonical.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/cli.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/errors.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/gate.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/paths.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/policy.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/receipt.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/neutrality/test_runner.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/acceptance_markdown.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/completeness.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/continuity.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/deltas.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/task_compatibility.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/templates.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/tiering.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/planning/validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/adaptive_lifecycle.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/apply.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/execution_strategy.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/proposals.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/quality_floor.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/risk_execution.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/runtime_receipts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/policy/thread_bridge.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/guidance.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/merge.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/presets.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/principles.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/project/profile.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/py.typed +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics_advisor.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/bug_forensics_recipes.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/cross_check.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/failure_classification.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/quality/packs.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/change_summary.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/event_feed.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/execution_resources.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_bridge.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_hooks.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_terminal.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/progress_view.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/status_view.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/reporting/usage_export.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/evidence.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/provenance.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/research/validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/resources.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review/validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/assignments.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/contracts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/operator_templates.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/quorum.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/recommendation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/results.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/review_mesh/synthesis.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/attempt_snapshots.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/core.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/runner/sandbox_receipts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_check.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_gate.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/completion_signal.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/specification/validation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/artifacts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_decisions.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_policy.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/budget_receipts.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/bug_forensics_gates.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/checkpoint_gate.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/controller.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/events.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/final_proof_integrity.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/finalization.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/gates.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/implementation_audit_gate.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/leases.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/lineage.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/managed_runner.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/model_usage.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/next_action.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/operation_kernel.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/plan_adoption.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/query.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/review_mesh_gate.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/reviews.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/risk_execution_gate.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/run_transitions.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/sandbox_policy.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/selectors.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/state.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/workflow/task_transitions.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/worktree/__init__.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle/worktree/isolation.py +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/dependency_links.txt +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/entry_points.txt +0 -0
- {agent_lifecycle_kit-1.77.0 → agent_lifecycle_kit-1.78.0}/src/agent_lifecycle_kit.egg-info/top_level.txt +0 -0
{agent_lifecycle_kit-1.77.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
|
|
|
@@ -80,7 +80,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
|
|
|
80
80
|
composes risk, model class, packet size, review and resource limits.
|
|
81
81
|
- Usage visibility: tokens, time, resource counters and structured execution records without sensitive data are native; monetary cost is optional and only used when a metered host reports it.
|
|
82
82
|
- Project-specific workflow settings: ALK can discover and validate uncommitted local defaults, or apply a built-in workflow preset for a common route, while the frozen plan remains authoritative.
|
|
83
|
-
- Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources
|
|
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
|
|
|
@@ -58,7 +58,7 @@ agent-lifecycle start --adapter <adapter-id> --file task.md
|
|
|
58
58
|
composes risk, model class, packet size, review and resource limits.
|
|
59
59
|
- Usage visibility: tokens, time, resource counters and structured execution records without sensitive data are native; monetary cost is optional and only used when a metered host reports it.
|
|
60
60
|
- Project-specific workflow settings: ALK can discover and validate uncommitted local defaults, or apply a built-in workflow preset for a common route, while the frozen plan remains authoritative.
|
|
61
|
-
- Reproducible Python maintenance: pinned development-only Ruff, mypy and coverage checks, a non-growing quality ratchet, stable redacted CLI errors, installed package resources
|
|
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"
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import hashlib
|
|
6
|
-
import os
|
|
7
|
-
import subprocess
|
|
8
5
|
from collections.abc import Callable
|
|
9
6
|
from pathlib import Path
|
|
10
7
|
from typing import Any
|
|
@@ -24,6 +21,7 @@ from agent_lifecycle.adapter_sessions.planning_launch import run_planning_launch
|
|
|
24
21
|
from agent_lifecycle.adapter_sessions.qualification import (
|
|
25
22
|
shipped_profile_digest,
|
|
26
23
|
)
|
|
24
|
+
from agent_lifecycle.adapter_sessions.worktree_identity import capture_git_worktree_identity
|
|
27
25
|
from agent_lifecycle.contracts import LifecycleError, canonical_digest, read_json_object
|
|
28
26
|
from agent_lifecycle.host_protocol.validation import validate_managed_launch_profile
|
|
29
27
|
|
|
@@ -305,89 +303,6 @@ def _state_task(state: dict[str, Any], task_id: str) -> dict[str, Any]:
|
|
|
305
303
|
raise LifecycleError("local-launch-task-missing", "task is not present in workflow state", {"taskId": task_id})
|
|
306
304
|
|
|
307
305
|
|
|
308
|
-
def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
|
|
309
|
-
"""Capture normalized authoritative Git content without requiring cleanliness."""
|
|
310
|
-
|
|
311
|
-
root = project_root.resolve()
|
|
312
|
-
head = _git_bytes(root, ["rev-parse", "HEAD"]).decode("ascii", errors="strict").strip()
|
|
313
|
-
staged = _git_bytes(root, ["diff", "--cached", "--binary", "--no-ext-diff"])
|
|
314
|
-
unstaged = _git_bytes(root, ["diff", "--binary", "--no-ext-diff"])
|
|
315
|
-
submodules = _git_bytes(root, ["submodule", "status", "--recursive"])
|
|
316
|
-
untracked_raw = _git_bytes(root, ["ls-files", "--others", "--exclude-standard", "-z"])
|
|
317
|
-
untracked_rows: list[dict[str, Any]] = []
|
|
318
|
-
total_bytes = 0
|
|
319
|
-
for raw_name in sorted(item for item in untracked_raw.split(b"\0") if item):
|
|
320
|
-
relative = os.fsdecode(raw_name)
|
|
321
|
-
path = root / relative
|
|
322
|
-
try:
|
|
323
|
-
before = path.lstat()
|
|
324
|
-
if path.is_symlink():
|
|
325
|
-
payload = os.fsencode(path.readlink())
|
|
326
|
-
kind = "symlink"
|
|
327
|
-
else:
|
|
328
|
-
payload = path.read_bytes()
|
|
329
|
-
kind = "file"
|
|
330
|
-
after = path.lstat()
|
|
331
|
-
except OSError as exc:
|
|
332
|
-
raise LifecycleError(
|
|
333
|
-
"planning-worktree-read-race",
|
|
334
|
-
"failed to capture an untracked worktree entry",
|
|
335
|
-
{"errorType": type(exc).__name__},
|
|
336
|
-
) from exc
|
|
337
|
-
if (before.st_size, before.st_mtime_ns) != (after.st_size, after.st_mtime_ns):
|
|
338
|
-
raise LifecycleError(
|
|
339
|
-
"planning-worktree-read-race",
|
|
340
|
-
"untracked worktree entry changed during identity capture",
|
|
341
|
-
)
|
|
342
|
-
total_bytes += len(payload)
|
|
343
|
-
untracked_rows.append(
|
|
344
|
-
{
|
|
345
|
-
"pathBytesSha256": hashlib.sha256(raw_name).hexdigest(),
|
|
346
|
-
"kind": kind,
|
|
347
|
-
"bytes": len(payload),
|
|
348
|
-
"sha256": hashlib.sha256(payload).hexdigest(),
|
|
349
|
-
}
|
|
350
|
-
)
|
|
351
|
-
body = {
|
|
352
|
-
"schemaVersion": "agent-planning-worktree-identity.v1",
|
|
353
|
-
"head": head,
|
|
354
|
-
"stagedDiffSha256": hashlib.sha256(staged).hexdigest(),
|
|
355
|
-
"unstagedDiffSha256": hashlib.sha256(unstaged).hexdigest(),
|
|
356
|
-
"submoduleStateSha256": hashlib.sha256(submodules).hexdigest(),
|
|
357
|
-
"untrackedTreeSha256": canonical_digest({"entries": untracked_rows}),
|
|
358
|
-
"untrackedCount": len(untracked_rows),
|
|
359
|
-
"untrackedBytes": total_bytes,
|
|
360
|
-
"ignoredLocalStateExcluded": True,
|
|
361
|
-
}
|
|
362
|
-
return {**body, "identityDigest": canonical_digest(body)}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
def _git_bytes(root: Path, args: list[str]) -> bytes:
|
|
366
|
-
try:
|
|
367
|
-
result = subprocess.run(
|
|
368
|
-
["git", *args],
|
|
369
|
-
cwd=root,
|
|
370
|
-
shell=False,
|
|
371
|
-
stdin=subprocess.DEVNULL,
|
|
372
|
-
capture_output=True,
|
|
373
|
-
timeout=10,
|
|
374
|
-
check=False,
|
|
375
|
-
)
|
|
376
|
-
except (OSError, subprocess.TimeoutExpired) as exc:
|
|
377
|
-
raise LifecycleError(
|
|
378
|
-
"planning-worktree-identity-failed",
|
|
379
|
-
"Git identity capture failed closed",
|
|
380
|
-
{"errorType": type(exc).__name__},
|
|
381
|
-
) from exc
|
|
382
|
-
if result.returncode != 0:
|
|
383
|
-
raise LifecycleError(
|
|
384
|
-
"planning-worktree-identity-failed",
|
|
385
|
-
"Git identity command failed closed",
|
|
386
|
-
{"command": args[0], "exitCode": result.returncode},
|
|
387
|
-
)
|
|
388
|
-
return result.stdout
|
|
389
|
-
|
|
390
|
-
|
|
391
306
|
def _blocked_planning_launch(
|
|
392
307
|
*,
|
|
393
308
|
adapter_id: str,
|
|
@@ -11,6 +11,8 @@ from typing import Any
|
|
|
11
11
|
class ProcessTelemetry:
|
|
12
12
|
"""Capture monotonic wall time and best-effort local process facts."""
|
|
13
13
|
|
|
14
|
+
GROUP_SAMPLE_INTERVAL_NS = 250_000_000
|
|
15
|
+
|
|
14
16
|
def __init__(self, *, pid: int | None, group_id: int | None = None) -> None:
|
|
15
17
|
self.pid = pid
|
|
16
18
|
self.group_id = group_id
|
|
@@ -23,10 +25,19 @@ class ProcessTelemetry:
|
|
|
23
25
|
self._memory_source = "none"
|
|
24
26
|
self._process_source = "none"
|
|
25
27
|
self._sample_count = 0
|
|
26
|
-
self.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
self._last_group_sample_ns: int | None = None
|
|
29
|
+
self.sample(force_group=True)
|
|
30
|
+
|
|
31
|
+
def sample(self, *, force_group: bool = False) -> dict[str, Any]:
|
|
32
|
+
now_ns = time.monotonic_ns()
|
|
33
|
+
sample_group = (
|
|
34
|
+
force_group
|
|
35
|
+
or self._last_group_sample_ns is None
|
|
36
|
+
or now_ns - self._last_group_sample_ns >= self.GROUP_SAMPLE_INTERVAL_NS
|
|
37
|
+
)
|
|
38
|
+
snapshot = capture_process_snapshot(self.pid, self.group_id, sample_group=sample_group)
|
|
39
|
+
if sample_group:
|
|
40
|
+
self._last_group_sample_ns = now_ns
|
|
30
41
|
self._sample_count += 1
|
|
31
42
|
cpu = snapshot.get("cpuMs")
|
|
32
43
|
if isinstance(cpu, (int, float)):
|
|
@@ -45,7 +56,7 @@ class ProcessTelemetry:
|
|
|
45
56
|
return snapshot
|
|
46
57
|
|
|
47
58
|
def finish(self) -> dict[str, Any]:
|
|
48
|
-
self.sample()
|
|
59
|
+
self.sample(force_group=True)
|
|
49
60
|
elapsed_ms = max(0, int((time.monotonic_ns() - self.started_ns) / 1_000_000))
|
|
50
61
|
cpu_ms = None
|
|
51
62
|
if self._last_cpu_ms is not None and self._start_cpu_ms is not None:
|
|
@@ -53,13 +64,28 @@ class ProcessTelemetry:
|
|
|
53
64
|
return {
|
|
54
65
|
"elapsedMs": elapsed_ms,
|
|
55
66
|
"cpuMs": _metric(cpu_ms, "ATTESTED" if cpu_ms is not None else "UNAVAILABLE", self._cpu_source, "ms"),
|
|
56
|
-
"peakMemoryMb": _metric(
|
|
57
|
-
|
|
67
|
+
"peakMemoryMb": _metric(
|
|
68
|
+
self._peak_memory_mb,
|
|
69
|
+
"ATTESTED" if self._peak_memory_mb is not None else "UNAVAILABLE",
|
|
70
|
+
self._memory_source,
|
|
71
|
+
"MB",
|
|
72
|
+
),
|
|
73
|
+
"processCount": _metric(
|
|
74
|
+
self._peak_process_count,
|
|
75
|
+
"ATTESTED" if self._peak_process_count is not None else "UNAVAILABLE",
|
|
76
|
+
self._process_source,
|
|
77
|
+
"processes",
|
|
78
|
+
),
|
|
58
79
|
"sampleCount": self._sample_count,
|
|
59
80
|
}
|
|
60
81
|
|
|
61
82
|
|
|
62
|
-
def capture_process_snapshot(
|
|
83
|
+
def capture_process_snapshot(
|
|
84
|
+
pid: int | None,
|
|
85
|
+
group_id: int | None = None,
|
|
86
|
+
*,
|
|
87
|
+
sample_group: bool = True,
|
|
88
|
+
) -> dict[str, Any]:
|
|
63
89
|
"""Read only local OS data; unavailable platforms return explicit gaps."""
|
|
64
90
|
|
|
65
91
|
if pid is None:
|
|
@@ -67,7 +93,7 @@ def capture_process_snapshot(pid: int | None, group_id: int | None = None) -> di
|
|
|
67
93
|
if os.name == "posix":
|
|
68
94
|
proc = Path("/proc") / str(pid)
|
|
69
95
|
if proc.exists():
|
|
70
|
-
snapshot = _linux_snapshot(proc, group_id)
|
|
96
|
+
snapshot = _linux_snapshot(proc, group_id, sample_group=sample_group)
|
|
71
97
|
if snapshot:
|
|
72
98
|
return snapshot
|
|
73
99
|
# resource is portable across Unix, but RUSAGE_CHILDREN is aggregate;
|
|
@@ -89,7 +115,7 @@ def capture_process_snapshot(pid: int | None, group_id: int | None = None) -> di
|
|
|
89
115
|
return {"processCount": 1, "processSource": "direct-child"}
|
|
90
116
|
|
|
91
117
|
|
|
92
|
-
def _linux_snapshot(proc: Path, group_id: int | None) -> dict[str, Any]:
|
|
118
|
+
def _linux_snapshot(proc: Path, group_id: int | None, *, sample_group: bool) -> dict[str, Any]:
|
|
93
119
|
try:
|
|
94
120
|
stat = (proc / "stat").read_text(encoding="utf-8")
|
|
95
121
|
right = stat.rsplit(")", 1)[1].split()
|
|
@@ -102,15 +128,19 @@ def _linux_snapshot(proc: Path, group_id: int | None) -> dict[str, Any]:
|
|
|
102
128
|
parts = line.split()
|
|
103
129
|
if len(parts) >= 2:
|
|
104
130
|
memory_mb = max(memory_mb or 0.0, int(parts[1]) / 1024.0)
|
|
105
|
-
|
|
106
|
-
return {
|
|
131
|
+
snapshot = {
|
|
107
132
|
"cpuMs": cpu_ms,
|
|
108
133
|
"cpuSource": "procfs",
|
|
109
134
|
"memoryMb": memory_mb,
|
|
110
135
|
"memorySource": "procfs",
|
|
111
|
-
"processCount": count,
|
|
112
|
-
"processSource": "procfs-group" if group_id is not None else "procfs-direct",
|
|
113
136
|
}
|
|
137
|
+
if group_id is None:
|
|
138
|
+
snapshot["processCount"] = 1
|
|
139
|
+
snapshot["processSource"] = "procfs-direct"
|
|
140
|
+
elif sample_group:
|
|
141
|
+
snapshot["processCount"] = _linux_group_count(group_id)
|
|
142
|
+
snapshot["processSource"] = "procfs-group"
|
|
143
|
+
return snapshot
|
|
114
144
|
except (OSError, ValueError, IndexError, KeyError):
|
|
115
145
|
return {}
|
|
116
146
|
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"""Bounded, stable Git worktree identity capture for planning launches."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import os
|
|
7
|
+
import subprocess
|
|
8
|
+
import time
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from agent_lifecycle.contracts import LifecycleError, canonical_digest
|
|
13
|
+
|
|
14
|
+
MAX_UNTRACKED_FILES = 100_000
|
|
15
|
+
MAX_UNTRACKED_BYTES = 4 * 1024 * 1024 * 1024
|
|
16
|
+
MAX_HASH_CHUNK_BYTES = 256 * 1024
|
|
17
|
+
MAX_CAPTURE_SECONDS = 120.0
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def capture_git_worktree_identity(project_root: Path) -> dict[str, Any]:
|
|
21
|
+
"""Capture authoritative Git content with bounded streaming reads.
|
|
22
|
+
|
|
23
|
+
The five Git commands remain ordered so the before/after launch snapshots
|
|
24
|
+
retain their existing consistency semantics. Ordinary untracked files are
|
|
25
|
+
hashed incrementally; symlinks hash only their link text and other special
|
|
26
|
+
files fail closed.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
root = project_root.resolve()
|
|
30
|
+
deadline = time.monotonic() + MAX_CAPTURE_SECONDS
|
|
31
|
+
head = _git_bytes(root, ["rev-parse", "HEAD"], deadline).decode("ascii", errors="strict").strip()
|
|
32
|
+
staged = _git_bytes(root, ["diff", "--cached", "--binary", "--no-ext-diff"], deadline)
|
|
33
|
+
unstaged = _git_bytes(root, ["diff", "--binary", "--no-ext-diff"], deadline)
|
|
34
|
+
submodules = _git_bytes(root, ["submodule", "status", "--recursive"], deadline)
|
|
35
|
+
untracked_raw = _git_bytes(root, ["ls-files", "--others", "--exclude-standard", "-z"], deadline)
|
|
36
|
+
names = sorted(item for item in untracked_raw.split(b"\0") if item)
|
|
37
|
+
if len(names) > MAX_UNTRACKED_FILES:
|
|
38
|
+
raise LifecycleError(
|
|
39
|
+
"planning-worktree-untracked-limit",
|
|
40
|
+
"untracked file count exceeds the identity budget",
|
|
41
|
+
{"count": len(names), "maxFiles": MAX_UNTRACKED_FILES},
|
|
42
|
+
)
|
|
43
|
+
untracked_rows: list[dict[str, Any]] = []
|
|
44
|
+
total_bytes = 0
|
|
45
|
+
for raw_name in names:
|
|
46
|
+
_require_time(deadline)
|
|
47
|
+
relative = os.fsdecode(raw_name)
|
|
48
|
+
path = root / relative
|
|
49
|
+
before = _lstat_or_race(path)
|
|
50
|
+
path_digest = hashlib.sha256(raw_name).hexdigest()
|
|
51
|
+
if path.is_symlink():
|
|
52
|
+
payload = os.fsencode(path.readlink())
|
|
53
|
+
digest = hashlib.sha256(payload).hexdigest()
|
|
54
|
+
row_bytes = len(payload)
|
|
55
|
+
kind = "symlink"
|
|
56
|
+
elif _is_regular_file(before.st_mode):
|
|
57
|
+
digest, row_bytes = _hash_regular_file(path, deadline)
|
|
58
|
+
kind = "file"
|
|
59
|
+
else:
|
|
60
|
+
raise LifecycleError(
|
|
61
|
+
"planning-worktree-special-file",
|
|
62
|
+
"untracked identity capture rejects special files",
|
|
63
|
+
{"kind": "non-regular"},
|
|
64
|
+
)
|
|
65
|
+
after = _lstat_or_race(path)
|
|
66
|
+
if _stat_identity(before) != _stat_identity(after):
|
|
67
|
+
raise LifecycleError(
|
|
68
|
+
"planning-worktree-read-race",
|
|
69
|
+
"untracked worktree entry changed during identity capture",
|
|
70
|
+
)
|
|
71
|
+
total_bytes += row_bytes
|
|
72
|
+
if total_bytes > MAX_UNTRACKED_BYTES:
|
|
73
|
+
raise LifecycleError(
|
|
74
|
+
"planning-worktree-untracked-limit",
|
|
75
|
+
"untracked byte count exceeds the identity budget",
|
|
76
|
+
{"bytes": total_bytes, "maxBytes": MAX_UNTRACKED_BYTES},
|
|
77
|
+
)
|
|
78
|
+
untracked_rows.append(
|
|
79
|
+
{
|
|
80
|
+
"pathBytesSha256": path_digest,
|
|
81
|
+
"kind": kind,
|
|
82
|
+
"bytes": row_bytes,
|
|
83
|
+
"sha256": digest,
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
body = {
|
|
87
|
+
"schemaVersion": "agent-planning-worktree-identity.v1",
|
|
88
|
+
"head": head,
|
|
89
|
+
"stagedDiffSha256": hashlib.sha256(staged).hexdigest(),
|
|
90
|
+
"unstagedDiffSha256": hashlib.sha256(unstaged).hexdigest(),
|
|
91
|
+
"submoduleStateSha256": hashlib.sha256(submodules).hexdigest(),
|
|
92
|
+
"untrackedTreeSha256": canonical_digest({"entries": untracked_rows}),
|
|
93
|
+
"untrackedCount": len(untracked_rows),
|
|
94
|
+
"untrackedBytes": total_bytes,
|
|
95
|
+
"ignoredLocalStateExcluded": True,
|
|
96
|
+
}
|
|
97
|
+
return {**body, "identityDigest": canonical_digest(body)}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _hash_regular_file(path: Path, deadline: float) -> tuple[str, int]:
|
|
101
|
+
digest = hashlib.sha256()
|
|
102
|
+
total = 0
|
|
103
|
+
try:
|
|
104
|
+
with path.open("rb") as handle:
|
|
105
|
+
while True:
|
|
106
|
+
_require_time(deadline)
|
|
107
|
+
chunk = handle.read(MAX_HASH_CHUNK_BYTES)
|
|
108
|
+
if not chunk:
|
|
109
|
+
break
|
|
110
|
+
total += len(chunk)
|
|
111
|
+
if total > MAX_UNTRACKED_BYTES:
|
|
112
|
+
raise LifecycleError(
|
|
113
|
+
"planning-worktree-untracked-limit",
|
|
114
|
+
"untracked byte count exceeds the identity budget",
|
|
115
|
+
{"bytes": total, "maxBytes": MAX_UNTRACKED_BYTES},
|
|
116
|
+
)
|
|
117
|
+
digest.update(chunk)
|
|
118
|
+
except LifecycleError:
|
|
119
|
+
raise
|
|
120
|
+
except OSError as exc:
|
|
121
|
+
raise LifecycleError(
|
|
122
|
+
"planning-worktree-read-race",
|
|
123
|
+
"failed to capture an untracked worktree entry",
|
|
124
|
+
{"errorType": type(exc).__name__},
|
|
125
|
+
) from exc
|
|
126
|
+
return digest.hexdigest(), total
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _git_bytes(root: Path, args: list[str], deadline: float) -> bytes:
|
|
130
|
+
remaining = deadline - time.monotonic()
|
|
131
|
+
if remaining <= 0:
|
|
132
|
+
raise LifecycleError("planning-worktree-identity-timeout", "Git identity capture exceeded its deadline")
|
|
133
|
+
try:
|
|
134
|
+
result = subprocess.run(
|
|
135
|
+
["git", *args],
|
|
136
|
+
cwd=root,
|
|
137
|
+
shell=False,
|
|
138
|
+
stdin=subprocess.DEVNULL,
|
|
139
|
+
capture_output=True,
|
|
140
|
+
timeout=remaining,
|
|
141
|
+
check=False,
|
|
142
|
+
)
|
|
143
|
+
except (OSError, subprocess.TimeoutExpired) as exc:
|
|
144
|
+
raise LifecycleError(
|
|
145
|
+
"planning-worktree-identity-failed",
|
|
146
|
+
"Git identity capture failed closed",
|
|
147
|
+
{"errorType": type(exc).__name__},
|
|
148
|
+
) from exc
|
|
149
|
+
if result.returncode != 0:
|
|
150
|
+
raise LifecycleError(
|
|
151
|
+
"planning-worktree-identity-failed",
|
|
152
|
+
"Git identity command failed closed",
|
|
153
|
+
{"command": args[0], "exitCode": result.returncode},
|
|
154
|
+
)
|
|
155
|
+
return result.stdout
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _lstat_or_race(path: Path) -> os.stat_result:
|
|
159
|
+
try:
|
|
160
|
+
return path.lstat()
|
|
161
|
+
except OSError as exc:
|
|
162
|
+
raise LifecycleError(
|
|
163
|
+
"planning-worktree-read-race",
|
|
164
|
+
"failed to inspect an untracked worktree entry",
|
|
165
|
+
{"errorType": type(exc).__name__},
|
|
166
|
+
) from exc
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _is_regular_file(mode: int) -> bool:
|
|
170
|
+
return (mode & 0o170000) == 0o100000
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def _stat_identity(stat_result: os.stat_result) -> tuple[int, int, int, int, int, int]:
|
|
174
|
+
return (
|
|
175
|
+
stat_result.st_dev,
|
|
176
|
+
stat_result.st_ino,
|
|
177
|
+
stat_result.st_mode,
|
|
178
|
+
stat_result.st_size,
|
|
179
|
+
stat_result.st_mtime_ns,
|
|
180
|
+
stat_result.st_ctime_ns,
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _require_time(deadline: float) -> None:
|
|
185
|
+
if time.monotonic() >= deadline:
|
|
186
|
+
raise LifecycleError("planning-worktree-identity-timeout", "Git identity capture exceeded its deadline")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
__all__ = ["capture_git_worktree_identity"]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Provider-neutral lazy CLI dispatch registry."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
COMMAND_DISPATCH = {
|
|
6
|
+
"start": ("agent_lifecycle.cli.start", "dispatch_start", True),
|
|
7
|
+
"host-launch": ("agent_lifecycle.cli.host_launch", "dispatch_host_launch", False),
|
|
8
|
+
"strategy": ("agent_lifecycle.cli.strategy", "dispatch_strategy", False),
|
|
9
|
+
"project": ("agent_lifecycle.cli.project", "dispatch_project", False),
|
|
10
|
+
"diagnose": ("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", False),
|
|
11
|
+
"diagnostics": ("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", False),
|
|
12
|
+
"adapter": ("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", False),
|
|
13
|
+
"research": ("agent_lifecycle.cli.dispatch_research", "dispatch_research", False),
|
|
14
|
+
"version": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
15
|
+
"schema": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
16
|
+
"contract": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
17
|
+
"evidence": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
18
|
+
"import": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
19
|
+
"quality": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
20
|
+
"review-mesh": ("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", False),
|
|
21
|
+
"workflow": ("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", False),
|
|
22
|
+
"audit": ("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", False),
|
|
23
|
+
"runner": ("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", False),
|
|
24
|
+
"report": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
|
|
25
|
+
"context": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
|
|
26
|
+
"goal": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
|
|
27
|
+
"model": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
|
|
28
|
+
"metrics": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
|
|
29
|
+
"thread": ("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", False),
|
|
30
|
+
"tier": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
|
|
31
|
+
"specification": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
|
|
32
|
+
"plan": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
|
|
33
|
+
"task": ("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", False),
|
|
34
|
+
"policy": ("agent_lifecycle.cli.policy", "dispatch_policy", False),
|
|
35
|
+
"followup": ("agent_lifecycle.cli.followup", "dispatch_followup", False),
|
|
36
|
+
"worktree": ("agent_lifecycle.cli.worktree", "dispatch_worktree", False),
|
|
37
|
+
"benchmark": ("agent_lifecycle.cli.benchmarks", "dispatch_benchmark", False),
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
__all__ = ["COMMAND_DISPATCH"]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Thin root CLI dispatcher for Agent Lifecycle Kit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import importlib
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from agent_lifecycle.cli.command_registry import COMMAND_DISPATCH
|
|
10
|
+
from agent_lifecycle.contracts import LifecycleError
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _lazy_call(
|
|
14
|
+
module_name: str, function_name: str, args: argparse.Namespace, remainder: list[str] | None = None
|
|
15
|
+
) -> dict[str, Any] | str | None:
|
|
16
|
+
function = getattr(importlib.import_module(module_name), function_name)
|
|
17
|
+
return function(args, remainder) if remainder is not None else function(args)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def dispatch_start(args: argparse.Namespace, remainder: list[str]) -> dict[str, Any] | str | None:
|
|
21
|
+
return _lazy_call("agent_lifecycle.cli.start", "dispatch_start", args, remainder)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def dispatch_host_launch(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
25
|
+
return _lazy_call("agent_lifecycle.cli.host_launch", "dispatch_host_launch", args)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def dispatch_strategy(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
29
|
+
return _lazy_call("agent_lifecycle.cli.strategy", "dispatch_strategy", args)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def dispatch_project(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
33
|
+
return _lazy_call("agent_lifecycle.cli.project", "dispatch_project", args)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def dispatch_adapters(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
37
|
+
return _lazy_call("agent_lifecycle.cli.dispatch_adapters", "dispatch_adapters", args)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def dispatch_research(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
41
|
+
return _lazy_call("agent_lifecycle.cli.dispatch_research", "dispatch_research", args)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def dispatch_contracts(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
45
|
+
return _lazy_call("agent_lifecycle.cli.dispatch_contracts", "dispatch_contracts", args)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def dispatch_lifecycle(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
49
|
+
return _lazy_call("agent_lifecycle.cli.dispatch_lifecycle", "dispatch_lifecycle", args)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def dispatch_observability(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
53
|
+
return _lazy_call("agent_lifecycle.cli.dispatch_observability", "dispatch_observability", args)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def dispatch_planning(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
57
|
+
return _lazy_call("agent_lifecycle.cli.dispatch_planning", "dispatch_planning", args)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def dispatch_policy(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
61
|
+
return _lazy_call("agent_lifecycle.cli.policy", "dispatch_policy", args)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def dispatch_followup(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
65
|
+
return _lazy_call("agent_lifecycle.cli.followup", "dispatch_followup", args)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def dispatch_worktree(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
69
|
+
return _lazy_call("agent_lifecycle.cli.worktree", "dispatch_worktree", args)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def dispatch_benchmark(args: argparse.Namespace) -> dict[str, Any] | str | None:
|
|
73
|
+
return _lazy_call("agent_lifecycle.cli.benchmarks", "dispatch_benchmark", args)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def dispatch(args: argparse.Namespace, remainder: list[str]) -> dict[str, Any] | str | None:
|
|
77
|
+
"""Route a parsed command without owning domain behavior or CLI output."""
|
|
78
|
+
target = COMMAND_DISPATCH.get(args.command)
|
|
79
|
+
if target is None:
|
|
80
|
+
raise LifecycleError(
|
|
81
|
+
"command-not-implemented", f"{args.command} command group is reserved but not implemented in this build"
|
|
82
|
+
)
|
|
83
|
+
_, function_name, accepts_remainder = target
|
|
84
|
+
function = globals()[function_name]
|
|
85
|
+
if accepts_remainder:
|
|
86
|
+
return function(args, remainder)
|
|
87
|
+
del remainder
|
|
88
|
+
return function(args)
|
|
@@ -11,8 +11,9 @@ from agent_lifecycle.contracts import LifecycleError, canonical_bytes
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def main(argv: list[str] | None = None) -> int:
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
raw_argv = list(sys.argv[1:] if argv is None else argv)
|
|
15
|
+
parser = build_parser(raw_argv)
|
|
16
|
+
args, remainder = parser.parse_known_args(raw_argv)
|
|
16
17
|
try:
|
|
17
18
|
if args.command == "neutrality":
|
|
18
19
|
from agent_lifecycle.neutrality.cli import main as neutrality_main
|