storyboard-bridge 0.9.49 → 0.9.50

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/newface_client.py CHANGED
@@ -311,7 +311,12 @@ def poll(session, mids, timeout=1800, interval=5, prefix=()):
311
311
  else:
312
312
  pend += 1
313
313
  pct = int(sum(int((content.get(m) or {}).get("progress") or 0) for m in mids) / max(1, len(mids)))
314
- key = f"{len(done)}:{pct}"
314
+ # The dedupe key MUST include elapsed time. The hub gives a render 30 minutes and refreshes that
315
+ # window on every progress event, so a key of only "done:pct" stops emitting the moment a batch
316
+ # plateaus — and a slow batch sitting at 0/15 · 0% therefore starved the heartbeat and was killed as
317
+ # "newface render timed out" while it was still legitimately rendering. creaa_client already carries
318
+ # a per-minute component for exactly this reason; this is the same bug, one provider later.
319
+ key = f"{len(done)}:{pct}:{int(time.time() - (end - timeout)) // 60}"
315
320
  if key != last_key:
316
321
  last_key = key
317
322
  # Ship the urls of everything finished SO FAR, not just a count. A batch finishes at wildly
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storyboard-bridge",
3
- "version": "0.9.49",
3
+ "version": "0.9.50",
4
4
  "description": "Desktop bridge that powers a hosted Storyboard AI webapp with your own local Claude Code / Gemini CLI login (no API key).",
5
5
  "type": "module",
6
6
  "bin": {