Commit edaa1bd
feat(cli): aoe session restart --all (#910)
* feat(cli): add --all flag scaffold to restart subcommand
Introduces RestartArgs with optional identifier, --all switch
(mutually exclusive with identifier), and --parallel concurrency
cap (default 3). Orchestrator is stubbed; only arg parsing is
wired up. Per njbrake's spec in #855.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat(cli): sequential restart-all orchestrator
Implements `aoe session restart --all`:
- pick_targets_for_restart_all() skips Deleting/Creating sessions
(mid-transition; restarting them races their existing state machine).
- Orchestrator loads sessions, mutates Vec<Instance> in memory,
saves once at end. No per-instance persistence inside the loop —
this matters when we add concurrency next.
- Per-instance failures collected and surfaced; exit code reflects
failure count.
Concurrency cap (`--parallel`) accepted but currently unused; sequential
loop is a known-good baseline before adding the semaphore-bounded
parallel path.
Tests cover the filter (Deleting/Creating excluded, all other states
included) and arg parsing (already in place).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat(cli): bound restart-all concurrency with semaphore + JoinSet
Replaces the sequential loop with a parallel pool gated by
tokio::sync::Semaphore (default 3, configurable via --parallel).
Each target is cloned into its worker; the worker calls
restart_with_size on a blocking thread (since restart_with_size
spawns processes and sleeps), and the mutated copy is written
back to instances[idx] when the worker returns.
The shared Vec<Instance> is never touched by workers, only by
the dispatcher loop, and sessions.json is still saved exactly
once after every worker has joined. This is what njbrake's #855
spec called out: don't persist per-instance inside a parallel
pool, or reads-and-writes will race.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* docs(cli): regenerate reference for restart --all
Auto-generated by `cargo xtask gen-docs` after adding --all and
--parallel flags to `aoe session restart`. CI enforces this is
in sync with clap help.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(cli): rehydrate source_profile before session restart
Instance::source_profile is #[serde(skip_serializing)], so storage-loaded
instances always come back with it blank. Every other load site
(start_session in this file, the TUI dashboard, the web server) repopulates
it from the active profile right after Storage::load_with_groups so that
start_with_size_opts can resolve sandbox.environment and on_launch hooks
from the correct profile. The single-session restart path was missed when
PR #812 fixed the analogous web bug, and the new restart_all_sessions
inherited that miss.
Without this, `aoe -p foo session restart [<id>|--all]` against a profile
that is not the user's globally configured default falls back to the
default profile's sandbox env vars and on-launch hooks (cf.
build_docker_env_args -> resolved_sandbox_config -> effective_profile,
plus Instance::effective_profile in start_with_size_opts). The
test_build_docker_env_args_uses_passed_profile_not_global_default
regression test in src/session/environment.rs documents the same class
of bug from the web flow ("personal profile's GH_TOKEN was ignored when
launching from the web app").
Fixes the latent miss in restart_session and the new bug in
restart_all_sessions in one place.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: njbrake <nathan@mozilla.ai>
Co-authored-by: Nathan Brake (Mozilla.ai) <33383515+njbrake@users.noreply.github.com>1 parent f4a1aa5 commit edaa1bd
2 files changed
Lines changed: 261 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
| 212 | + | |
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | | - | |
| 250 | + | |
251 | 251 | | |
252 | 252 | | |
253 | 253 | | |
254 | | - | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
255 | 262 | | |
256 | 263 | | |
257 | 264 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
18 | | - | |
| 17 | + | |
| 18 | + | |
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
45 | 64 | | |
46 | 65 | | |
47 | 66 | | |
| |||
131 | 150 | | |
132 | 151 | | |
133 | 152 | | |
134 | | - | |
| 153 | + | |
135 | 154 | | |
136 | 155 | | |
137 | 156 | | |
| |||
205 | 224 | | |
206 | 225 | | |
207 | 226 | | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
208 | 344 | | |
209 | 345 | | |
210 | 346 | | |
| |||
218 | 354 | | |
219 | 355 | | |
220 | 356 | | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
221 | 361 | | |
222 | 362 | | |
223 | 363 | | |
| |||
540 | 680 | | |
541 | 681 | | |
542 | 682 | | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
0 commit comments