diff --git a/.agents/skills/multi-agent-mux-ui/apps/mam_desktop/lib/src/widgets/stale_banner.dart b/.agents/skills/multi-agent-mux-ui/apps/mam_desktop/lib/src/widgets/stale_banner.dart index 9102f0f..b3f93ae 100644 --- a/.agents/skills/multi-agent-mux-ui/apps/mam_desktop/lib/src/widgets/stale_banner.dart +++ b/.agents/skills/multi-agent-mux-ui/apps/mam_desktop/lib/src/widgets/stale_banner.dart @@ -33,11 +33,14 @@ class StaleBanner extends StatelessWidget { size: 18, ), const SizedBox(width: 8), - Text( - '⚠ status snapshot stale (last ok: $lastOkText)', - style: const TextStyle( - color: AppColors.warning, - fontWeight: FontWeight.w600, + Expanded( + child: Text( + '⚠ status snapshot stale (last ok: $lastOkText)${poll.error != null ? ' — Error: ${poll.error}' : ''}', + style: const TextStyle( + color: AppColors.warning, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, ), ), ], diff --git a/.agents/skills/multi-agent-mux-ui/packages/mam_core/.dart_tool/test/incremental_kernel.Ly9AZGFydD0zLjA= b/.agents/skills/multi-agent-mux-ui/packages/mam_core/.dart_tool/test/incremental_kernel.Ly9AZGFydD0zLjA= index 46da498..de3177f 100644 Binary files a/.agents/skills/multi-agent-mux-ui/packages/mam_core/.dart_tool/test/incremental_kernel.Ly9AZGFydD0zLjA= and b/.agents/skills/multi-agent-mux-ui/packages/mam_core/.dart_tool/test/incremental_kernel.Ly9AZGFydD0zLjA= differ diff --git a/.agents/skills/multi-agent-mux-ui/packages/mam_core/lib/src/services/session_service.dart b/.agents/skills/multi-agent-mux-ui/packages/mam_core/lib/src/services/session_service.dart index 6ffd014..0d129ea 100644 --- a/.agents/skills/multi-agent-mux-ui/packages/mam_core/lib/src/services/session_service.dart +++ b/.agents/skills/multi-agent-mux-ui/packages/mam_core/lib/src/services/session_service.dart @@ -27,7 +27,27 @@ class SessionService { this.timeout = const Duration(seconds: 5), }); + bool _preflightChecked = false; + + Future _checkPreflight() async { + if (_preflightChecked) return; + + final bashResult = await runCommand(['bash', '--version'], timeout: timeout); + if (bashResult.rc != 0) { + throw StatusFetchException('preflight failed: bash is missing or not executable'); + } + + final tmuxResult = await runCommand(['tmux', '-V'], timeout: timeout); + if (tmuxResult.rc != 0) { + throw StatusFetchException('preflight failed: tmux is missing or not executable'); + } + + _preflightChecked = true; + } + Future fetchSnapshot() async { + await _checkPreflight(); + final result = await runCommand( ['bash', statusScriptPath, '--json'], timeout: timeout,