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.
Files changed (350) hide show
  1. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.vulture-whitelist.py +27 -19
  2. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/CHANGELOG.md +34 -0
  3. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/PKG-INFO +9 -6
  4. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/README.md +8 -5
  5. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_docgen.py +4 -2
  6. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_emit.py +41 -4
  7. cli_agent_runner-0.2.14/agent_runner/_monitor_detectors.py +581 -0
  8. cli_agent_runner-0.2.14/agent_runner/_monitor_registry.py +98 -0
  9. cli_agent_runner-0.2.14/agent_runner/_monitor_state.py +170 -0
  10. cli_agent_runner-0.2.14/agent_runner/_resolve.py +138 -0
  11. cli_agent_runner-0.2.14/agent_runner/_round_support.py +100 -0
  12. cli_agent_runner-0.2.14/agent_runner/_serve_policy.py +189 -0
  13. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_throttle.py +178 -46
  14. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_version.py +2 -2
  15. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/agent_runtime.py +21 -5
  16. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/api.py +181 -172
  17. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/api_types.py +7 -0
  18. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/_constants.py +3 -1
  19. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/claude_rate_limit.py +7 -2
  20. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/gemini.py +53 -20
  21. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/pi.py +3 -1
  22. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/__init__.py +12 -2
  23. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/common.py +36 -6
  24. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/events_cmd.py +8 -25
  25. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/install_cmd.py +15 -5
  26. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/migrate_cmd.py +5 -4
  27. cli_agent_runner-0.2.14/agent_runner/cli/round_cmd.py +86 -0
  28. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/serve_cmd.py +183 -14
  29. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/upgrade_cmd.py +2 -1
  30. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/clock.py +20 -0
  31. cli_agent_runner-0.2.14/agent_runner/config/__init__.py +64 -0
  32. cli_agent_runner-0.2.14/agent_runner/config/errors.py +12 -0
  33. cli_agent_runner-0.2.14/agent_runner/config/loader.py +107 -0
  34. cli_agent_runner-0.2.14/agent_runner/config/models.py +302 -0
  35. cli_agent_runner-0.2.14/agent_runner/config/parsers.py +527 -0
  36. cli_agent_runner-0.2.14/agent_runner/config/validators.py +173 -0
  37. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/context_store.py +21 -4
  38. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/events.py +53 -1
  39. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/hooks.py +8 -3
  40. cli_agent_runner-0.2.14/agent_runner/host_health.py +178 -0
  41. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/http_progress.py +7 -11
  42. cli_agent_runner-0.2.14/agent_runner/lifecycle.py +192 -0
  43. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/metrics.py +61 -1
  44. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/migrations.py +302 -27
  45. cli_agent_runner-0.2.14/agent_runner/monitor.py +322 -0
  46. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/runner.py +48 -10
  47. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/scaffold.py +2 -1
  48. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/service_unit.py +48 -19
  49. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/startup_check.py +15 -2
  50. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/vcs_state.py +17 -5
  51. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/architecture.md +23 -6
  52. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/commands.md +17 -3
  53. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/configuration.md +8 -8
  54. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/migrations/0.2.md +114 -0
  55. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/plugins.md +8 -6
  56. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/quickstart.md +7 -8
  57. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/runbook.md +35 -23
  58. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/pyproject.toml +2 -1
  59. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/_test_helpers.py +20 -0
  60. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/contract/test_public_api_surface.py +9 -1
  61. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/conftest.py +1 -1
  62. cli_agent_runner-0.2.14/tests/integration/test_auto_stop_e2e.py +188 -0
  63. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_fresh_eyes_signal.py +1 -1
  64. cli_agent_runner-0.2.14/tests/integration/test_monitor_seeded.py +141 -0
  65. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_plugin_real_flow.py +1 -1
  66. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_serve_loop.py +1 -1
  67. cli_agent_runner-0.2.14/tests/integration/test_spawn_round_mem_floor.py +224 -0
  68. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/_event_scan.py +64 -16
  69. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_architecture.py +11 -4
  70. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_authored_facts_declared.py +3 -0
  71. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_catalogs.py +3 -0
  72. cli_agent_runner-0.2.14/tests/invariants/test_config_error_consistency.py +139 -0
  73. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_config_value_set_ssot.py +12 -7
  74. cli_agent_runner-0.2.14/tests/invariants/test_dataclass_fields_have_producers.py +210 -0
  75. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_cli_claims.py +13 -3
  76. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_docs_index_complete.py +3 -1
  77. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_event_int_coercion.py +7 -1
  78. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_event_kind_registry.py +3 -0
  79. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_event_kinds_ssot.py +3 -0
  80. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_hook_contract_docs.py +3 -1
  81. cli_agent_runner-0.2.14/tests/invariants/test_migrations_registry_ssot.py +22 -0
  82. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_module_boundaries.py +1 -0
  83. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_module_sizes.py +3 -0
  84. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_ai_signatures.py +9 -0
  85. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_pytest_skip_on_parse_fail.py +3 -0
  86. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_raw_time.py +28 -1
  87. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_no_vacuous_invariants.py +16 -0
  88. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_repo_constants_patched_in_tests.py +3 -0
  89. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_round_log_decode_boundary.py +3 -2
  90. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_set_diff_for_auto_tool_classification.py +3 -1
  91. cli_agent_runner-0.2.14/tests/invariants/test_timeout_budget_invariant.py +47 -0
  92. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/parser.py +6 -3
  93. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/test_parser.py +8 -0
  94. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/test_quickstart.py +10 -0
  95. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime.py +27 -11
  96. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_grace.py +48 -0
  97. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_reap.py +50 -0
  98. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_install.py +75 -0
  99. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_observation.py +2 -1
  100. cli_agent_runner-0.2.14/tests/unit/test_api_service.py +583 -0
  101. cli_agent_runner-0.2.14/tests/unit/test_auto_stop_gating.py +157 -0
  102. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli.py +1 -1
  103. cli_agent_runner-0.2.14/tests/unit/test_cli_common.py +93 -0
  104. cli_agent_runner-0.2.14/tests/unit/test_cli_main_boundary.py +66 -0
  105. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config.py +194 -5
  106. cli_agent_runner-0.2.14/tests/unit/test_config_nested_strictness.py +83 -0
  107. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_strictness.py +3 -3
  108. cli_agent_runner-0.2.14/tests/unit/test_control_char_config.py +129 -0
  109. cli_agent_runner-0.2.14/tests/unit/test_detect_hung_latch.py +69 -0
  110. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events_cmd.py +70 -0
  111. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events_cmd_tail.py +38 -1
  112. cli_agent_runner-0.2.14/tests/unit/test_events_jsonl_decode.py +162 -0
  113. cli_agent_runner-0.2.14/tests/unit/test_exit_classifier.py +89 -0
  114. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_gemini_plugin.py +44 -0
  115. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_git_timeout.py +36 -0
  116. cli_agent_runner-0.2.14/tests/unit/test_host_health.py +160 -0
  117. cli_agent_runner-0.2.14/tests/unit/test_metrics.py +103 -0
  118. cli_agent_runner-0.2.14/tests/unit/test_migrate_cmd.py +390 -0
  119. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_migrations.py +172 -7
  120. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_assembly.py +1 -1
  121. cli_agent_runner-0.2.14/tests/unit/test_monitor_detect_rate_limit.py +87 -0
  122. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_detectors.py +66 -3
  123. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_remote.py +59 -0
  124. cli_agent_runner-0.2.14/tests/unit/test_monitor_round_deferred_stale.py +59 -0
  125. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_outer_round_ceiling.py +13 -9
  126. cli_agent_runner-0.2.14/tests/unit/test_read_json_hardening.py +85 -0
  127. cli_agent_runner-0.2.14/tests/unit/test_resolve.py +167 -0
  128. cli_agent_runner-0.2.14/tests/unit/test_round_cmd.py +124 -0
  129. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_runner.py +61 -0
  130. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_runner_throttle.py +126 -0
  131. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_config_broken.py +31 -3
  132. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_crash_loop.py +49 -1
  133. cli_agent_runner-0.2.14/tests/unit/test_serve_mem_gate.py +243 -0
  134. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_phase_schedule.py +1 -1
  135. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_round_log.py +2 -2
  136. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_schedule_gate.py +1 -1
  137. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_sentinel.py +6 -6
  138. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_startup_hooks.py +8 -5
  139. cli_agent_runner-0.2.14/tests/unit/test_service_mode.py +103 -0
  140. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_service_unit.py +79 -15
  141. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_startup_battery_exit.py +40 -0
  142. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_startup_check.py +20 -0
  143. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_upgrade_migrate.py +26 -0
  144. cli_agent_runner-0.2.12/agent_runner/_serve_policy.py +0 -89
  145. cli_agent_runner-0.2.12/agent_runner/cli/round_cmd.py +0 -54
  146. cli_agent_runner-0.2.12/agent_runner/config.py +0 -846
  147. cli_agent_runner-0.2.12/agent_runner/lifecycle.py +0 -108
  148. cli_agent_runner-0.2.12/agent_runner/monitor.py +0 -946
  149. cli_agent_runner-0.2.12/tests/integration/test_monitor_seeded.py +0 -52
  150. cli_agent_runner-0.2.12/tests/invariants/test_config_error_consistency.py +0 -74
  151. cli_agent_runner-0.2.12/tests/unit/test_api_service.py +0 -314
  152. cli_agent_runner-0.2.12/tests/unit/test_auto_stop_gating.py +0 -87
  153. cli_agent_runner-0.2.12/tests/unit/test_cli_common.py +0 -37
  154. cli_agent_runner-0.2.12/tests/unit/test_cli_main_boundary.py +0 -27
  155. cli_agent_runner-0.2.12/tests/unit/test_detect_hung_latch.py +0 -31
  156. cli_agent_runner-0.2.12/tests/unit/test_metrics.py +0 -48
  157. cli_agent_runner-0.2.12/tests/unit/test_migrate_cmd.py +0 -98
  158. cli_agent_runner-0.2.12/tests/unit/test_monitor_detect_rate_limit.py +0 -47
  159. cli_agent_runner-0.2.12/tests/unit/test_round_cmd.py +0 -57
  160. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.codecov.yml +0 -0
  161. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  162. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  163. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  164. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  165. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/workflows/ci.yml +0 -0
  166. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.github/workflows/release.yml +0 -0
  167. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/.gitignore +0 -0
  168. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/BACKLOG.md +0 -0
  169. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/CODE_OF_CONDUCT.md +0 -0
  170. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/CONTRIBUTING.md +0 -0
  171. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/LICENSE +0 -0
  172. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/README.zh.md +0 -0
  173. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/SECURITY.md +0 -0
  174. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/__init__.py +0 -0
  175. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_redact.py +0 -0
  176. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_registry.py +0 -0
  177. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/_substrate.py +0 -0
  178. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/__init__.py +0 -0
  179. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/codewhale.py +0 -0
  180. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/default_dirty_handler.py +0 -0
  181. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/builtin_plugins/kimi.py +0 -0
  182. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/__main__.py +0 -0
  183. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/init_cmd.py +0 -0
  184. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/monitor_cmd.py +0 -0
  185. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/peek_cmd.py +0 -0
  186. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/cli/service_cmd.py +0 -0
  187. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/defenses.py +0 -0
  188. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/phase_select.py +0 -0
  189. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/__init__.py +0 -0
  190. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/aider.toml +0 -0
  191. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/claude.toml +0 -0
  192. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/codewhale.toml +0 -0
  193. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/gemini.toml +0 -0
  194. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/kimi.toml +0 -0
  195. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/presets/pi.toml +0 -0
  196. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/prompt_loader.py +0 -0
  197. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/remote_relay.py +0 -0
  198. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/round_log.py +0 -0
  199. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/round_view.py +0 -0
  200. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/agent_runner/schedule.py +0 -0
  201. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/build.sh +0 -0
  202. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/README.md +0 -0
  203. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/events.md +0 -0
  204. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/long-running-agents.md +0 -0
  205. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/aider.md +0 -0
  206. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/codewhale.md +0 -0
  207. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/kimi.md +0 -0
  208. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/recipes/pi.md +0 -0
  209. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/docs/thesis.md +0 -0
  210. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/__init__.py +0 -0
  211. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/_clock.py +0 -0
  212. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/conftest.py +0 -0
  213. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/contract/__init__.py +0 -0
  214. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/__init__.py +0 -0
  215. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_graceful_stop.py +0 -0
  216. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_install_systemd.py +0 -0
  217. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_monitor_remote.py +0 -0
  218. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/e2e/test_e2e_round_lifecycle.py +0 -0
  219. {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
  220. {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
  221. {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
  222. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/generate_vulture_whitelist.py +0 -0
  223. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/__init__.py +0 -0
  224. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_bounded_run.py +0 -0
  225. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_context_enricher_namespacing.py +0 -0
  226. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_dirty_handler_seam.py +0 -0
  227. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_grace_kill_emission.py +0 -0
  228. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_install_dry_run.py +0 -0
  229. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_plugin_detector_loaded.py +0 -0
  230. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_plugin_owned_paths.py +0 -0
  231. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_prompt_delivery_stdin.py +0 -0
  232. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_run_one_round_with_fake_agent.py +0 -0
  233. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_scaffold_presets.py +0 -0
  234. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_spawn_round_wedged.py +0 -0
  235. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_substrate_fingerprint.py +0 -0
  236. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/integration/test_transient_error_backoff.py +0 -0
  237. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/__init__.py +0 -0
  238. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/_docs.py +0 -0
  239. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_atomic_write_enforced.py +0 -0
  240. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_auto_stop_policy_ssot.py +0 -0
  241. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_classification_ssot.py +0 -0
  242. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_builtin_plugins.py +0 -0
  243. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_claims_match_ssot.py +0 -0
  244. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_operator_surface.py +0 -0
  245. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_test_pointers_exist.py +0 -0
  246. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_transient_error_claims.py +0 -0
  247. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_doc_usage_event_fields.py +0 -0
  248. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_docs_generated.py +0 -0
  249. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_entry_points_resolve.py +0 -0
  250. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_events_doc_contract.py +0 -0
  251. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_gen_blocks_name_their_source.py +0 -0
  252. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_layer_2_loop_size.py +0 -0
  253. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_monitor_self_exclusion.py +0 -0
  254. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_peek_schema_version.py +0 -0
  255. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_phase_select_stateless.py +0 -0
  256. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_plugins_config_stable.py +0 -0
  257. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_readme_zh_is_pointer.py +0 -0
  258. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_round_num_single_source.py +0 -0
  259. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_round_result_stable.py +0 -0
  260. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_stash_uses_sha_not_index.py +0 -0
  261. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_upstream_schema_canary.py +0 -0
  262. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/invariants/test_vulture_whitelist_generated.py +0 -0
  263. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/literate/__init__.py +0 -0
  264. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/__init__.py +0 -0
  265. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_marker_scan.py +0 -0
  266. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_progress.py +0 -0
  267. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_agent_runtime_signal_name.py +0 -0
  268. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_assemble_prompt.py +0 -0
  269. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_events_stream.py +0 -0
  270. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_read_round_num.py +0 -0
  271. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_resolve_phase.py +0 -0
  272. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_api_types.py +0 -0
  273. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_catalogs.py +0 -0
  274. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_claude_error_detector.py +0 -0
  275. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_claude_foreign_schema.py +0 -0
  276. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_init_install.py +0 -0
  277. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_monitor_http.py +0 -0
  278. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_service_peek_monitor.py +0 -0
  279. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_cli_upgrade.py +0 -0
  280. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_codewhale_code_precedence.py +0 -0
  281. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_codewhale_plugin.py +0 -0
  282. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_coerce_int_poison.py +0 -0
  283. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_fresh_eyes.py +0 -0
  284. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_max_rounds.py +0 -0
  285. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_prompt_delivery.py +0 -0
  286. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_schedule.py +0 -0
  287. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_stop_file.py +0 -0
  288. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_substrate_fingerprint_paths.py +0 -0
  289. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_config_transient_error_action.py +0 -0
  290. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_context_store.py +0 -0
  291. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_default_dirty_handler.py +0 -0
  292. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_defenses.py +0 -0
  293. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_detector_isolation.py +0 -0
  294. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_detector_protocol.py +0 -0
  295. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_dirty_handlers.py +0 -0
  296. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_docgen.py +0 -0
  297. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_effective_throttle_view.py +0 -0
  298. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_emit_config_migrated.py +0 -0
  299. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_emit_schedule.py +0 -0
  300. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_emit_schedule_phase_skipped.py +0 -0
  301. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events.py +0 -0
  302. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_events_cmd_rollover.py +0 -0
  303. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_example_dirty_handler.py +0 -0
  304. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_example_plugin.py +0 -0
  305. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_exit_cause.py +0 -0
  306. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_fresh_eyes_trigger.py +0 -0
  307. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_hook_failure_isolation.py +0 -0
  308. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_hook_redact_order.py +0 -0
  309. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_hooks.py +0 -0
  310. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_http_progress.py +0 -0
  311. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_init_entry_points.py +0 -0
  312. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_interruptible_sleep_should_stop.py +0 -0
  313. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_kimi_plugin.py +0 -0
  314. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_lifecycle.py +0 -0
  315. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_cmd_severity.py +0 -0
  316. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_dedup_identity.py +0 -0
  317. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_dedup_rearm.py +0 -0
  318. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_detect_anomaly_repetitive.py +0 -0
  319. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_detect_supervisor_stale.py +0 -0
  320. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_event_tail.py +0 -0
  321. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_monitor_schedule_pause.py +0 -0
  322. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_network_blip_signal_guard.py +0 -0
  323. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_open_round_log.py +0 -0
  324. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_orphan_chain_single_pass.py +0 -0
  325. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_argparse.py +0 -0
  326. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_project_isolation.py +0 -0
  327. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_schedule.py +0 -0
  328. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_peek_select.py +0 -0
  329. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_phase_agent_launch.py +0 -0
  330. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_phase_profiles.py +0 -0
  331. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_phase_select.py +0 -0
  332. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_pi_plugin.py +0 -0
  333. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_plugin_constants.py +0 -0
  334. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_presets.py +0 -0
  335. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_primary_prompt_file_home.py +0 -0
  336. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_prompt_loader.py +0 -0
  337. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_redact.py +0 -0
  338. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_round_cmd_sigterm.py +0 -0
  339. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_round_log_helpers.py +0 -0
  340. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_round_view.py +0 -0
  341. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_runner_sidecar_ordering.py +0 -0
  342. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_scaffold.py +0 -0
  343. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_schedule.py +0 -0
  344. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_cmd_bounded.py +0 -0
  345. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_serve_policy.py +0 -0
  346. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_substrate.py +0 -0
  347. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_supervisor_stale_self_blind.py +0 -0
  348. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_throttle_back_off_ladder.py +0 -0
  349. {cli_agent_runner-0.2.12 → cli_agent_runner-0.2.14}/tests/unit/test_throttle_plugin_classification.py +0 -0
  350. {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.12
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) │ 11 detectors + auto-stop
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` — 11 detectors, alerts, auto-stop |
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: 11 detectors
114
+ ## Monitor: 13 detectors
115
115
 
116
116
  Notify only: `timeout_rate`, `hung`, `orphan_chain`, `disk_warning`,
117
- `mem_pressure`, `network_fail`, `rate_limit_active`,
118
- `anomaly_repetitive_active`, `supervisor_stale`.
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) │ 11 detectors + auto-stop
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` — 11 detectors, alerts, auto-stop |
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: 11 detectors
78
+ ## Monitor: 13 detectors
79
79
 
80
80
  Notify only: `timeout_rate`, `hung`, `orphan_chain`, `disk_warning`,
81
- `mem_pressure`, `network_fail`, `rate_limit_active`,
82
- `anomaly_repetitive_active`, `supervisor_stale`.
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/monitor.py KNOWN_ALERT_KINDS / AUTO_STOP_ALERTS",
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(render_config_schema_table, "agent_runner/config.py dataclasses"),
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 stopped on a permanent startup-battery failure)."""
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). Billed at ~25% premium
319
- over fresh input per Anthropic pricing. Gemini has no equivalent 0.
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``.