claude-code-remote-pilot 0.5.5 → 0.5.6

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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,7 @@
6
6
  - **Respawn loading no longer appears stuck**: web respawn now has a request timeout and surfaces a clear timeout error when the API call hangs, so the button always returns to clickable state.
7
7
  - **Terminal output now feels realtime**: session detail terminal polling runs at a faster cadence and triggers immediate output refresh after sending input/keys, improving perceived connect speed and responsiveness.
8
8
  - **"Connecting…" no longer gets stuck**: terminal detail view now clears connecting state on poll failures, shows a retrying error hint, and fixes session state initialization order for stable render behavior.
9
+ - **Respawn/End web actions stabilized**: removed false-positive client respawn timeout and added explicit inline error handling for End action responses, so both controls fail visibly instead of appearing stuck.
9
10
 
10
11
  ## 0.5.4 — 2026-05-06
11
12
 
package/lib/ui.html CHANGED
@@ -580,6 +580,7 @@ function SessionDetailScreen({ session, onBack, onKilled, onRespawned }) {
580
580
  const [msg, setMsg] = useState('');
581
581
  const [sending, setSending] = useState(false);
582
582
  const [killing, setKilling] = useState(false);
583
+ const [killError, setKillError] = useState('');
583
584
  const [respawning, setRespawning] = useState(false);
584
585
  const [respawnError, setRespawnError] = useState('');
585
586
  const [copyOk, setCopyOk] = useState(false);
@@ -688,10 +689,18 @@ function SessionDetailScreen({ session, onBack, onKilled, onRespawned }) {
688
689
  const handleKill = async () => {
689
690
  if (!confirm(`End session "${session.name}"?`)) return;
690
691
  setKilling(true);
692
+ setKillError('');
691
693
  try {
692
- await apiFetch(`/api/sessions/${encodeURIComponent(session.name)}`, { method: 'DELETE' });
694
+ const res = await apiFetch(`/api/sessions/${encodeURIComponent(session.name)}`, { method: 'DELETE' });
695
+ if (!res.ok) {
696
+ const d = await res.json().catch(() => ({}));
697
+ setKillError(d.error || 'Failed to end session');
698
+ setKilling(false);
699
+ return;
700
+ }
693
701
  onKilled();
694
- } catch {
702
+ } catch (e) {
703
+ if (e && e.message !== 'Unauthorized') setKillError('Network error');
695
704
  setKilling(false);
696
705
  }
697
706
  };
@@ -700,13 +709,8 @@ function SessionDetailScreen({ session, onBack, onKilled, onRespawned }) {
700
709
  if (respawning) return;
701
710
  setRespawning(true);
702
711
  setRespawnError('');
703
- const controller = new AbortController();
704
- const timeoutId = setTimeout(() => controller.abort(), 12000);
705
712
  try {
706
- const res = await apiFetch(`/api/sessions/${encodeURIComponent(session.name)}/respawn`, {
707
- method: 'POST',
708
- signal: controller.signal,
709
- });
713
+ const res = await apiFetch(`/api/sessions/${encodeURIComponent(session.name)}/respawn`, { method: 'POST' });
710
714
  const data = await res.json();
711
715
  if (!res.ok) {
712
716
  setRespawnError(data.error || 'Failed to respawn');
@@ -714,13 +718,8 @@ function SessionDetailScreen({ session, onBack, onKilled, onRespawned }) {
714
718
  }
715
719
  onRespawned(data);
716
720
  } catch (e) {
717
- if (e && e.name === 'AbortError') {
718
- setRespawnError('Respawn timeout. Please try again.');
719
- return;
720
- }
721
721
  if (e.message !== 'Unauthorized') setRespawnError('Network error');
722
722
  } finally {
723
- clearTimeout(timeoutId);
724
723
  setRespawning(false);
725
724
  }
726
725
  };
@@ -774,6 +773,11 @@ function SessionDetailScreen({ session, onBack, onKilled, onRespawned }) {
774
773
  {Icons.trash} {killing ? 'Ending…' : 'End'}
775
774
  </button>
776
775
  )}
776
+ {!isOffline && killError && (
777
+ <span style={{ color: 'var(--error)', fontSize: 12, alignSelf: 'center' }}>
778
+ {killError}
779
+ </span>
780
+ )}
777
781
  </div>
778
782
  </div>
779
783
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-remote-pilot",
3
- "version": "0.5.5",
3
+ "version": "0.5.6",
4
4
  "description": "Interactive Claude Code supervisor — spawn and monitor multiple Claude sessions from a single terminal.",
5
5
  "type": "commonjs",
6
6
  "repository": {