@@ -301,15 +301,51 @@ class Bridge:
301301 elif hasattr(box, "stop"):
302302 await box.stop()
303303
304+ async def _refresh_box_handle(self, box_id, started=None):
305+ rt = getattr(self, "_boxlite_rt", None)
306+ if rt is None:
307+ return self._boxes.get(box_id)
308+
309+ fresh = await rt.get(box_id)
310+ if fresh is None:
311+ raise RuntimeError(f"Cannot get fresh handle for box {box_id}")
312+
313+ old_sb = self._simple_boxes.get(box_id)
314+ old_box = self._boxes.get(box_id)
315+ if old_sb and hasattr(old_sb, "_box"):
316+ old_sb._box = fresh
317+ if started is not None:
318+ old_sb._started = started
319+ if old_box and hasattr(old_box, "_box"):
320+ old_box._box = fresh
321+ else:
322+ self._boxes[box_id] = fresh
323+ return fresh
324+
304325 async def stop(self, box_id):
305326 box = self._boxes.get(box_id)
306- if box and hasattr(box, "stop"):
327+ if box is None:
328+ raise ValueError(f"Box not found: {box_id}")
329+ if hasattr(box, "stop"):
307330 await box.stop()
331+ await self._refresh_box_handle(box_id, False)
308332
309333 async def start(self, box_id):
310334 box = self._boxes.get(box_id)
311- if box and hasattr(box, "start"):
312- await box.start()
335+ if box is None:
336+ raise ValueError(f"Box not found: {box_id}")
337+
338+ fresh = await self._refresh_box_handle(box_id, False)
339+ if fresh and hasattr(fresh, "start"):
340+ await fresh.start()
341+ elif fresh and hasattr(fresh, "__aenter__"):
342+ await fresh.__aenter__()
343+ else:
344+ raise RuntimeError(f"Box has no start method: {box_id}")
345+
346+ old_sb = self._simple_boxes.get(box_id)
347+ if old_sb and hasattr(old_sb, "_started"):
348+ old_sb._started = True
313349
314350 def _get_box(self, box_id):
315351 box = self._boxes.get(box_id)
0 commit comments