clud 2.8.2__tar.gz → 2.8.4__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 (404) hide show
  1. {clud-2.8.2 → clud-2.8.4}/Cargo.lock +34 -6
  2. {clud-2.8.2 → clud-2.8.4}/Cargo.toml +1 -1
  3. {clud-2.8.2 → clud-2.8.4}/PKG-INFO +1 -1
  4. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/Cargo.toml +4 -0
  5. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/README.md +2 -0
  6. clud-2.8.4/crates/clud-bin/assets/fonts/DejaVu-LICENSE.txt +187 -0
  7. clud-2.8.4/crates/clud-bin/assets/fonts/DejaVuSansMono.ttf +0 -0
  8. clud-2.8.4/crates/clud-bin/assets/server-settings.json +9 -0
  9. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/README.md +20 -3
  10. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/args.rs +16 -0
  11. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_settings.rs +61 -7
  12. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_settings_tests.rs +44 -0
  13. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_bridge.rs +16 -16
  14. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/builder.rs +1 -0
  15. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/cpu_banner.rs +96 -10
  16. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/cpu_banner_tests.rs +138 -4
  17. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/failover.rs +21 -5
  18. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/foreground_runtime.rs +273 -13
  19. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/harness_picker.rs +119 -156
  20. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/launch_setup.rs +71 -206
  21. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/lib.rs +3 -0
  22. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/main.rs +50 -16
  23. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/main_helpers.rs +14 -0
  24. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/provider_catalog.rs +239 -14
  25. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/provider_registry.rs +24 -13
  26. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/runner.rs +18 -3
  27. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/runner_execution.rs +56 -5
  28. clud-2.8.4/crates/clud-bin/src/selector.rs +771 -0
  29. clud-2.8.4/crates/clud-bin/src/server_settings/README.md +38 -0
  30. clud-2.8.4/crates/clud-bin/src/server_settings/json.rs +179 -0
  31. clud-2.8.4/crates/clud-bin/src/server_settings/mod.rs +513 -0
  32. clud-2.8.4/crates/clud-bin/src/server_settings/sections.rs +171 -0
  33. clud-2.8.4/crates/clud-bin/src/server_settings/store.rs +428 -0
  34. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session.rs +139 -7
  35. clud-2.8.4/crates/clud-bin/src/session_output.rs +153 -0
  36. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/settings_tui.rs +137 -283
  37. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/soldr_activate.rs +3 -0
  38. clud-2.8.4/crates/clud-bin/src/toast/README.md +26 -0
  39. clud-2.8.4/crates/clud-bin/src/toast/compositor.rs +502 -0
  40. clud-2.8.4/crates/clud-bin/src/toast/compositor_tests.rs +405 -0
  41. clud-2.8.4/crates/clud-bin/src/toast/kitty.rs +163 -0
  42. clud-2.8.4/crates/clud-bin/src/toast/launch.rs +193 -0
  43. clud-2.8.4/crates/clud-bin/src/toast/mod.rs +277 -0
  44. clud-2.8.4/crates/clud-bin/src/toast/mod_tests.rs +145 -0
  45. clud-2.8.4/crates/clud-bin/src/toast/mouse.rs +224 -0
  46. clud-2.8.4/crates/clud-bin/src/toast/raster.rs +366 -0
  47. clud-2.8.4/crates/clud-bin/src/toast/statusline.rs +382 -0
  48. clud-2.8.4/crates/clud-bin/src/toast/statusline_tests.rs +288 -0
  49. clud-2.8.4/crates/clud-bin/src/toast/text_tier.rs +267 -0
  50. clud-2.8.4/crates/clud-bin/src/toast/tier.rs +243 -0
  51. clud-2.8.4/crates/clud-bin/src/toast/tracker.rs +372 -0
  52. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/README.md +2 -1
  53. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/cli/codex_bridge_preflight_cli.rs +2 -0
  54. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/cli/provider_selection_cli.rs +2 -0
  55. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/pty/main.rs +1 -0
  56. clud-2.8.4/crates/clud-bin/tests/pty/toast_pty.rs +234 -0
  57. {clud-2.8.2 → clud-2.8.4}/pyproject.toml +1 -1
  58. {clud-2.8.2 → clud-2.8.4}/src/clud/__init__.py +1 -1
  59. clud-2.8.2/crates/clud-bin/src/session_output.rs +0 -50
  60. {clud-2.8.2 → clud-2.8.4}/LICENSE +0 -0
  61. {clud-2.8.2 → clud-2.8.4}/README.md +0 -0
  62. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/LICENSE +0 -0
  63. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/README.md +0 -0
  64. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/dashboard/index.html +0 -0
  65. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/hero-clud.jpg +0 -0
  66. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/scripts/extract_zip.py +0 -0
  67. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/README.md +0 -0
  68. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-bosn/SKILL.md +0 -0
  69. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-docker-linux-build/README.md +0 -0
  70. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-docker-linux-build/SKILL.md +0 -0
  71. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-docker-mac-x86/SKILL.md +0 -0
  72. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-docker-recover/SKILL.md +0 -0
  73. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-docker-rust-app-dev/README.md +0 -0
  74. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-docker-rust-app-dev/SKILL.md +0 -0
  75. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-extern-repos/SKILL.md +0 -0
  76. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-fix-quick/SKILL.md +0 -0
  77. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-git/SKILL.md +0 -0
  78. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-git-diff/SKILL.md +0 -0
  79. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-improve/README.md +0 -0
  80. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-improve/SKILL.md +0 -0
  81. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-issue/README.md +0 -0
  82. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-issue/SKILL.md +0 -0
  83. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-issue-triage/README.md +0 -0
  84. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-issue-triage/SKILL.md +0 -0
  85. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-omarchy/SKILL.md +0 -0
  86. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-os-debug/SKILL.md +0 -0
  87. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-preloop/SKILL.md +0 -0
  88. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-python-lint-deadcode/SKILL.md +0 -0
  89. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-review/SKILL.md +0 -0
  90. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-tag-release/README.md +0 -0
  91. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-tag-release/SKILL.md +0 -0
  92. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-windows-trash/README.md +0 -0
  93. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/skills/clud-windows-trash/SKILL.md +0 -0
  94. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/docker/README.md +0 -0
  95. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/docker/docker-build.py +0 -0
  96. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/docker/docker_build_cpp.py +0 -0
  97. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/docker/docker_build_python.py +0 -0
  98. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/docker/docker_build_soldr.py +0 -0
  99. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/docker/docker_recover.py +0 -0
  100. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/git/clud-git-diff.py +0 -0
  101. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/github/pr_merge_watch.py +0 -0
  102. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/hooks/block-bad-cmd.py +0 -0
  103. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/hooks/telemetry.py +0 -0
  104. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/hooks/uv_run_hook_guard.py +0 -0
  105. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/assets/tools/python/lint_deadcode.py +0 -0
  106. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/build.rs +0 -0
  107. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/args_tests/commands.rs +0 -0
  108. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/args_tests.rs +0 -0
  109. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/auth.rs +0 -0
  110. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/backend.rs +0 -0
  111. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/backend_bootstrap.rs +0 -0
  112. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/bin/clud_bench_proc_sampler.rs +0 -0
  113. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/bin/clud_block_bad_cmd.rs +0 -0
  114. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/bin/clud_cmd_scan.rs +0 -0
  115. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/bin/clud_ctrlc_probe.rs +0 -0
  116. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/bin/clud_shim.rs +0 -0
  117. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd.rs +0 -0
  118. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_cd.rs +0 -0
  119. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_cd_tests.rs +0 -0
  120. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_cwd_changed.rs +0 -0
  121. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_cwd_changed_tests.rs +0 -0
  122. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_gate.rs +0 -0
  123. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_io.rs +0 -0
  124. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_rm_vars.rs +0 -0
  125. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_rollout.rs +0 -0
  126. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/block_bad_cmd_shell.rs +0 -0
  127. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/bridge_log.rs +0 -0
  128. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/build_id.rs +0 -0
  129. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/build_id_tests.rs +0 -0
  130. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/capture.rs +0 -0
  131. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hook_roots.rs +0 -0
  132. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hook_roots_tests.rs +0 -0
  133. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hooks.rs +0 -0
  134. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hooks_compile.rs +0 -0
  135. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hooks_compile_tests.rs +0 -0
  136. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hooks_run.rs +0 -0
  137. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hooks_run_tests.rs +0 -0
  138. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_hooks_tests.rs +0 -0
  139. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/clud_settings_document.rs +0 -0
  140. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_auth.rs +0 -0
  141. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_history.rs +0 -0
  142. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_hook_normalize.rs +0 -0
  143. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_hook_normalize_tests.rs +0 -0
  144. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_lf.rs +0 -0
  145. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_model.rs +0 -0
  146. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_pipeline.rs +0 -0
  147. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_sse.rs +0 -0
  148. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_sse_tests.rs +0 -0
  149. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_translate.rs +0 -0
  150. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_upstream.rs +0 -0
  151. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/codex_upstream_credentials.rs +0 -0
  152. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/README.md +0 -0
  153. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/do_input.rs +0 -0
  154. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/loop_task.rs +0 -0
  155. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/mod.rs +0 -0
  156. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/prompts.rs +0 -0
  157. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/tests/repeat_execution.rs +0 -0
  158. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/tests/repeat_parse.rs +0 -0
  159. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/tests/repeat_schedule.rs +0 -0
  160. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/tests.rs +0 -0
  161. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/command/types.rs +0 -0
  162. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/config.rs +0 -0
  163. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/console_input.rs +0 -0
  164. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/console_setup.rs +0 -0
  165. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/console_title.rs +0 -0
  166. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/console_title_osc.rs +0 -0
  167. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/crash_report.rs +0 -0
  168. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/ctrl_c_track.rs +0 -0
  169. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/ctrl_c_track_tests.rs +0 -0
  170. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/README.md +0 -0
  171. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/activity.rs +0 -0
  172. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/api_session_http.rs +0 -0
  173. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/api_session_lifecycle.rs +0 -0
  174. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/api_sessions.rs +0 -0
  175. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/api_turn_controller.rs +0 -0
  176. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/attach.rs +0 -0
  177. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/client.rs +0 -0
  178. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/client_compat.rs +0 -0
  179. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/client_leases.rs +0 -0
  180. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/client_tests.rs +0 -0
  181. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/commands.rs +0 -0
  182. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/cpu_alert_publish.rs +0 -0
  183. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/daemon_events.rs +0 -0
  184. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/entry.rs +0 -0
  185. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/entry_tests.rs +0 -0
  186. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/extern_repo.rs +0 -0
  187. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/filesystem.rs +0 -0
  188. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/list_state.rs +0 -0
  189. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/tests/delete_and_pool.rs +0 -0
  190. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/tests/parallel.rs +0 -0
  191. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/tests/policy.rs +0 -0
  192. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service/tests.rs +0 -0
  193. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service.rs +0 -0
  194. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service_disk_watchdog.rs +0 -0
  195. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/gc_service_purge.rs +0 -0
  196. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/handover_registry.rs +0 -0
  197. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/headless_adapter.rs +0 -0
  198. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/http/tests.rs +0 -0
  199. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/http.rs +0 -0
  200. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/http_dashboard_state.rs +0 -0
  201. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/http_info.rs +0 -0
  202. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/http_response.rs +0 -0
  203. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/io_helpers.rs +0 -0
  204. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/keys.rs +0 -0
  205. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/mod.rs +0 -0
  206. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/paths.rs +0 -0
  207. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/proc_sampler.rs +0 -0
  208. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/proc_sampler_tests.rs +0 -0
  209. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/process_utils.rs +0 -0
  210. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/endpoint.rs +0 -0
  211. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/errors.rs +0 -0
  212. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/frame_lane.rs +0 -0
  213. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/mod.rs +0 -0
  214. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/payload.rs +0 -0
  215. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/tests.rs +0 -0
  216. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/rp_broker/wire_mode.rs +0 -0
  217. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/runtime_config.rs +0 -0
  218. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/server.rs +0 -0
  219. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/session_state_sweep.rs +0 -0
  220. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/session_tmp_sweep.rs +0 -0
  221. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/sessions.rs +0 -0
  222. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/target_sweep.rs +0 -0
  223. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/top.rs +0 -0
  224. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/types.rs +0 -0
  225. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/uv_cache_sweep.rs +0 -0
  226. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/watch_service.rs +0 -0
  227. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/daemon_msgs.rs +0 -0
  228. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/error.rs +0 -0
  229. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/frame.rs +0 -0
  230. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/mod.rs +0 -0
  231. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/session.rs +0 -0
  232. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/tests.rs +0 -0
  233. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/wire_prost/worker_msgs.rs +0 -0
  234. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/worker.rs +0 -0
  235. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/worker_shared.rs +0 -0
  236. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/daemon/worker_tests.rs +0 -0
  237. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dashboard_auth.rs +0 -0
  238. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dnd/README.md +0 -0
  239. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dnd/console_drop_target.rs +0 -0
  240. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dnd/console_drop_target_tests.rs +0 -0
  241. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dnd/dropfiles.rs +0 -0
  242. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dnd/injectors.rs +0 -0
  243. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/dnd/mod.rs +0 -0
  244. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/extern_cli.rs +0 -0
  245. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/extern_root.rs +0 -0
  246. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/extern_root_tests.rs +0 -0
  247. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/cli.rs +0 -0
  248. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/delete_audit.rs +0 -0
  249. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/mod.rs +0 -0
  250. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/reconcile.rs +0 -0
  251. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/registry.rs +0 -0
  252. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/scanner.rs +0 -0
  253. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/session_state.rs +0 -0
  254. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/session_state_tests.rs +0 -0
  255. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/session_tmp.rs +0 -0
  256. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/target_sweep.rs +0 -0
  257. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc/uv_cache.rs +0 -0
  258. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/gc_tests.rs +0 -0
  259. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/graphics.rs +0 -0
  260. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/grind.rs +0 -0
  261. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/codex_trust.rs +0 -0
  262. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/inspect.rs +0 -0
  263. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/mod.rs +0 -0
  264. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/prompts.rs +0 -0
  265. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/repairs.rs +0 -0
  266. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/types.rs +0 -0
  267. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/utils.rs +0 -0
  268. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health/warnings.rs +0 -0
  269. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_health_tests.rs +0 -0
  270. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_trust.rs +0 -0
  271. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/hook_trust_tests.rs +0 -0
  272. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/job_orphan_reaper.rs +0 -0
  273. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/large_file_guard/fallback_tests.rs +0 -0
  274. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/large_file_guard/index_pass.rs +0 -0
  275. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/large_file_guard/ls_files_pass.rs +0 -0
  276. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/large_file_guard.rs +0 -0
  277. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/launch_log.rs +0 -0
  278. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/log_event.rs +0 -0
  279. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/loop_artifacts.rs +0 -0
  280. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/loop_check.rs +0 -0
  281. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/loop_spec.rs +0 -0
  282. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/optimize.rs +0 -0
  283. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/orphan_reaper.rs +0 -0
  284. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/orphan_reaper_tests.rs +0 -0
  285. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/paste_image.rs +0 -0
  286. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/path_norm.rs +0 -0
  287. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/preference.rs +0 -0
  288. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/process_identity.rs +0 -0
  289. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/process_scan.rs +0 -0
  290. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/process_tree.rs +0 -0
  291. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/provider_auth.rs +0 -0
  292. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/reap_log.rs +0 -0
  293. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/reaper_facts.rs +0 -0
  294. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/repo_clud_config.rs +0 -0
  295. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/repo_clud_config_tests.rs +0 -0
  296. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/route_health.rs +0 -0
  297. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/runner_exit.rs +0 -0
  298. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/runner_terminal.rs +0 -0
  299. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/runtime_cache.rs +0 -0
  300. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session/bracketed_paste.rs +0 -0
  301. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session/interrupt.rs +0 -0
  302. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session_index.rs +0 -0
  303. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session_registry.rs +0 -0
  304. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session_registry_tests.rs +0 -0
  305. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session_stdin.rs +0 -0
  306. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/session_tests.rs +0 -0
  307. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shell/README.md +0 -0
  308. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shell/completion_guard.rs +0 -0
  309. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shell/git_bash_resolver.rs +0 -0
  310. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shell/mod.rs +0 -0
  311. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shell/nounset.rs +0 -0
  312. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shell/nounset_tests.rs +0 -0
  313. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shim_install.rs +0 -0
  314. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shim_resolve.rs +0 -0
  315. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shim_session.rs +0 -0
  316. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/shim_uv.rs +0 -0
  317. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/skills.rs +0 -0
  318. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/skills_home.rs +0 -0
  319. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/skills_tests.rs +0 -0
  320. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/stage_trace.rs +0 -0
  321. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/startup.rs +0 -0
  322. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/stream_json.rs +0 -0
  323. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/subprocess.rs +0 -0
  324. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/symbols.rs +0 -0
  325. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/test_env.rs +0 -0
  326. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/test_runtime/README.md +0 -0
  327. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/test_runtime/cli.rs +0 -0
  328. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/test_runtime/mod.rs +0 -0
  329. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/test_runtime/store.rs +0 -0
  330. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_cli.rs +0 -0
  331. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_info.rs +0 -0
  332. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_install.rs +0 -0
  333. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_ledger.rs +0 -0
  334. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_list.rs +0 -0
  335. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_log.rs +0 -0
  336. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_query.rs +0 -0
  337. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_run.rs +0 -0
  338. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_run_telemetry.rs +0 -0
  339. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_run_tests.rs +0 -0
  340. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_tee.rs +0 -0
  341. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_termination.rs +0 -0
  342. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tool_watchdog.rs +0 -0
  343. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/tools.rs +0 -0
  344. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/trampoline.rs +0 -0
  345. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/trash.rs +0 -0
  346. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/ui.rs +0 -0
  347. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/uv_run_hook_guard.rs +0 -0
  348. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/verbose_log.rs +0 -0
  349. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/README.md +0 -0
  350. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/audio.rs +0 -0
  351. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/config.rs +0 -0
  352. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/cues.rs +0 -0
  353. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/linux_capture.rs +0 -0
  354. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/mod.rs +0 -0
  355. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/mode.rs +0 -0
  356. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/model.rs +0 -0
  357. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/recording.rs +0 -0
  358. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/voice/worker.rs +0 -0
  359. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/wasm.rs +0 -0
  360. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/webterm.rs +0 -0
  361. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/wedge_watchdog.rs +0 -0
  362. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/wedge_watchdog_gate_tests.rs +0 -0
  363. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/wedge_watchdog_tests.rs +0 -0
  364. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/win_creation_flags.rs +0 -0
  365. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/workspace_trust.rs +0 -0
  366. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/workspace_trust_tests.rs +0 -0
  367. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/worktrees.rs +0 -0
  368. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/worktrees_duration.rs +0 -0
  369. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/worktrees_format.rs +0 -0
  370. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/worktrees_locked_age.rs +0 -0
  371. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/src/worktrees_tests.rs +0 -0
  372. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/api/api_session_lifecycle.rs +0 -0
  373. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/api/api_turn_controller.rs +0 -0
  374. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/api/main.rs +0 -0
  375. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/cli/main.rs +0 -0
  376. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/cli/shell_completion_guard.rs +0 -0
  377. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/common/exe.rs +0 -0
  378. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/common/mod.rs +0 -0
  379. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/crash_report.rs +0 -0
  380. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/main.rs +0 -0
  381. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/runtime_cache_hop_windows.rs +0 -0
  382. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/symbols.rs +0 -0
  383. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/telemetry_endpoint.rs +0 -0
  384. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/tier_refresh_probe.rs +0 -0
  385. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/diagnostics/win32_hooking_probe.rs +0 -0
  386. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/pty/pty_behavior.rs +0 -0
  387. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/pty/pty_pump.rs +0 -0
  388. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/pty/shift_enter_dual_reader.rs +0 -0
  389. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/pty/utf8_codepage.rs +0 -0
  390. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/daemon_spawn_hygiene.rs +0 -0
  391. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/fixture_ids.rs +0 -0
  392. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/main.rs +0 -0
  393. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/orphan_reap.rs +0 -0
  394. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/reaper_batch_drain_windows.rs +0 -0
  395. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/reaper_daemon_survival_windows.rs +0 -0
  396. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/reaper_orphan_sweep_survival.rs +0 -0
  397. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/subprocess_capture_lifecycle_windows.rs +0 -0
  398. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/tool_shell_lifecycle_windows.rs +0 -0
  399. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/reaper/wedge_watchdog_e2e.rs +0 -0
  400. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/signals/ctrlc_signal_kinds.rs +0 -0
  401. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/signals/ctrlc_windows_events.rs +0 -0
  402. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/tests/signals/main.rs +0 -0
  403. {clud-2.8.2 → clud-2.8.4}/crates/clud-bin/vendor/win32/git-bash-bin.toml +0 -0
  404. {clud-2.8.2 → clud-2.8.4}/src/clud/mcp_server.py +0 -0
@@ -574,7 +574,7 @@ dependencies = [
574
574
 
575
575
  [[package]]
576
576
  name = "clud"
577
- version = "2.8.2"
577
+ version = "2.8.4"
578
578
  dependencies = [
579
579
  "arboard",
580
580
  "base64",
@@ -585,6 +585,7 @@ dependencies = [
585
585
  "ctrlc",
586
586
  "dirs 5.0.1",
587
587
  "filetime",
588
+ "fontdue",
588
589
  "fs4",
589
590
  "getrandom 0.4.2",
590
591
  "gix-hash",
@@ -695,6 +696,15 @@ version = "0.8.7"
695
696
  source = "registry+https://github.com/rust-lang/crates.io-index"
696
697
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
697
698
 
699
+ [[package]]
700
+ name = "core_maths"
701
+ version = "0.1.1"
702
+ source = "registry+https://github.com/rust-lang/crates.io-index"
703
+ checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30"
704
+ dependencies = [
705
+ "libm",
706
+ ]
707
+
698
708
  [[package]]
699
709
  name = "coreaudio-rs"
700
710
  version = "0.13.0"
@@ -867,7 +877,7 @@ dependencies = [
867
877
 
868
878
  [[package]]
869
879
  name = "daemon-stub"
870
- version = "2.8.2"
880
+ version = "2.8.4"
871
881
  dependencies = [
872
882
  "libc",
873
883
  "running-process",
@@ -1249,6 +1259,15 @@ version = "0.2.0"
1249
1259
  source = "registry+https://github.com/rust-lang/crates.io-index"
1250
1260
  checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1251
1261
 
1262
+ [[package]]
1263
+ name = "fontdue"
1264
+ version = "0.9.4"
1265
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1266
+ checksum = "7894823fa221401399e2598f8b63f81ac77ff5c63248b7656779bff1632d7d3d"
1267
+ dependencies = [
1268
+ "ttf-parser",
1269
+ ]
1270
+
1252
1271
  [[package]]
1253
1272
  name = "form_urlencoded"
1254
1273
  version = "1.2.2"
@@ -2336,7 +2355,7 @@ dependencies = [
2336
2355
 
2337
2356
  [[package]]
2338
2357
  name = "mock-agent"
2339
- version = "2.8.2"
2358
+ version = "2.8.4"
2340
2359
  dependencies = [
2341
2360
  "libc",
2342
2361
  "serde_json",
@@ -2954,11 +2973,11 @@ dependencies = [
2954
2973
 
2955
2974
  [[package]]
2956
2975
  name = "probe-dll"
2957
- version = "2.8.2"
2976
+ version = "2.8.4"
2958
2977
 
2959
2978
  [[package]]
2960
2979
  name = "probe-target"
2961
- version = "2.8.2"
2980
+ version = "2.8.4"
2962
2981
 
2963
2982
  [[package]]
2964
2983
  name = "proc-macro-crate"
@@ -3808,7 +3827,7 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
3808
3827
 
3809
3828
  [[package]]
3810
3829
  name = "tap-gate"
3811
- version = "2.8.2"
3830
+ version = "2.8.4"
3812
3831
  dependencies = [
3813
3832
  "running-process",
3814
3833
  "tempfile",
@@ -4037,6 +4056,15 @@ dependencies = [
4037
4056
  "once_cell",
4038
4057
  ]
4039
4058
 
4059
+ [[package]]
4060
+ name = "ttf-parser"
4061
+ version = "0.25.1"
4062
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4063
+ checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
4064
+ dependencies = [
4065
+ "core_maths",
4066
+ ]
4067
+
4040
4068
  [[package]]
4041
4069
  name = "typenum"
4042
4070
  version = "1.20.0"
@@ -13,7 +13,7 @@ exclude = [
13
13
  libraries = [{ path = "dylints/*" }]
14
14
 
15
15
  [workspace.package]
16
- version = "2.8.2"
16
+ version = "2.8.4"
17
17
  edition = "2021"
18
18
  rust-version = "1.85"
19
19
  license-file = "LICENSE"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clud
3
- Version: 2.8.2
3
+ Version: 2.8.4
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -76,6 +76,10 @@ running-process = { version = "4.9.0", default-features = false, features = ["te
76
76
  # types are identical across the API boundary.
77
77
  interprocess = "2"
78
78
  icy_sixel = "0.5"
79
+ # #1189: rasterizes toast text into the kitty-graphics toast image. Pure Rust,
80
+ # no system font library, so manylinux wheels stay self-contained; the font
81
+ # itself is bundled from assets/fonts/.
82
+ fontdue = { version = "0.9", default-features = false }
79
83
  image = { version = "0.25", default-features = false, features = ["jpeg", "png"] }
80
84
  zeroize = "1"
81
85
  prost = "0.14"
@@ -5,6 +5,8 @@ Compile-time-embedded resources bundled directly into the `clud-bin` binary. Fil
5
5
  ## Layout
6
6
 
7
7
  - [`skills/`](skills/README.md) - slash-command skill definitions (`SKILL.md` files) installed per-backend into `.claude/skills/` or `.codex/skills/` on first run.
8
+ - `fonts/` - `DejaVuSansMono.ttf` for rasterizing toast text into the kitty-graphics toast image (#1189, `src/toast/raster.rs`, embedded with `include_bytes!`). Bundled so the wheel needs no system font library; its license is `fonts/DejaVu-LICENSE.txt`.
9
+ - `server-settings.json` - server-side settings (#1192, `src/server_settings/`). The binary embeds this file as its built-in copy, and installed builds also fetch it live from `main`, so an edit here reaches users when it merges, not when a release ships. Guard tests require strict JSON and a valid value for every registered section. See [`docs/architecture/server-settings.md`](../../../docs/architecture/server-settings.md) and [DD-072](../../../docs/DESIGN_DECISIONS.md#dd-072-server-side-settings-are-one-baked-in-json-document-with-per-section-last-known-good).
8
10
 
9
11
  ## Embedding mechanism
10
12
 
@@ -0,0 +1,187 @@
1
+ Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
2
+ Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
3
+
4
+
5
+ Bitstream Vera Fonts Copyright
6
+ ------------------------------
7
+
8
+ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
9
+ a trademark of Bitstream, Inc.
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of the fonts accompanying this license ("Fonts") and associated
13
+ documentation files (the "Font Software"), to reproduce and distribute the
14
+ Font Software, including without limitation the rights to use, copy, merge,
15
+ publish, distribute, and/or sell copies of the Font Software, and to permit
16
+ persons to whom the Font Software is furnished to do so, subject to the
17
+ following conditions:
18
+
19
+ The above copyright and trademark notices and this permission notice shall
20
+ be included in all copies of one or more of the Font Software typefaces.
21
+
22
+ The Font Software may be modified, altered, or added to, and in particular
23
+ the designs of glyphs or characters in the Fonts may be modified and
24
+ additional glyphs or characters may be added to the Fonts, only if the fonts
25
+ are renamed to names not containing either the words "Bitstream" or the word
26
+ "Vera".
27
+
28
+ This License becomes null and void to the extent applicable to Fonts or Font
29
+ Software that has been modified and is distributed under the "Bitstream
30
+ Vera" names.
31
+
32
+ The Font Software may be sold as part of a larger software package but no
33
+ copy of one or more of the Font Software typefaces may be sold by itself.
34
+
35
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
36
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
37
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
38
+ TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
39
+ FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
40
+ ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
41
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
42
+ THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
43
+ FONT SOFTWARE.
44
+
45
+ Except as contained in this notice, the names of Gnome, the Gnome
46
+ Foundation, and Bitstream Inc., shall not be used in advertising or
47
+ otherwise to promote the sale, use or other dealings in this Font Software
48
+ without prior written authorization from the Gnome Foundation or Bitstream
49
+ Inc., respectively. For further information, contact: fonts at gnome dot
50
+ org.
51
+
52
+ Arev Fonts Copyright
53
+ ------------------------------
54
+
55
+ Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
56
+
57
+ Permission is hereby granted, free of charge, to any person obtaining
58
+ a copy of the fonts accompanying this license ("Fonts") and
59
+ associated documentation files (the "Font Software"), to reproduce
60
+ and distribute the modifications to the Bitstream Vera Font Software,
61
+ including without limitation the rights to use, copy, merge, publish,
62
+ distribute, and/or sell copies of the Font Software, and to permit
63
+ persons to whom the Font Software is furnished to do so, subject to
64
+ the following conditions:
65
+
66
+ The above copyright and trademark notices and this permission notice
67
+ shall be included in all copies of one or more of the Font Software
68
+ typefaces.
69
+
70
+ The Font Software may be modified, altered, or added to, and in
71
+ particular the designs of glyphs or characters in the Fonts may be
72
+ modified and additional glyphs or characters may be added to the
73
+ Fonts, only if the fonts are renamed to names not containing either
74
+ the words "Tavmjong Bah" or the word "Arev".
75
+
76
+ This License becomes null and void to the extent applicable to Fonts
77
+ or Font Software that has been modified and is distributed under the
78
+ "Tavmjong Bah Arev" names.
79
+
80
+ The Font Software may be sold as part of a larger software package but
81
+ no copy of one or more of the Font Software typefaces may be sold by
82
+ itself.
83
+
84
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
85
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
86
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
87
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
88
+ TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
89
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
90
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
91
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
92
+ OTHER DEALINGS IN THE FONT SOFTWARE.
93
+
94
+ Except as contained in this notice, the name of Tavmjong Bah shall not
95
+ be used in advertising or otherwise to promote the sale, use or other
96
+ dealings in this Font Software without prior written authorization
97
+ from Tavmjong Bah. For further information, contact: tavmjong @ free
98
+ . fr.
99
+
100
+ TeX Gyre DJV Math
101
+ -----------------
102
+ Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
103
+
104
+ Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
105
+ (on behalf of TeX users groups) are in public domain.
106
+
107
+ Letters imported from Euler Fraktur from AMSfonts are (c) American
108
+ Mathematical Society (see below).
109
+ Bitstream Vera Fonts Copyright
110
+ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
111
+ is a trademark of Bitstream, Inc.
112
+
113
+ Permission is hereby granted, free of charge, to any person obtaining a copy
114
+ of the fonts accompanying this license (“Fonts”) and associated
115
+ documentation
116
+ files (the “Font Software”), to reproduce and distribute the Font Software,
117
+ including without limitation the rights to use, copy, merge, publish,
118
+ distribute,
119
+ and/or sell copies of the Font Software, and to permit persons to whom
120
+ the Font Software is furnished to do so, subject to the following
121
+ conditions:
122
+
123
+ The above copyright and trademark notices and this permission notice
124
+ shall be
125
+ included in all copies of one or more of the Font Software typefaces.
126
+
127
+ The Font Software may be modified, altered, or added to, and in particular
128
+ the designs of glyphs or characters in the Fonts may be modified and
129
+ additional
130
+ glyphs or characters may be added to the Fonts, only if the fonts are
131
+ renamed
132
+ to names not containing either the words “Bitstream” or the word “Vera”.
133
+
134
+ This License becomes null and void to the extent applicable to Fonts or
135
+ Font Software
136
+ that has been modified and is distributed under the “Bitstream Vera”
137
+ names.
138
+
139
+ The Font Software may be sold as part of a larger software package but
140
+ no copy
141
+ of one or more of the Font Software typefaces may be sold by itself.
142
+
143
+ THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
144
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
145
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
146
+ TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
147
+ FOUNDATION
148
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
149
+ SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
150
+ ACTION
151
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
152
+ INABILITY TO USE
153
+ THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
154
+ Except as contained in this notice, the names of GNOME, the GNOME
155
+ Foundation,
156
+ and Bitstream Inc., shall not be used in advertising or otherwise to promote
157
+ the sale, use or other dealings in this Font Software without prior written
158
+ authorization from the GNOME Foundation or Bitstream Inc., respectively.
159
+ For further information, contact: fonts at gnome dot org.
160
+
161
+ AMSFonts (v. 2.2) copyright
162
+
163
+ The PostScript Type 1 implementation of the AMSFonts produced by and
164
+ previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
165
+ available for general use. This has been accomplished through the
166
+ cooperation
167
+ of a consortium of scientific publishers with Blue Sky Research and Y&Y.
168
+ Members of this consortium include:
169
+
170
+ Elsevier Science IBM Corporation Society for Industrial and Applied
171
+ Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
172
+
173
+ In order to assure the authenticity of these fonts, copyright will be
174
+ held by
175
+ the American Mathematical Society. This is not meant to restrict in any way
176
+ the legitimate use of the fonts, such as (but not limited to) electronic
177
+ distribution of documents containing these fonts, inclusion of these fonts
178
+ into other public domain or commercial font collections or computer
179
+ applications, use of the outline data to create derivative fonts and/or
180
+ faces, etc. However, the AMS does require that the AMS copyright notice be
181
+ removed from any derivative versions of the fonts which have been altered in
182
+ any way. In addition, to ensure the fidelity of TeX documents using Computer
183
+ Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
184
+ has requested that any alterations which yield different font metrics be
185
+ given a different name.
186
+
187
+ $Id$
@@ -0,0 +1,9 @@
1
+ {
2
+ "schema_version": 1,
3
+ "sections": {
4
+ "deepseek": {
5
+ "default_model": "deepseek-flash",
6
+ "subagent_model": "deepseek-flash[1m]"
7
+ }
8
+ }
9
+ }
@@ -30,6 +30,14 @@ the integration tests.
30
30
  - [dnd/](dnd/README.md) - drag-and-drop into the terminal: cross-platform
31
31
  path-string normalizer plus Windows-only `IDropTarget` adapter with
32
32
  per-launch-mode injectors.
33
+ - [server_settings/](server_settings/README.md) - server-side settings (#1192):
34
+ the `assets/server-settings.json` baked into the binary and refreshed from
35
+ `main`, falling back section by section to the last valid value, plus a strict
36
+ JSON parser. See `docs/architecture/server-settings.md`.
37
+ - [toast/](toast/README.md) - in-terminal toasts (#1189): toast model and
38
+ hub, the PTY writer-thread compositor (kitty graphics, alternate-screen text
39
+ cells, title/status-line fallback), Claude `statusLine` chaining, and
40
+ click-to-dismiss. See `docs/architecture/toasts.md`.
33
41
  - [voice/](voice/README.md) - F3 push-to-talk voice mode: mic capture,
34
42
  start/stop cues, `whisper-rs` worker thread, transcript injection into the
35
43
  backend PTY.
@@ -185,6 +193,11 @@ CLI surface and backend resolution:
185
193
  - `provider_catalog.rs` - the single registry mapping stable clud model IDs,
186
194
  gateway discovery IDs, provider wire IDs, compatibility aliases, and
187
195
  independent effort/context capability metadata.
196
+ - `selector.rs` - the one inline terminal selector (#1195, DD-073). It owns
197
+ raw mode, cursor hide/show, pending-input draining, key decoding, CRLF-only
198
+ rendering with wrap-aware row counts, and redraw/erase. The launch-scope
199
+ prompt, the harness picker, and `clud settings` each implement its
200
+ `Selector` trait and render through it.
188
201
  - `preference.rs` - shared pure typed-choice state machine used by launch
189
202
  scope and global settings selectors.
190
203
  - `subprocess.rs` - single decision point for the Windows `.cmd`/`.bat`
@@ -217,7 +230,10 @@ Console and terminal:
217
230
  PTY master. Since issue #538 the pump splits output onto a dedicated
218
231
  reader thread + stdout-writer thread (`run_output_writer`) so a slow
219
232
  terminal flush never delays stdin forwarding — see
220
- `docs/architecture/session-lifecycle.md` and DD-018.
233
+ `docs/architecture/session-lifecycle.md` and DD-018. Since #1189 the writer
234
+ thread optionally runs the toast compositor
235
+ (`session_output.rs::run_output_writer_composited`) and the stdin path runs
236
+ the toast close-button mouse filter; see `docs/architecture/toasts.md`.
221
237
 
222
238
  Loop subsystem (`clud loop`):
223
239
 
@@ -531,8 +547,9 @@ Diagnostics and misc:
531
547
 
532
548
  - `cpu_banner.rs` - issue #466: foreground CPU-burn banner. Spawns one
533
549
  background `sysinfo` sampler that ticks every 2 s, sums `cpu_usage()` +
534
- `memory()` over the parent-PID subtree rooted at our originator, and emits
535
- `[clud] cpu N % · X.Y / Z cores · …` to stderr when subtree CPU crosses
550
+ `memory()` over the parent-PID subtree rooted at our originator, and
551
+ publishes a `cpu N % · X.Y / Z cores · …` toast (#1189: never stderr, which
552
+ corrupted the harness TUI; see [toast/](toast/README.md)) when subtree CPU crosses
536
553
  `max(50 %, 0.20 × num_cpus × 100 %)` for 3 sustained ticks. Hysteretic
537
554
  drop-out at 0.7×; 30 s heartbeat while sustained; clear-banner only after
538
555
  ≥ 60 s episodes. Wired into `runner::run_plan_subprocess` and
@@ -667,6 +667,18 @@ pub enum Command {
667
667
  #[arg(long = "list")]
668
668
  list: bool,
669
669
  },
670
+ /// Internal (#1189): print clud's toast inside Claude Code's status line.
671
+ /// Claude Code runs this as the injected `statusLine` command.
672
+ #[command(name = "statusline", hide = true)]
673
+ Statusline {
674
+ #[arg(long = "session-pid")]
675
+ session_pid: u32,
676
+ #[arg(long = "state-dir")]
677
+ state_dir: PathBuf,
678
+ /// The user's own status-line command, base64url, run first.
679
+ #[arg(long = "chain-b64")]
680
+ chain_b64: Option<String>,
681
+ },
670
682
  #[command(name = "__daemon", hide = true)]
671
683
  InternalDaemon {
672
684
  #[arg(long = "state-dir")]
@@ -1138,6 +1150,7 @@ const TOP_LEVEL_SUBCOMMANDS: &[&str] = &[
1138
1150
  "codex-auth",
1139
1151
  "deepseek-auth",
1140
1152
  "run",
1153
+ "statusline",
1141
1154
  "__daemon",
1142
1155
  "__worker",
1143
1156
  ];
@@ -1223,6 +1236,9 @@ fn split_known_unknown(raw: &[String]) -> (Vec<String>, Vec<String>) {
1223
1236
  // Issue #469: `clud log --cmd "..."` arg.
1224
1237
  "--cmd",
1225
1238
  "--set-web-term",
1239
+ // #1189: hidden `clud statusline` arguments.
1240
+ "--session-pid",
1241
+ "--chain-b64",
1226
1242
  ];
1227
1243
  let short_value_flags: &[&str] = &["-p", "-m", "-r"];
1228
1244
  let bool_flags: &[&str] = &[
@@ -413,19 +413,23 @@ fn provider_profile_from_document(
413
413
 
414
414
  let model = read_string("model")?
415
415
  .map(|value| {
416
- let entry = provider_catalog::model_by_cli_id(value).ok_or_else(|| {
417
- invalid_provider_profile(
418
- provider,
419
- format!("model '{value}' is not a canonical catalog ID"),
420
- )
421
- })?;
416
+ // A canonical ID retired by a provider rename (#1192) still loads,
417
+ // normalized to its successor; wire IDs and shorthand stay rejected.
418
+ let entry = provider_catalog::model_by_cli_id(value)
419
+ .or_else(|| provider_catalog::model_by_retired_cli_id(value))
420
+ .ok_or_else(|| {
421
+ invalid_provider_profile(
422
+ provider,
423
+ format!("model '{value}' is not a canonical catalog ID"),
424
+ )
425
+ })?;
422
426
  if entry.provider != provider {
423
427
  return Err(invalid_provider_profile(
424
428
  provider,
425
429
  format!("model '{value}' belongs to provider '{}'", entry.provider),
426
430
  ));
427
431
  }
428
- Ok(value.to_string())
432
+ Ok(entry.cli_id.to_string())
429
433
  })
430
434
  .transpose()?;
431
435
  let harness = read_string("harness")?
@@ -957,6 +961,56 @@ pub fn load_cpu_banner_settings_at(home: &Path) -> Result<CpuBannerSettings, Set
957
961
  Ok(out)
958
962
  }
959
963
 
964
+ /// `[foreground.toasts]` (#1189): in-terminal toasts and the Claude
965
+ /// status-line surface.
966
+ ///
967
+ /// ```json
968
+ /// { "foreground": { "toasts": { "enabled": true, "claude_statusline": true } } }
969
+ /// ```
970
+ ///
971
+ /// `enabled = false` restores silent sessions (no compositor, no status-line
972
+ /// injection). `claude_statusline = false` keeps in-terminal toasts but stops
973
+ /// clud from composing a `statusLine` into Claude launches.
974
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
975
+ pub struct ToastSettings {
976
+ pub enabled: bool,
977
+ pub claude_statusline: bool,
978
+ }
979
+
980
+ impl Default for ToastSettings {
981
+ fn default() -> Self {
982
+ Self {
983
+ enabled: true,
984
+ claude_statusline: true,
985
+ }
986
+ }
987
+ }
988
+
989
+ pub fn load_toast_settings() -> Result<ToastSettings, SettingsError> {
990
+ let home = home_dir().ok_or(SettingsError::NoHomeDir)?;
991
+ load_toast_settings_at(&home)
992
+ }
993
+
994
+ pub fn load_toast_settings_at(home: &Path) -> Result<ToastSettings, SettingsError> {
995
+ let lock_path = home.join(CLUD_DIR_NAME).join(LOCK_FILE_NAME);
996
+ let _lock = acquire_lock(&lock_path)?;
997
+ let document = read_settings_or_legacy(home)?;
998
+ let mut out = ToastSettings::default();
999
+ let Some(section) = document
1000
+ .get("foreground")
1001
+ .and_then(|item| item.get("toasts"))
1002
+ else {
1003
+ return Ok(out);
1004
+ };
1005
+ if let Some(enabled) = section.get("enabled").and_then(Value::as_bool) {
1006
+ out.enabled = enabled;
1007
+ }
1008
+ if let Some(statusline) = section.get("claude_statusline").and_then(Value::as_bool) {
1009
+ out.claude_statusline = statusline;
1010
+ }
1011
+ Ok(out)
1012
+ }
1013
+
960
1014
  fn with_settings_document<F>(home: &Path, mutate: F) -> Result<(), SettingsError>
961
1015
  where
962
1016
  F: FnOnce(&mut Value),
@@ -834,6 +834,32 @@ fn cpu_banner_reads_heartbeat_override() {
834
834
  assert_eq!(got.heartbeat_secs, 120);
835
835
  }
836
836
 
837
+ #[test]
838
+ fn toast_settings_default_to_enabled_with_the_claude_status_line() {
839
+ let home = tempdir().unwrap();
840
+ let got = load_toast_settings_at(home.path()).unwrap();
841
+ assert_eq!(got, ToastSettings::default());
842
+ assert!(got.enabled && got.claude_statusline);
843
+ }
844
+
845
+ #[test]
846
+ fn toast_settings_read_both_switches_independently() {
847
+ let home = tempdir().unwrap();
848
+ let path = settings_path_at(home.path());
849
+ fs::create_dir_all(path.parent().unwrap()).unwrap();
850
+ fs::write(
851
+ &path,
852
+ r#"{"foreground":{"toasts":{"claude_statusline":false}}}"#,
853
+ )
854
+ .unwrap();
855
+ let got = load_toast_settings_at(home.path()).unwrap();
856
+ assert!(got.enabled, "default enabled preserved");
857
+ assert!(!got.claude_statusline);
858
+ fs::write(&path, r#"{"foreground":{"toasts":{"enabled":false}}}"#).unwrap();
859
+ let got = load_toast_settings_at(home.path()).unwrap();
860
+ assert!(!got.enabled);
861
+ }
862
+
837
863
  #[test]
838
864
  fn provider_profile_round_trips_through_save_and_load() {
839
865
  let home = tempdir().unwrap();
@@ -962,6 +988,24 @@ fn provider_profile_rejects_non_canonical_model() {
962
988
  ));
963
989
  }
964
990
 
991
+ /// #1192: a profile saved before DeepSeek renamed `deepseek-v4-flash` keeps
992
+ /// loading, normalized to the successor's canonical ID.
993
+ #[test]
994
+ fn provider_profile_normalizes_a_retired_canonical_model_id() {
995
+ let home = tempdir().unwrap();
996
+ write_provider_settings(
997
+ home.path(),
998
+ r#"{"providers":{"deepseek":{"model":"deepseek-v4-flash"}}}"#,
999
+ );
1000
+ let snapshot = load_launch_preferences_read_only_at(home.path()).unwrap();
1001
+ assert_eq!(
1002
+ snapshot
1003
+ .profile(ModelProvider::DeepSeek)
1004
+ .and_then(|p| p.model.as_deref()),
1005
+ Some("deepseek-flash")
1006
+ );
1007
+ }
1008
+
965
1009
  #[test]
966
1010
  fn provider_profile_rejects_cross_provider_model() {
967
1011
  let home = tempdir().unwrap();