bloby-bot 0.53.7 → 0.53.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bloby-bot",
3
- "version": "0.53.7",
3
+ "version": "0.53.9",
4
4
  "releaseNotes": [
5
5
  "1. New Morphy animation system: config-driven sprites loaded from /morphy/*.json",
6
6
  "2. Swapped teleporting (splash) and headphones (bubble + chat) to the new format",
@@ -237,13 +237,63 @@ self.addEventListener('notificationclick', function(event) {
237
237
  });
238
238
  `;
239
239
 
240
- const RECOVERING_HTML = `<!DOCTYPE html><html style="background:#222122"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Bloby</title>
241
- <style>@keyframes _fs{to{transform:rotate(360deg)}}body{background:#222122;margin:0}</style></head>
242
- <body><div style="background:#222122;color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100dvh;width:100vw;font-family:system-ui,-apple-system,sans-serif">
243
- <img src="/morphy-icon-192.png" width="56" height="56" style="border-radius:14px;margin-bottom:20px" alt="" />
244
- <div style="width:18px;height:18px;border:2px solid rgba(255,255,255,0.12);border-top-color:rgba(255,255,255,0.7);border-radius:50%;animation:_fs .6s linear infinite"></div>
245
- </div><script>setTimeout(function(){location.reload()},3000)</script>
246
- <script src="/bloby/widget.js"></script></body></html>`;
240
+ // Shown when the dashboard's Vite dev server is briefly unreachable (startup, restart, or a
241
+ // crash). This is a transient "reconnecting" state — no action needed — so it polls and reloads
242
+ // itself the moment Vite is back (no blind 3s reload-into-the-same-error loop). Same branded
243
+ // look as the backend-down interstitial; the chat widget is loaded so the user can still talk to
244
+ // the agent if it doesn't recover on its own.
245
+ const RECOVERING_HTML = `<!DOCTYPE html>
246
+ <html lang="en"><head>
247
+ <meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
248
+ <title>Reconnecting · Bloby</title>
249
+ <style>
250
+ *{margin:0;padding:0;box-sizing:border-box}
251
+ body{font-family:system-ui,-apple-system,'Segoe UI',sans-serif;background:#0a0a0b;color:#e4e4e7;display:flex;align-items:center;justify-content:center;min-height:100dvh;padding:1.5rem;overflow:hidden}
252
+ .c{text-align:center;max-width:460px;width:100%;animation:fade-up .6s ease-out both}
253
+ .video-wrap{position:relative;width:200px;height:200px;margin:0 auto 1.4rem;display:flex;align-items:center;justify-content:center}
254
+ .video-wrap::before{content:'';position:absolute;inset:-20px;background:radial-gradient(circle,rgba(1,102,255,0.18) 0%,transparent 60%);filter:blur(20px);animation:glow 3s ease-in-out infinite}
255
+ .video-wrap video{position:relative;width:100%;height:100%;object-fit:contain;pointer-events:none;border-radius:50%}
256
+ h1{font-size:1.55rem;font-weight:700;margin-bottom:.6rem;background:linear-gradient(135deg,#0166FF,#009AFE,#4AEEFF);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
257
+ p{color:#a1a1aa;line-height:1.6;margin-bottom:.5rem;font-size:.95rem}
258
+ .lead{color:#e4e4e7;font-size:1rem}
259
+ .sub{font-size:.82rem;color:#71717a;display:inline-flex;align-items:center;gap:.5rem;background:#18181b;border:1px solid #27272a;border-radius:9999px;padding:.35rem .9rem;margin-top:1.1rem}
260
+ .sub .dot{width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,#0166FF,#009AFE);box-shadow:0 0 8px rgba(1,102,255,.6);animation:pulse 1.6s ease-in-out infinite}
261
+ .badge{display:block;font-size:.7rem;color:#52525b;margin-top:1.3rem}
262
+ @keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.85)}}
263
+ @keyframes glow{0%,100%{opacity:.55;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}
264
+ @keyframes fade-up{0%{opacity:0;transform:translateY(12px)}100%{opacity:1;transform:translateY(0)}}
265
+ </style></head>
266
+ <body><div class="c">
267
+ <div class="video-wrap"><video autoplay loop muted playsinline>
268
+ <source src="/what-happened.webm" type="video/webm">
269
+ <source src="/what-happened.mp4" type="video/mp4">
270
+ </video></div>
271
+ <h1>Reconnecting…</h1>
272
+ <p class="lead">Hang tight — your app is coming back online.</p>
273
+ <p>This usually happens right after an update or a restart. No action needed; this page refreshes itself the moment it's ready.</p>
274
+ <div class="sub"><span class="dot"></span><span id="statusText">Reconnecting…</span></div>
275
+ <span class="badge">Powered by Bloby</span>
276
+ </div>
277
+ <script>
278
+ (function(){
279
+ var attempt = 0, statusEl = document.getElementById('statusText');
280
+ function retry(){
281
+ attempt++;
282
+ fetch(location.href, { cache:'no-store', redirect:'follow' })
283
+ .then(function(r){ if (r.ok) location.reload(); else schedule(); })
284
+ .catch(schedule);
285
+ }
286
+ function schedule(){
287
+ statusEl.textContent = attempt > 8
288
+ ? 'Still reconnecting — you can ask your agent in the chat.'
289
+ : 'Reconnecting… (attempt ' + attempt + ')';
290
+ setTimeout(retry, Math.min(4000, 1200 + attempt * 300));
291
+ }
292
+ setTimeout(retry, 1800);
293
+ })();
294
+ </script>
295
+ <script src="/bloby/widget.js"></script>
296
+ </body></html>`;
247
297
 
248
298
  /** Interstitial shown (by the supervisor, not the workspace) when the workspace backend has
249
299
  * crash-looped and given up. Replaces proxying the dashboard SPA to Vite — which would 503 on