Cloud: report repository copy progress and duration

Merged
TE
4d ago
+170-4

Cloud startup now reports repository-copy state and duration on the clone row. The Rust start-chat copy answer emits seed_state, seed_phase, seed_started_at and seed_finished_at on successful, cached and failed copies; Swift forwards them into clone.startedAt/finishedAt before handling a failure. Copying no longer claims to measure machine boot or harness startup.

Follow-up to #30386. Leo asked: “and if i click the < it takes me to environment setup / which is the same as where the cog takes me”. Existing callback behavior stays covered; checklist tests now cover collapsed rendering, elapsed duration, the setup action and the forwarded copy timing shape. Cached copy detail uses the existing localized string.

Validation at 42119533edc61faa49119e3828af334bbf4e5c7c: app compile passed (104 s); targeted Cargo start_chat_cli tests passed 34/34 (run); CloudStartView/cloudStartProgress Bun tests passed 17/17 (run). Both ran remotely through cmux-ci. The base merge preserves the existing resume-and-lease copy operation; timing wraps its result, including early returns. Rust formatting and git diff --check pass. Machine/harness lifecycle timestamp sources and an interaction test for re-expansion are tracked in #30577.

Agent session: agent session

Re-land note: #30792 reverted #30386 while CmuxNextApp grew. This PR keeps only the four emitted seed_* clone fields in CmuxNextApp; environment, copy-progress, and machine/harness timing fields remain in the follow-up producer work.