cli-agent-runner 0.2.12__tar.gz → 0.2.14__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.12 → cli_agent_runner-0.2.14}/.vulture-whitelist.py +27 -19
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/CHANGELOG.md +34 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/PKG-INFO +9 -6
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/README.md +8 -5
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_docgen.py +4 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_emit.py +41 -4
- cli_agent_runner-0.2.14/agent_runner/_monitor_detectors.py +581 -0
- cli_agent_runner-0.2.14/agent_runner/_monitor_registry.py +98 -0
- cli_agent_runner-0.2.14/agent_runner/_monitor_state.py +170 -0
- cli_agent_runner-0.2.14/agent_runner/_resolve.py +138 -0
- cli_agent_runner-0.2.14/agent_runner/_round_support.py +100 -0
- cli_agent_runner-0.2.14/agent_runner/_serve_policy.py +189 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_throttle.py +178 -46
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_version.py +2 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/agent_runtime.py +21 -5
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/api.py +181 -172
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/api_types.py +7 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/_constants.py +3 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/claude_rate_limit.py +7 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/gemini.py +53 -20
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/pi.py +3 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/__init__.py +12 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/common.py +36 -6
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/events_cmd.py +8 -25
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/install_cmd.py +15 -5
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/migrate_cmd.py +5 -4
- cli_agent_runner-0.2.14/agent_runner/cli/round_cmd.py +86 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/serve_cmd.py +183 -14
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/upgrade_cmd.py +2 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/clock.py +20 -0
- cli_agent_runner-0.2.14/agent_runner/config/__init__.py +64 -0
- cli_agent_runner-0.2.14/agent_runner/config/errors.py +12 -0
- cli_agent_runner-0.2.14/agent_runner/config/loader.py +107 -0
- cli_agent_runner-0.2.14/agent_runner/config/models.py +302 -0
- cli_agent_runner-0.2.14/agent_runner/config/parsers.py +527 -0
- cli_agent_runner-0.2.14/agent_runner/config/validators.py +173 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/context_store.py +21 -4
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/events.py +53 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/hooks.py +8 -3
- cli_agent_runner-0.2.14/agent_runner/host_health.py +178 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/http_progress.py +7 -11
- cli_agent_runner-0.2.14/agent_runner/lifecycle.py +192 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/metrics.py +61 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/migrations.py +302 -27
- cli_agent_runner-0.2.14/agent_runner/monitor.py +322 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/runner.py +48 -10
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/scaffold.py +2 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/service_unit.py +48 -19
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/startup_check.py +15 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/vcs_state.py +17 -5
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/architecture.md +23 -6
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/commands.md +17 -3
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/configuration.md +8 -8
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/migrations/0.2.md +114 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/plugins.md +8 -6
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/quickstart.md +7 -8
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/runbook.md +35 -23
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/pyproject.toml +2 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/_test_helpers.py +20 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/contract/test_public_api_surface.py +9 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/conftest.py +1 -1
- cli_agent_runner-0.2.14/tests/integration/test_auto_stop_e2e.py +188 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_fresh_eyes_signal.py +1 -1
- cli_agent_runner-0.2.14/tests/integration/test_monitor_seeded.py +141 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_plugin_real_flow.py +1 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_serve_loop.py +1 -1
- cli_agent_runner-0.2.14/tests/integration/test_spawn_round_mem_floor.py +224 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/_event_scan.py +64 -16
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_architecture.py +11 -4
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_authored_facts_declared.py +3 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_catalogs.py +3 -0
- cli_agent_runner-0.2.14/tests/invariants/test_config_error_consistency.py +139 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_config_value_set_ssot.py +12 -7
- cli_agent_runner-0.2.14/tests/invariants/test_dataclass_fields_have_producers.py +210 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_cli_claims.py +13 -3
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_docs_index_complete.py +3 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_event_int_coercion.py +7 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_event_kind_registry.py +3 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_event_kinds_ssot.py +3 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_hook_contract_docs.py +3 -1
- cli_agent_runner-0.2.14/tests/invariants/test_migrations_registry_ssot.py +22 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_module_boundaries.py +1 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_module_sizes.py +3 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_ai_signatures.py +9 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_pytest_skip_on_parse_fail.py +3 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_raw_time.py +28 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_vacuous_invariants.py +16 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_repo_constants_patched_in_tests.py +3 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_round_log_decode_boundary.py +3 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_set_diff_for_auto_tool_classification.py +3 -1
- cli_agent_runner-0.2.14/tests/invariants/test_timeout_budget_invariant.py +47 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/parser.py +6 -3
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/test_parser.py +8 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/test_quickstart.py +10 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime.py +27 -11
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_grace.py +48 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_reap.py +50 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_install.py +75 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_observation.py +2 -1
- cli_agent_runner-0.2.14/tests/unit/test_api_service.py +583 -0
- cli_agent_runner-0.2.14/tests/unit/test_auto_stop_gating.py +157 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli.py +1 -1
- cli_agent_runner-0.2.14/tests/unit/test_cli_common.py +93 -0
- cli_agent_runner-0.2.14/tests/unit/test_cli_main_boundary.py +66 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config.py +194 -5
- cli_agent_runner-0.2.14/tests/unit/test_config_nested_strictness.py +83 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_strictness.py +3 -3
- cli_agent_runner-0.2.14/tests/unit/test_control_char_config.py +129 -0
- cli_agent_runner-0.2.14/tests/unit/test_detect_hung_latch.py +69 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events_cmd.py +70 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events_cmd_tail.py +38 -1
- cli_agent_runner-0.2.14/tests/unit/test_events_jsonl_decode.py +162 -0
- cli_agent_runner-0.2.14/tests/unit/test_exit_classifier.py +89 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_gemini_plugin.py +44 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_git_timeout.py +36 -0
- cli_agent_runner-0.2.14/tests/unit/test_host_health.py +160 -0
- cli_agent_runner-0.2.14/tests/unit/test_metrics.py +103 -0
- cli_agent_runner-0.2.14/tests/unit/test_migrate_cmd.py +390 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_migrations.py +172 -7
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_assembly.py +1 -1
- cli_agent_runner-0.2.14/tests/unit/test_monitor_detect_rate_limit.py +87 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_detectors.py +66 -3
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_remote.py +59 -0
- cli_agent_runner-0.2.14/tests/unit/test_monitor_round_deferred_stale.py +59 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_outer_round_ceiling.py +13 -9
- cli_agent_runner-0.2.14/tests/unit/test_read_json_hardening.py +85 -0
- cli_agent_runner-0.2.14/tests/unit/test_resolve.py +167 -0
- cli_agent_runner-0.2.14/tests/unit/test_round_cmd.py +124 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_runner.py +61 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_runner_throttle.py +126 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_config_broken.py +31 -3
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_crash_loop.py +49 -1
- cli_agent_runner-0.2.14/tests/unit/test_serve_mem_gate.py +243 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_phase_schedule.py +1 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_round_log.py +2 -2
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_schedule_gate.py +1 -1
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_sentinel.py +6 -6
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_startup_hooks.py +8 -5
- cli_agent_runner-0.2.14/tests/unit/test_service_mode.py +103 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_service_unit.py +79 -15
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_startup_battery_exit.py +40 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_startup_check.py +20 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_upgrade_migrate.py +26 -0
- cli_agent_runner-0.2.12/agent_runner/_serve_policy.py +0 -89
- cli_agent_runner-0.2.12/agent_runner/cli/round_cmd.py +0 -54
- cli_agent_runner-0.2.12/agent_runner/config.py +0 -846
- cli_agent_runner-0.2.12/agent_runner/lifecycle.py +0 -108
- cli_agent_runner-0.2.12/agent_runner/monitor.py +0 -946
- cli_agent_runner-0.2.12/tests/integration/test_monitor_seeded.py +0 -52
- cli_agent_runner-0.2.12/tests/invariants/test_config_error_consistency.py +0 -74
- cli_agent_runner-0.2.12/tests/unit/test_api_service.py +0 -314
- cli_agent_runner-0.2.12/tests/unit/test_auto_stop_gating.py +0 -87
- cli_agent_runner-0.2.12/tests/unit/test_cli_common.py +0 -37
- cli_agent_runner-0.2.12/tests/unit/test_cli_main_boundary.py +0 -27
- cli_agent_runner-0.2.12/tests/unit/test_detect_hung_latch.py +0 -31
- cli_agent_runner-0.2.12/tests/unit/test_metrics.py +0 -48
- cli_agent_runner-0.2.12/tests/unit/test_migrate_cmd.py +0 -98
- cli_agent_runner-0.2.12/tests/unit/test_monitor_detect_rate_limit.py +0 -47
- cli_agent_runner-0.2.12/tests/unit/test_round_cmd.py +0 -57
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.codecov.yml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/workflows/ci.yml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/workflows/release.yml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.gitignore +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/BACKLOG.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/CODE_OF_CONDUCT.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/CONTRIBUTING.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/LICENSE +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/README.zh.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/SECURITY.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_redact.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_registry.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_substrate.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/codewhale.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/default_dirty_handler.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/kimi.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/__main__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/init_cmd.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/monitor_cmd.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/peek_cmd.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/service_cmd.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/defenses.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/phase_select.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/aider.toml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/claude.toml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/codewhale.toml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/gemini.toml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/kimi.toml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/pi.toml +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/prompt_loader.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/remote_relay.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/round_log.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/round_view.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/schedule.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/build.sh +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/README.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/events.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/long-running-agents.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/aider.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/codewhale.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/kimi.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/pi.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/thesis.md +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/_clock.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/conftest.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/contract/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_graceful_stop.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_install_systemd.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_monitor_remote.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_round_lifecycle.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/fixtures/cli-real-output/claude-2.1.143-assistant-tool-use.jsonl +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/fixtures/cli-real-output/claude-2.1.143-result-event.jsonl +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/fixtures/cli-real-output/gemini-0.42.0-result-event.jsonl +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/generate_vulture_whitelist.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_bounded_run.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_context_enricher_namespacing.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_dirty_handler_seam.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_grace_kill_emission.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_install_dry_run.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_plugin_detector_loaded.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_plugin_owned_paths.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_prompt_delivery_stdin.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_run_one_round_with_fake_agent.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_scaffold_presets.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_spawn_round_wedged.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_substrate_fingerprint.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_transient_error_backoff.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/_docs.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_atomic_write_enforced.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_auto_stop_policy_ssot.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_classification_ssot.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_builtin_plugins.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_claims_match_ssot.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_operator_surface.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_test_pointers_exist.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_transient_error_claims.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_usage_event_fields.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_docs_generated.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_entry_points_resolve.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_events_doc_contract.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_gen_blocks_name_their_source.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_layer_2_loop_size.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_monitor_self_exclusion.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_peek_schema_version.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_phase_select_stateless.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_plugins_config_stable.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_readme_zh_is_pointer.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_round_num_single_source.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_round_result_stable.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_stash_uses_sha_not_index.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_upstream_schema_canary.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_vulture_whitelist_generated.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/__init__.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_marker_scan.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_progress.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_signal_name.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_assemble_prompt.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_events_stream.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_read_round_num.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_resolve_phase.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_types.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_catalogs.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_claude_error_detector.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_claude_foreign_schema.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_init_install.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_monitor_http.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_service_peek_monitor.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_upgrade.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_codewhale_code_precedence.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_codewhale_plugin.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_coerce_int_poison.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_fresh_eyes.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_max_rounds.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_prompt_delivery.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_schedule.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_stop_file.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_substrate_fingerprint_paths.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_transient_error_action.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_context_store.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_default_dirty_handler.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_defenses.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_detector_isolation.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_detector_protocol.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_dirty_handlers.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_docgen.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_effective_throttle_view.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_emit_config_migrated.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_emit_schedule.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_emit_schedule_phase_skipped.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events_cmd_rollover.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_example_dirty_handler.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_example_plugin.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_exit_cause.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_fresh_eyes_trigger.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_hook_failure_isolation.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_hook_redact_order.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_hooks.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_http_progress.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_init_entry_points.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_interruptible_sleep_should_stop.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_kimi_plugin.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_lifecycle.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_cmd_severity.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_dedup_identity.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_dedup_rearm.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_detect_anomaly_repetitive.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_detect_supervisor_stale.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_event_tail.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_schedule_pause.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_network_blip_signal_guard.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_open_round_log.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_orphan_chain_single_pass.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_argparse.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_project_isolation.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_schedule.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_select.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_phase_agent_launch.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_phase_profiles.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_phase_select.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_pi_plugin.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_plugin_constants.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_presets.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_primary_prompt_file_home.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_prompt_loader.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_redact.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_round_cmd_sigterm.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_round_log_helpers.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_round_view.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_runner_sidecar_ordering.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_scaffold.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_schedule.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_cmd_bounded.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_policy.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_substrate.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_supervisor_stale_self_blind.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_throttle_back_off_ladder.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_throttle_plugin_classification.py +0 -0
- {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_vcs_state.py +0 -0
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
# bare name below marks one field "used". SSOT = the @dataclass definitions in
|
|
7
7
|
# agent_runner/; a new field is covered by regenerating, never by editing here.
|
|
8
8
|
|
|
9
|
+
# agent_runner._monitor_state.LocalSource
|
|
10
|
+
log_dir
|
|
11
|
+
|
|
12
|
+
# agent_runner._monitor_state._EventTail
|
|
13
|
+
offsets
|
|
14
|
+
buffer
|
|
15
|
+
|
|
9
16
|
# agent_runner.agent_runtime.RunResult
|
|
10
17
|
exit_code
|
|
11
18
|
duration_s
|
|
@@ -109,14 +116,14 @@ agent
|
|
|
109
116
|
since_round
|
|
110
117
|
phase
|
|
111
118
|
|
|
112
|
-
# agent_runner.config.AgentConfig
|
|
119
|
+
# agent_runner.config.models.AgentConfig
|
|
113
120
|
command
|
|
114
121
|
prompt_arg_template
|
|
115
122
|
name
|
|
116
123
|
env
|
|
117
124
|
prompt_delivery
|
|
118
125
|
|
|
119
|
-
# agent_runner.config.Config
|
|
126
|
+
# agent_runner.config.models.Config
|
|
120
127
|
agent
|
|
121
128
|
runtime
|
|
122
129
|
prompt
|
|
@@ -126,7 +133,7 @@ phases
|
|
|
126
133
|
plugins
|
|
127
134
|
schedule
|
|
128
135
|
|
|
129
|
-
# agent_runner.config.MonitorConfig
|
|
136
|
+
# agent_runner.config.models.MonitorConfig
|
|
130
137
|
auth_fail_patterns
|
|
131
138
|
auth_fail_hint
|
|
132
139
|
auto_stop_on
|
|
@@ -137,34 +144,34 @@ host_health
|
|
|
137
144
|
round_progress_interval_s
|
|
138
145
|
supervisor_stale_threshold_s
|
|
139
146
|
|
|
140
|
-
# agent_runner.config.MonitorHostHealthConfig
|
|
147
|
+
# agent_runner.config.models.MonitorHostHealthConfig
|
|
141
148
|
mem_avail_min_mb
|
|
142
149
|
disk_warning_pct
|
|
143
150
|
disk_critical_pct
|
|
144
151
|
|
|
145
|
-
# agent_runner.config.PhaseOverride
|
|
152
|
+
# agent_runner.config.models.PhaseOverride
|
|
146
153
|
round_timeout_s
|
|
147
154
|
disable_pre_round_hooks
|
|
148
155
|
prompt_files
|
|
149
156
|
agent
|
|
150
157
|
schedule
|
|
151
158
|
|
|
152
|
-
# agent_runner.config.PhasesConfig
|
|
159
|
+
# agent_runner.config.models.PhasesConfig
|
|
153
160
|
list
|
|
154
161
|
overrides
|
|
155
162
|
phase_policy
|
|
156
163
|
|
|
157
|
-
# agent_runner.config.PluginsConfig
|
|
164
|
+
# agent_runner.config.models.PluginsConfig
|
|
158
165
|
disable
|
|
159
166
|
raw
|
|
160
167
|
|
|
161
|
-
# agent_runner.config.Profile
|
|
168
|
+
# agent_runner.config.models.Profile
|
|
162
169
|
agent
|
|
163
170
|
runtime
|
|
164
171
|
schedule
|
|
165
172
|
prompt_files
|
|
166
173
|
|
|
167
|
-
# agent_runner.config.PromptConfig
|
|
174
|
+
# agent_runner.config.models.PromptConfig
|
|
168
175
|
file
|
|
169
176
|
files
|
|
170
177
|
inject_context
|
|
@@ -172,7 +179,7 @@ context_injection_mode
|
|
|
172
179
|
concat_separator
|
|
173
180
|
strip_yaml_frontmatter
|
|
174
181
|
|
|
175
|
-
# agent_runner.config.RuntimeConfig
|
|
182
|
+
# agent_runner.config.models.RuntimeConfig
|
|
176
183
|
work_dir
|
|
177
184
|
log_dir
|
|
178
185
|
round_timeout_s
|
|
@@ -189,12 +196,12 @@ dry_run
|
|
|
189
196
|
max_grace_after_result_s
|
|
190
197
|
grace_kill_ignore_patterns
|
|
191
198
|
|
|
192
|
-
# agent_runner.config.ScheduleConfig
|
|
199
|
+
# agent_runner.config.models.ScheduleConfig
|
|
193
200
|
timezone
|
|
194
201
|
run_windows
|
|
195
202
|
pause_windows
|
|
196
203
|
|
|
197
|
-
# agent_runner.config.VcsConfig
|
|
204
|
+
# agent_runner.config.models.VcsConfig
|
|
198
205
|
stash_idempotency_s
|
|
199
206
|
dirty_action
|
|
200
207
|
|
|
@@ -240,6 +247,12 @@ vcs
|
|
|
240
247
|
dirty_action
|
|
241
248
|
stash_idempotency_s
|
|
242
249
|
|
|
250
|
+
# agent_runner.host_health.Pressure
|
|
251
|
+
severity
|
|
252
|
+
signal
|
|
253
|
+
message
|
|
254
|
+
context
|
|
255
|
+
|
|
243
256
|
# agent_runner.lifecycle.PIDFile
|
|
244
257
|
path
|
|
245
258
|
|
|
@@ -247,18 +260,13 @@ path
|
|
|
247
260
|
detect
|
|
248
261
|
apply
|
|
249
262
|
describe
|
|
263
|
+
advisory
|
|
250
264
|
|
|
251
265
|
# agent_runner.migrations.MigrationResult
|
|
252
266
|
new_text
|
|
253
267
|
applied
|
|
254
268
|
manual
|
|
255
|
-
|
|
256
|
-
# agent_runner.monitor.LocalSource
|
|
257
|
-
log_dir
|
|
258
|
-
|
|
259
|
-
# agent_runner.monitor._EventTail
|
|
260
|
-
offsets
|
|
261
|
-
buffer
|
|
269
|
+
advisory
|
|
262
270
|
|
|
263
271
|
# agent_runner.phase_select.Selection
|
|
264
272
|
phase
|
|
@@ -5,6 +5,40 @@ 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.14] - 2026-09-03
|
|
9
|
+
|
|
10
|
+
### Breaking
|
|
11
|
+
- `[monitor.host_health]` unknown keys are now rejected, and a nested table given as a scalar (`[agent] env = "x"`, `[monitor] host_health = 1`) now raises `ConfigError` instead of crashing. **Run `agent-runner migrate` before `upgrade`**, as in 0.2.12/0.2.13.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- `mem_pressure` now gates on a cache-poor-valid signal (PSI, then swap-out rate, then combined low `MemFree`+`MemAvailable`) instead of the inflated `MemAvailable` alone, and warns once when the configured `mem_avail_min_mb` gate is provably inert on the host; `serve` defers starting a new round while the host reports pressure and terminates a ballooning round mid-flight before it goes unresponsive.
|
|
15
|
+
- An unreadable config (bad permissions, a directory) now fails cleanly with `ConfigError`/exit 78 instead of a raw traceback; a startup git-status timeout no longer crashes the check; a killed stash no longer strands `.git/index.lock`.
|
|
16
|
+
- `transient_error_backoff_capped` reports the raw detector reset time, not the ladder-extended one.
|
|
17
|
+
|
|
18
|
+
### Notes
|
|
19
|
+
- New event kinds: `round_deferred`, `round_resumed`, `round_mem_terminated`; new alert kinds: `mem_signal_unavailable`, `mem_pressure_gate_inert`. `peek --json` schema is unchanged this release.
|
|
20
|
+
- `config.py`/`monitor.py`/api's round-input helpers were reorganized into internal modules this release — no public API change.
|
|
21
|
+
|
|
22
|
+
See `docs/migrations/0.2.md`.
|
|
23
|
+
|
|
24
|
+
## [0.2.13] - 2026-09-02
|
|
25
|
+
|
|
26
|
+
### Breaking
|
|
27
|
+
- Config validation now rejects unknown keys in base `[agent]`/`[runtime]`/`[vcs]`/`[monitor]`, a table given as a scalar, unknown per-phase `[phases.<name>.prompt]` keys, and an argv `prompt_arg_template` missing `{prompt}`. **Run `agent-runner migrate` before `upgrade`**, as in 0.2.12.
|
|
28
|
+
- systemd `serve` units grow `TimeoutStopSec` (now `round_timeout_s + 210`, up from `+60`) — re-render after upgrading.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- Round-child exit codes are classified by permanence, not a type whitelist: a config break stays 78, a self-healing environmental failure (lock contention, a git-status timeout, an unwritable log dir) now reliably reaches retryable 76, and everything else still falls to 1 so the crash-loop breaker bounds a genuine bug; serve itself still never exits 76.
|
|
32
|
+
- `kill` reaps the whole round-and-agent process group; `stop`/`restart`/`uninstall` are drain-aware so a mid-round stop no longer leaves a systemd serve stopped or raises; service-mode detection checks systemd `is-active` instead of guessing; and `monitor_auto_stop_triggered` fires only after a confirmed stop.
|
|
33
|
+
- `install --system` rejects control characters in `work_dir`/`log_dir`/config path, closing a root-injection path through the rendered unit.
|
|
34
|
+
- `read_json`/orphan-state reads survive a non-UTF-8 byte or a directory instead of crashing serve; a git-status timeout mid-round no longer drops the round's own bookkeeping (`dirty_check_failed`).
|
|
35
|
+
- Throttle readers (serve's loop-top gate, the skip path, `peek`, monitor) converge on one reset source; the back-off sleep now wakes early on an NTP clock jump.
|
|
36
|
+
|
|
37
|
+
### Notes
|
|
38
|
+
- New event kind: `dirty_check_failed`. `peek --json` schema is unchanged this release.
|
|
39
|
+
|
|
40
|
+
See `docs/migrations/0.2.md`.
|
|
41
|
+
|
|
8
42
|
## [0.2.12] - 2026-08-31
|
|
9
43
|
|
|
10
44
|
### Breaking
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: cli-agent-runner
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.14
|
|
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
|
|
@@ -49,7 +49,7 @@ full disks, runaway memory.
|
|
|
49
49
|
|
|
50
50
|
```
|
|
51
51
|
┌──────────────────────────────────────────┐
|
|
52
|
-
│ Layer 3: The Witness (monitor) │
|
|
52
|
+
│ Layer 3: The Witness (monitor) │ 13 detectors + auto-stop
|
|
53
53
|
├──────────────────────────────────────────┤
|
|
54
54
|
│ Layer 2: The Loop (serve) │ signal-trapping restart loop
|
|
55
55
|
├──────────────────────────────────────────┤
|
|
@@ -86,7 +86,7 @@ Full walkthrough: [`docs/quickstart.md`](docs/quickstart.md).
|
|
|
86
86
|
|---|---|
|
|
87
87
|
| `init` / `install` / `uninstall` | `peek` — state snapshot |
|
|
88
88
|
| `start` / `stop` / `kill` | `watch` — peek in a refresh loop |
|
|
89
|
-
| `restart` / `status` | `monitor` —
|
|
89
|
+
| `restart` / `status` | `monitor` — 13 detectors, alerts, auto-stop |
|
|
90
90
|
| `round` / `serve` | `events` — query / stream events.jsonl |
|
|
91
91
|
| `upgrade` / `migrate` | |
|
|
92
92
|
|
|
@@ -111,11 +111,14 @@ Optionally pause the loop during off-hours: `[schedule]` run/pause windows gate
|
|
|
111
111
|
`serve` (override with `serve --ignore-schedule`) — see the `[schedule]` section
|
|
112
112
|
of [`docs/configuration.md`](docs/configuration.md).
|
|
113
113
|
|
|
114
|
-
## Monitor:
|
|
114
|
+
## Monitor: 13 detectors
|
|
115
115
|
|
|
116
116
|
Notify only: `timeout_rate`, `hung`, `orphan_chain`, `disk_warning`,
|
|
117
|
-
`mem_pressure`, `
|
|
118
|
-
`
|
|
117
|
+
`mem_pressure`, `mem_pressure_gate_inert`, `mem_signal_unavailable`,
|
|
118
|
+
`network_fail`, `rate_limit_active`, `anomaly_repetitive_active`,
|
|
119
|
+
`supervisor_stale`. `mem_pressure` also drives a separate serve-loop
|
|
120
|
+
admission gate that defers or terminates rounds under real memory pressure —
|
|
121
|
+
see `docs/architecture.md`.
|
|
119
122
|
|
|
120
123
|
**Auto-stop the service** (continuing is harmful):
|
|
121
124
|
- `oauth_fail` — burning API quota on auth-rejected rounds
|
|
@@ -13,7 +13,7 @@ full disks, runaway memory.
|
|
|
13
13
|
|
|
14
14
|
```
|
|
15
15
|
┌──────────────────────────────────────────┐
|
|
16
|
-
│ Layer 3: The Witness (monitor) │
|
|
16
|
+
│ Layer 3: The Witness (monitor) │ 13 detectors + auto-stop
|
|
17
17
|
├──────────────────────────────────────────┤
|
|
18
18
|
│ Layer 2: The Loop (serve) │ signal-trapping restart loop
|
|
19
19
|
├──────────────────────────────────────────┤
|
|
@@ -50,7 +50,7 @@ Full walkthrough: [`docs/quickstart.md`](docs/quickstart.md).
|
|
|
50
50
|
|---|---|
|
|
51
51
|
| `init` / `install` / `uninstall` | `peek` — state snapshot |
|
|
52
52
|
| `start` / `stop` / `kill` | `watch` — peek in a refresh loop |
|
|
53
|
-
| `restart` / `status` | `monitor` —
|
|
53
|
+
| `restart` / `status` | `monitor` — 13 detectors, alerts, auto-stop |
|
|
54
54
|
| `round` / `serve` | `events` — query / stream events.jsonl |
|
|
55
55
|
| `upgrade` / `migrate` | |
|
|
56
56
|
|
|
@@ -75,11 +75,14 @@ Optionally pause the loop during off-hours: `[schedule]` run/pause windows gate
|
|
|
75
75
|
`serve` (override with `serve --ignore-schedule`) — see the `[schedule]` section
|
|
76
76
|
of [`docs/configuration.md`](docs/configuration.md).
|
|
77
77
|
|
|
78
|
-
## Monitor:
|
|
78
|
+
## Monitor: 13 detectors
|
|
79
79
|
|
|
80
80
|
Notify only: `timeout_rate`, `hung`, `orphan_chain`, `disk_warning`,
|
|
81
|
-
`mem_pressure`, `
|
|
82
|
-
`
|
|
81
|
+
`mem_pressure`, `mem_pressure_gate_inert`, `mem_signal_unavailable`,
|
|
82
|
+
`network_fail`, `rate_limit_active`, `anomaly_repetitive_active`,
|
|
83
|
+
`supervisor_stale`. `mem_pressure` also drives a separate serve-loop
|
|
84
|
+
admission gate that defers or terminates rounds under real memory pressure —
|
|
85
|
+
see `docs/architecture.md`.
|
|
83
86
|
|
|
84
87
|
**Auto-stop the service** (continuing is harmful):
|
|
85
88
|
- `oauth_fail` — burning API quota on auth-rejected rounds
|
|
@@ -255,10 +255,12 @@ RENDERERS: dict[str, Renderer] = {
|
|
|
255
255
|
"defenses-table": Renderer(render_defenses_table, "agent_runner/defenses.py catalog()"),
|
|
256
256
|
"detector-list": Renderer(
|
|
257
257
|
render_detector_list,
|
|
258
|
-
"agent_runner/
|
|
258
|
+
"agent_runner/_monitor_registry.py KNOWN_ALERT_KINDS / AUTO_STOP_ALERTS",
|
|
259
259
|
),
|
|
260
260
|
"event-kinds": Renderer(render_event_kinds_list, "agent_runner/events.py KNOWN_EVENT_KINDS"),
|
|
261
|
-
"config-schema": Renderer(
|
|
261
|
+
"config-schema": Renderer(
|
|
262
|
+
render_config_schema_table, "agent_runner/config/models.py dataclasses"
|
|
263
|
+
),
|
|
262
264
|
"verb-table": Renderer(render_verb_table, "agent_runner/cli argparse subparsers"),
|
|
263
265
|
"migrate-transforms": Renderer(
|
|
264
266
|
_render_migrate_transforms, "agent_runner/migrations.py MIGRATIONS"
|
|
@@ -21,10 +21,13 @@ __all__ = [
|
|
|
21
21
|
"emit_fresh_eyes_round_triggered",
|
|
22
22
|
"emit_max_rounds_reached",
|
|
23
23
|
"emit_rate_limit_stop",
|
|
24
|
+
"emit_round_deferred",
|
|
24
25
|
"emit_round_grace_extended",
|
|
25
26
|
"emit_round_grace_kill",
|
|
26
27
|
"emit_round_logs_prune_deferred",
|
|
28
|
+
"emit_round_mem_terminated",
|
|
27
29
|
"emit_round_progress",
|
|
30
|
+
"emit_round_resumed",
|
|
28
31
|
"emit_round_substrate_after",
|
|
29
32
|
"emit_round_substrate_before",
|
|
30
33
|
"emit_round_supervisor_wedged",
|
|
@@ -54,7 +57,8 @@ def emit_max_rounds_reached(log_dir: Path, *, rounds_completed: int, max_rounds:
|
|
|
54
57
|
|
|
55
58
|
|
|
56
59
|
def emit_config_broken(log_dir: Path, *, reason: str) -> None:
|
|
57
|
-
"""Emit config_broken (serve
|
|
60
|
+
"""Emit config_broken (serve gave up on a permanent, non-self-healing failure —
|
|
61
|
+
a startup-battery check, or any other ConfigError-classified round exit)."""
|
|
58
62
|
from agent_runner.events import CONFIG_BROKEN, emit
|
|
59
63
|
|
|
60
64
|
emit(log_dir, CONFIG_BROKEN, reason=reason)
|
|
@@ -70,7 +74,7 @@ def emit_crash_loop(log_dir: Path, *, consecutive: int, exit_code: int, log_path
|
|
|
70
74
|
from agent_runner.events import CRASH_LOOP, emit
|
|
71
75
|
|
|
72
76
|
try:
|
|
73
|
-
reason = redact_secrets(log_path.read_text(errors="replace")[-2000:])
|
|
77
|
+
reason = redact_secrets(log_path.read_text(encoding="utf-8", errors="replace")[-2000:])
|
|
74
78
|
except OSError:
|
|
75
79
|
reason = ""
|
|
76
80
|
emit(log_dir, CRASH_LOOP, consecutive=consecutive, exit_code=exit_code, reason=reason)
|
|
@@ -149,6 +153,36 @@ def emit_schedule_resumed(log_dir: Path, *, paused_for_s: int) -> None:
|
|
|
149
153
|
emit(log_dir, SCHEDULE_RESUMED, paused_for_s=paused_for_s)
|
|
150
154
|
|
|
151
155
|
|
|
156
|
+
def emit_round_deferred(log_dir: Path, *, severity: str, signal: str, message: str) -> None:
|
|
157
|
+
"""Emit round_deferred when the pre-round admission gate defers the next
|
|
158
|
+
round under host_health memory pressure (Group 3 action half). Paired with
|
|
159
|
+
emit_round_resumed once pressure clears -- like schedule_paused/resumed --
|
|
160
|
+
so a long defer does not trip detect_supervisor_stale (see its suppression
|
|
161
|
+
set in _monitor_detectors.py)."""
|
|
162
|
+
from agent_runner.events import ROUND_DEFERRED, emit
|
|
163
|
+
|
|
164
|
+
emit(log_dir, ROUND_DEFERRED, severity=severity, signal=signal, message=message)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def emit_round_resumed(log_dir: Path, *, deferred_for_s: int) -> None:
|
|
168
|
+
"""Emit round_resumed when a memory-pressure round deferral clears."""
|
|
169
|
+
from agent_runner.events import ROUND_RESUMED, emit
|
|
170
|
+
|
|
171
|
+
emit(log_dir, ROUND_RESUMED, deferred_for_s=deferred_for_s)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def emit_round_mem_terminated(
|
|
175
|
+
log_dir: Path, *, pid: int, severity: str, signal: str, message: str
|
|
176
|
+
) -> None:
|
|
177
|
+
"""Emit when _spawn_round's mid-round hard floor terminated a ballooning
|
|
178
|
+
round on critical host_health pressure -- the actual coma-preventer (a
|
|
179
|
+
pre-round-only gate can't stop a single round mid-flight). Distinct from
|
|
180
|
+
round_supervisor_wedged (a wall-clock ceiling breach, unrelated cause)."""
|
|
181
|
+
from agent_runner.events import ROUND_MEM_TERMINATED, emit
|
|
182
|
+
|
|
183
|
+
emit(log_dir, ROUND_MEM_TERMINATED, pid=pid, severity=severity, signal=signal, message=message)
|
|
184
|
+
|
|
185
|
+
|
|
152
186
|
def emit_round_substrate_before(
|
|
153
187
|
log_dir: Path, *, round_num: int, git_head: str | None, paths_hash: str | None
|
|
154
188
|
) -> None:
|
|
@@ -315,8 +349,11 @@ def emit_agent_usage_recorded(
|
|
|
315
349
|
- ``models_breakdown``: only populated when a round used multiple models
|
|
316
350
|
(gemini multi-model rounds). None for claude (always single-model).
|
|
317
351
|
- ``cache_creation_tokens``: claude only — ``usage.cache_creation_input_tokens``,
|
|
318
|
-
independent count from ``cached_tokens`` (cache_read).
|
|
319
|
-
|
|
352
|
+
independent count from ``cached_tokens`` (cache_read). Priced differently
|
|
353
|
+
from fresh input by the provider; the framework records the count only and
|
|
354
|
+
never interprets cost (no price tables here — see ``cost_usd`` above for the
|
|
355
|
+
one cost figure the framework passes through verbatim). Gemini has no
|
|
356
|
+
equivalent → 0.
|
|
320
357
|
- ``tool_call_count``: number of tool invocations the agent made in the round.
|
|
321
358
|
Claude: count of ``tool_use`` content blocks across all assistant events.
|
|
322
359
|
Gemini: ``stats.tool_calls``.
|