cli-agent-runner 0.2.19__tar.gz → 0.2.20__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.
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/CHANGELOG.md +10 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/PKG-INFO +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_emit/__init__.py +2 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_emit/rounds.py +36 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_version.py +2 -2
- cli_agent_runner-0.2.20/agent_runner/agent_runtime.py +789 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/api.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/_serve_round.py +16 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/events.py +1 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/runner.py +26 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/architecture.md +1 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/plugins.md +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/contract/test_public_api_surface.py +19 -10
- cli_agent_runner-0.2.20/tests/e2e/test_e2e_graceful_stop.py +48 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/e2e/test_e2e_install_systemd.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/e2e/test_e2e_monitor_remote.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/e2e/test_e2e_round_lifecycle.py +36 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_auto_stop_e2e.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_bounded_run.py +9 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_context_enricher_namespacing.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_dirty_handler_seam.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_fresh_eyes_signal.py +8 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_grace_kill_emission.py +8 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_install_dry_run.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_monitor_seeded.py +15 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_plugin_detector_loaded.py +6 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_plugin_owned_paths.py +15 -10
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_plugin_real_flow.py +5 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_prompt_delivery_stdin.py +16 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_run_one_round_with_fake_agent.py +17 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_scaffold_presets.py +17 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_serve_loop.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_spawn_round_mem_floor.py +45 -47
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_spawn_round_wedged.py +7 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_substrate_fingerprint.py +23 -40
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/test_transient_error_backoff.py +4 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_architecture.py +24 -20
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_atomic_write_enforced.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_authored_facts_declared.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_auto_stop_policy_ssot.py +3 -2
- cli_agent_runner-0.2.20/tests/invariants/test_bdd_test_conventions.py +116 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_catalogs.py +14 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_classification_ssot.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_config_error_consistency.py +7 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_config_value_set_ssot.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_dataclass_fields_have_producers.py +36 -11
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_builtin_plugins.py +1 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_claims_match_ssot.py +7 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_cli_claims.py +12 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_operator_surface.py +7 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_test_pointers_exist.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_transient_error_claims.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_doc_usage_event_fields.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_docs_generated.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_docs_index_complete.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_entry_points_resolve.py +8 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_event_int_coercion.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_event_kind_registry.py +9 -8
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_event_kinds_ssot.py +24 -19
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_events_doc_contract.py +3 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_gen_blocks_name_their_source.py +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_hook_contract_docs.py +9 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_import_footprint.py +6 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_layer_2_loop_size.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_migrations_registry_ssot.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_module_boundaries.py +11 -12
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_module_sizes.py +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_monitor_self_exclusion.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_ai_signatures.py +6 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_internal_refs.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_price_logic.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_pytest_skip_on_parse_fail.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_raw_time.py +7 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_vacuous_invariants.py +6 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_no_version_refs.py +9 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_peek_schema_version.py +1 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_phase_select_stateless.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_plugins_config_stable.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_readme_zh_is_pointer.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_repo_constants_patched_in_tests.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_round_alloc_growth.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_round_log_decode_boundary.py +5 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_round_num_single_source.py +11 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_round_result_stable.py +8 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_set_diff_for_auto_tool_classification.py +7 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_stash_uses_sha_not_index.py +3 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_timeout_budget_invariant.py +8 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_upstream_schema_canary.py +11 -8
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/test_vulture_whitelist_generated.py +2 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/literate/test_parser.py +27 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/literate/test_quickstart.py +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_agent_runtime.py +42 -16
- cli_agent_runner-0.2.20/tests/unit/test_agent_runtime_container.py +416 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_agent_runtime_grace.py +50 -27
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_agent_runtime_marker_scan.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_agent_runtime_progress.py +11 -8
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_agent_runtime_reap.py +138 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_agent_runtime_signal_name.py +4 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_assemble_prompt.py +29 -15
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_events_stream.py +15 -21
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_install.py +33 -27
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_observation.py +49 -51
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_read_round_num.py +4 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_resolve_phase.py +22 -20
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_service.py +108 -66
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_api_types.py +60 -32
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_auto_stop_gating.py +19 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_catalogs.py +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cgroup_probe.py +108 -111
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_claude_error_detector.py +115 -104
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_claude_foreign_schema.py +22 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli.py +21 -12
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli_common.py +21 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli_init_install.py +17 -8
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli_main_boundary.py +11 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli_monitor_http.py +4 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli_service_peek_monitor.py +32 -27
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_cli_upgrade.py +65 -37
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_codewhale_code_precedence.py +4 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_codewhale_plugin.py +13 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_coerce_int_poison.py +19 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config.py +276 -294
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_fresh_eyes.py +9 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_max_rounds.py +9 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_nested_strictness.py +18 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_prompt_delivery.py +6 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_schedule.py +12 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_stop_file.py +10 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_strictness.py +19 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_substrate_fingerprint_paths.py +8 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_config_transient_error_action.py +9 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_context_store.py +18 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_control_char_config.py +14 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_default_dirty_handler.py +28 -13
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_defenses.py +32 -14
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_detect_hung_latch.py +10 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_detector_isolation.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_detector_protocol.py +8 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_dirty_handlers.py +9 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_docgen.py +48 -22
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_effective_throttle_view.py +12 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_emit_config_migrated.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_emit_schedule.py +4 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_emit_schedule_phase_skipped.py +5 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_events.py +85 -65
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_events_cmd.py +39 -65
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_events_cmd_rollover.py +4 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_events_cmd_tail.py +3 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_events_jsonl_decode.py +32 -10
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_example_dirty_handler.py +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_example_plugin.py +1 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_exit_cause.py +13 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_exit_classifier.py +12 -11
- cli_agent_runner-0.2.20/tests/unit/test_fresh_eyes_trigger.py +23 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_gemini_plugin.py +32 -28
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_git_timeout.py +18 -8
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_hook_failure_isolation.py +1 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_hook_redact_order.py +7 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_hooks.py +27 -17
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_host_health.py +52 -21
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_http_progress.py +19 -14
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_http_progress_epoch.py +5 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_init_entry_points.py +23 -17
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_interruptible_sleep_should_stop.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_kimi_plugin.py +16 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_lifecycle.py +36 -22
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_metrics.py +18 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_metrics_cgroup_usage.py +17 -11
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_metrics_swap.py +3 -2
- cli_agent_runner-0.2.20/tests/unit/test_migrate_cmd.py +282 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_migrations.py +157 -113
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_assembly.py +15 -5
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_cmd_severity.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_dedup_identity.py +22 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_dedup_rearm.py +9 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_detect_anomaly_repetitive.py +10 -11
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_detect_rate_limit.py +14 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_detect_supervisor_stale.py +8 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_detectors.py +82 -46
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_event_tail.py +5 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_loop.py +5 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_on_alert.py +3 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_remote.py +39 -24
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_round_deferred_stale.py +8 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_monitor_schedule_pause.py +17 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_network_blip_signal_guard.py +6 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_open_round_log.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_orphan_chain_single_pass.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_outer_round_ceiling.py +6 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_peek_argparse.py +4 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_peek_project_isolation.py +5 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_peek_schedule.py +8 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_peek_select.py +7 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_phase_agent_launch.py +5 -3
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_phase_profiles.py +25 -13
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_phase_select.py +52 -19
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_pi_plugin.py +30 -12
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_plugin_constants.py +7 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_plugin_scan_parity.py +28 -12
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_presets.py +56 -22
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_primary_prompt_file_home.py +8 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_prompt_loader.py +33 -14
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_read_json_hardening.py +22 -14
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_redact.py +69 -39
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_resolve.py +67 -15
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_round_cmd.py +18 -10
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_round_cmd_sigterm.py +6 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_round_log_helpers.py +31 -49
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_round_outcome.py +46 -24
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_round_outcome_agent_axis.py +8 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_round_view.py +16 -9
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_runner.py +123 -217
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_runner_sidecar_ordering.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_runner_throttle.py +117 -89
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_scaffold.py +22 -19
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_schedule.py +59 -23
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_cmd_bounded.py +9 -19
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_config_broken.py +9 -14
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_crash_loop.py +41 -29
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_mem_gate.py +17 -8
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_phase_schedule.py +87 -29
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_policy.py +43 -10
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_round.py +2 -2
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_round_cgroup_spine.py +26 -12
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_round_log.py +7 -12
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_round_oom_killed.py +12 -7
- cli_agent_runner-0.2.20/tests/unit/test_serve_round_terminate.py +123 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_schedule_gate.py +17 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_sentinel.py +16 -21
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_serve_startup_hooks.py +14 -10
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_service_mode.py +38 -14
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_service_unit.py +58 -25
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_startup_battery_exit.py +12 -7
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_startup_check.py +46 -22
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_substrate.py +21 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_supervisor_stale_self_blind.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_throttle_back_off_ladder.py +27 -6
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_throttle_epoch_bound.py +24 -4
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_throttle_plugin_classification.py +3 -1
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_upgrade_migrate.py +28 -18
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/test_vcs_state.py +55 -26
- cli_agent_runner-0.2.19/agent_runner/agent_runtime.py +0 -367
- cli_agent_runner-0.2.19/tests/e2e/test_e2e_graceful_stop.py +0 -28
- cli_agent_runner-0.2.19/tests/unit/test_fresh_eyes_trigger.py +0 -29
- cli_agent_runner-0.2.19/tests/unit/test_migrate_cmd.py +0 -390
- cli_agent_runner-0.2.19/tests/unit/test_serve_round_terminate.py +0 -32
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.codecov.yml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.github/workflows/ci.yml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.github/workflows/release.yml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.gitignore +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/.vulture-whitelist.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/BACKLOG.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/CODE_OF_CONDUCT.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/CONTRIBUTING.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/LICENSE +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/README.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/README.zh.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/SECURITY.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_docgen.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_emit/agent.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_emit/memory.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_emit/serve.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_monitor_detectors.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_monitor_registry.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_monitor_state.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_plugin_scan.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_redact.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_registry.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_resolve.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_round_outcome.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_round_support.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_serve_policy.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_substrate.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/_throttle.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/api_types.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/_constants.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/claude_rate_limit.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/codewhale.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/default_dirty_handler.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/gemini.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/kimi.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/builtin_plugins/pi.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/__main__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/_serve_cgroup.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/common.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/events_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/init_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/install_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/migrate_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/monitor_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/peek_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/round_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/serve_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/service_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/cli/upgrade_cmd.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/clock.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/config/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/config/errors.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/config/loader.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/config/models.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/config/parsers.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/config/validators.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/context_store.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/defenses.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/hooks.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/host_health.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/http_progress.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/lifecycle.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/metrics.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/migrations.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/monitor.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/phase_select.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/aider.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/claude.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/codewhale.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/gemini.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/kimi.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/presets/pi.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/prompt_loader.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/remote_relay.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/round_log.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/round_view.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/scaffold.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/schedule.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/service_unit.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/startup_check.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/agent_runner/vcs_state.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/build.sh +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/README.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/commands.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/configuration.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/events.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/long-running-agents.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/memory-efficiency.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/migrations/0.2.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/quickstart.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/recipes/aider.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/recipes/codewhale.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/recipes/kimi.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/recipes/pi.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/runbook.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/docs/thesis.md +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/pyproject.toml +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/_clock.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/_test_helpers.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/conftest.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/contract/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/e2e/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/e2e/conftest.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/fixtures/cli-real-output/claude-2.1.143-assistant-tool-use.jsonl +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/fixtures/cli-real-output/claude-2.1.143-result-event.jsonl +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/fixtures/cli-real-output/gemini-0.42.0-result-event.jsonl +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/generate_vulture_whitelist.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/integration/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/_docs.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/invariants/_event_scan.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/literate/__init__.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/literate/parser.py +0 -0
- {cli_agent_runner-0.2.19 → cli_agent_runner-0.2.20}/tests/unit/__init__.py +0 -0
|
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.20] - 2026-09-09
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- A supervised CLI's `setsid()`-detached descendant — outside the round leader's process group — is now killed at the hard-kill fallthrough instead of being left running, orphaned, after the round is torn down.
|
|
12
|
+
- A configured `docker run`/`podman run` command (including `sudo`/`env`-wrapped and global-flag forms) escapes killpg-based termination and could previously outlive the round silently. It's now detected, agent-runner warns loudly and emits a `round_container_orphan_risk` event that the hard-wall can't guarantee stopping it, and best-effort-stops the container via an injected `--cidfile` for the plain (unwrapped, unflagged) form. Full container lifecycle management remains a later-release item.
|
|
13
|
+
|
|
14
|
+
### Notes
|
|
15
|
+
- Not breaking: no `agent-runner migrate` step, no systemd unit change.
|
|
16
|
+
- `peek --json` gains the new `round_container_orphan_risk` event kind; existing kinds unchanged.
|
|
17
|
+
|
|
8
18
|
## [0.2.19] - 2026-09-09
|
|
9
19
|
|
|
10
20
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: cli-agent-runner
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.20
|
|
4
4
|
Summary: Restart-on-exit supervisor for autonomous CLI agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/wan9yu/cli-agent-runner
|
|
6
6
|
Project-URL: Documentation, https://github.com/wan9yu/cli-agent-runner#readme
|
|
@@ -40,6 +40,7 @@ from agent_runner._emit.memory import ( # noqa: F401 — public re-export
|
|
|
40
40
|
)
|
|
41
41
|
from agent_runner._emit.rounds import ( # noqa: F401 — public re-export
|
|
42
42
|
emit_fresh_eyes_round_triggered,
|
|
43
|
+
emit_round_container_orphan_risk,
|
|
43
44
|
emit_round_grace_extended,
|
|
44
45
|
emit_round_grace_kill,
|
|
45
46
|
emit_round_logs_prune_deferred,
|
|
@@ -79,6 +80,7 @@ __all__ = [
|
|
|
79
80
|
"emit_mem_pressure_deferred_to_cgroup",
|
|
80
81
|
"emit_rate_limit_stop",
|
|
81
82
|
"emit_round_cgroup_memory",
|
|
83
|
+
"emit_round_container_orphan_risk",
|
|
82
84
|
"emit_round_deferred",
|
|
83
85
|
"emit_round_grace_extended",
|
|
84
86
|
"emit_round_grace_kill",
|
|
@@ -47,6 +47,42 @@ def emit_round_substrate_after(
|
|
|
47
47
|
)
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
def emit_round_container_orphan_risk(
|
|
51
|
+
log_dir: Path,
|
|
52
|
+
*,
|
|
53
|
+
round_num: int,
|
|
54
|
+
runtime: str,
|
|
55
|
+
container_id: str | None,
|
|
56
|
+
stop_ok: bool | None,
|
|
57
|
+
) -> None:
|
|
58
|
+
"""Emit when a round's configured command launches a container (`docker run`
|
|
59
|
+
/ `podman run`) and the round had to be terminated: killpg-based
|
|
60
|
+
termination reaches the launcher process, not conmon/containerd's
|
|
61
|
+
double-fork-detached container itself, so the R1128 hard-wall cannot
|
|
62
|
+
guarantee the container stops. This event is the actual floor -- it must
|
|
63
|
+
never fire silently, regardless of whether the best-effort stop below
|
|
64
|
+
lands.
|
|
65
|
+
|
|
66
|
+
`container_id`/`stop_ok` describe the best-effort `<runtime> stop`
|
|
67
|
+
attempt made when an id was recoverable (an injected or pre-existing
|
|
68
|
+
`--cidfile`): `container_id` is None when no id could be recovered (no
|
|
69
|
+
stop was attempted, so `stop_ok` is also None); otherwise `stop_ok` is
|
|
70
|
+
whether that `stop` call exited zero. Full container lifecycle
|
|
71
|
+
management (cgroup delegation, a containment ladder) is out of scope
|
|
72
|
+
here -- left for a future release.
|
|
73
|
+
"""
|
|
74
|
+
from agent_runner.events import ROUND_CONTAINER_ORPHAN_RISK, emit
|
|
75
|
+
|
|
76
|
+
emit(
|
|
77
|
+
log_dir,
|
|
78
|
+
ROUND_CONTAINER_ORPHAN_RISK,
|
|
79
|
+
round_num=round_num,
|
|
80
|
+
runtime=runtime,
|
|
81
|
+
container_id=container_id,
|
|
82
|
+
stop_ok=stop_ok,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
50
86
|
def emit_round_supervisor_wedged(
|
|
51
87
|
log_dir: Path, *, pid: int, timeout_s: int, log_path: Path
|
|
52
88
|
) -> None:
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
21
|
+
__version__ = version = '0.2.20'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 20)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|