bloby-bot 0.23.0 → 0.23.1
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/bin/cli.js
CHANGED
|
@@ -538,6 +538,15 @@ class Stepper {
|
|
|
538
538
|
lineCount += 1 + this.infoLines.length;
|
|
539
539
|
}
|
|
540
540
|
|
|
541
|
+
// Clear leftover lines when content shrinks (e.g. info lines removed)
|
|
542
|
+
if (lineCount < this._totalLines) {
|
|
543
|
+
const extra = this._totalLines - lineCount;
|
|
544
|
+
for (let i = 0; i < extra; i++) {
|
|
545
|
+
process.stdout.write('\x1b[2K\n');
|
|
546
|
+
}
|
|
547
|
+
process.stdout.write(`\x1b[${extra}A`);
|
|
548
|
+
}
|
|
549
|
+
|
|
541
550
|
this._totalLines = lineCount;
|
|
542
551
|
}
|
|
543
552
|
|
|
@@ -710,6 +719,17 @@ function finalMessage(tunnelUrl, relayUrl) {
|
|
|
710
719
|
}
|
|
711
720
|
}
|
|
712
721
|
|
|
722
|
+
function readyMessage(tunnelUrl, relayUrl) {
|
|
723
|
+
if (relayUrl) {
|
|
724
|
+
console.log(`\n ${c.pink}${c.bold}${link(relayUrl)}${c.reset}`);
|
|
725
|
+
console.log(` ${c.dim}(cmd+click or ctrl+click to open)${c.reset}`);
|
|
726
|
+
}
|
|
727
|
+
if (tunnelUrl && tunnelUrl !== relayUrl) {
|
|
728
|
+
console.log(` ${c.dim}Tunnel:${c.reset} ${c.dim}${link(tunnelUrl)}${c.reset}`);
|
|
729
|
+
}
|
|
730
|
+
console.log('');
|
|
731
|
+
}
|
|
732
|
+
|
|
713
733
|
function writeVersionFile(version) {
|
|
714
734
|
try { fs.writeFileSync(path.join(DATA_DIR, 'VERSION'), version); } catch {}
|
|
715
735
|
}
|
|
@@ -1552,13 +1572,7 @@ async function update() {
|
|
|
1552
1572
|
if (daemonWasRunning) {
|
|
1553
1573
|
if (updateResult && updateResult.healthOk) {
|
|
1554
1574
|
console.log(` ${c.blue}✔${c.reset} Daemon restarted with new version.`);
|
|
1555
|
-
|
|
1556
|
-
console.log(` ${c.dim}Tunnel:${c.reset} ${c.blue}${link(updateResult.tunnelUrl)}${c.reset}`);
|
|
1557
|
-
}
|
|
1558
|
-
if (updateResult.relayUrl) {
|
|
1559
|
-
console.log(` ${c.dim}URL:${c.reset} ${c.pink}${link(updateResult.relayUrl)}${c.reset}`);
|
|
1560
|
-
}
|
|
1561
|
-
console.log('');
|
|
1575
|
+
readyMessage(updateResult.tunnelUrl, updateResult.relayUrl);
|
|
1562
1576
|
} else {
|
|
1563
1577
|
console.log(` ${c.yellow}⚠${c.reset} Daemon may still be starting. Check ${c.pink}bloby daemon status${c.reset}\n`);
|
|
1564
1578
|
}
|
|
@@ -1690,14 +1704,8 @@ async function daemon(sub) {
|
|
|
1690
1704
|
const restartResult = await waitForDaemonHealth(restartStepper, restartConfig, restartHasTunnel, restartLogOffset);
|
|
1691
1705
|
restartStepper.finish();
|
|
1692
1706
|
|
|
1693
|
-
console.log(`\n ${c.blue}✔${c.reset} Bloby daemon restarted
|
|
1694
|
-
|
|
1695
|
-
console.log(` ${c.dim}Tunnel:${c.reset} ${c.blue}${link(restartResult.tunnelUrl)}${c.reset}`);
|
|
1696
|
-
}
|
|
1697
|
-
if (restartResult.relayUrl) {
|
|
1698
|
-
console.log(` ${c.dim}URL:${c.reset} ${c.pink}${link(restartResult.relayUrl)}${c.reset}`);
|
|
1699
|
-
}
|
|
1700
|
-
if (restartResult.tunnelUrl || restartResult.relayUrl) console.log('');
|
|
1707
|
+
console.log(`\n ${c.blue}✔${c.reset} Bloby daemon restarted.`);
|
|
1708
|
+
readyMessage(restartResult.tunnelUrl, restartResult.relayUrl);
|
|
1701
1709
|
break;
|
|
1702
1710
|
}
|
|
1703
1711
|
|
|
@@ -1830,14 +1838,8 @@ async function daemon(sub) {
|
|
|
1830
1838
|
const sysRestartResult = await waitForDaemonHealth(sysRestartStepper, sysRestartConfig, sysRestartHasTunnel, 0);
|
|
1831
1839
|
sysRestartStepper.finish();
|
|
1832
1840
|
|
|
1833
|
-
console.log(`\n ${c.blue}✔${c.reset} Bloby daemon restarted
|
|
1834
|
-
|
|
1835
|
-
console.log(` ${c.dim}Tunnel:${c.reset} ${c.blue}${link(sysRestartResult.tunnelUrl)}${c.reset}`);
|
|
1836
|
-
}
|
|
1837
|
-
if (sysRestartResult.relayUrl) {
|
|
1838
|
-
console.log(` ${c.dim}URL:${c.reset} ${c.pink}${link(sysRestartResult.relayUrl)}${c.reset}`);
|
|
1839
|
-
}
|
|
1840
|
-
if (sysRestartResult.tunnelUrl || sysRestartResult.relayUrl) console.log('');
|
|
1841
|
+
console.log(`\n ${c.blue}✔${c.reset} Bloby daemon restarted.`);
|
|
1842
|
+
readyMessage(sysRestartResult.tunnelUrl, sysRestartResult.relayUrl);
|
|
1841
1843
|
break;
|
|
1842
1844
|
}
|
|
1843
1845
|
|
package/package.json
CHANGED
|
@@ -293,7 +293,6 @@ export default function InputBar({ onSend, onStop, streaming, whisperEnabled, on
|
|
|
293
293
|
isHolding.current = true;
|
|
294
294
|
setIsRecording(true);
|
|
295
295
|
setRecordingTime(0);
|
|
296
|
-
if (isMobile) try { navigator.vibrate?.(50); } catch {}
|
|
297
296
|
} catch (err) {
|
|
298
297
|
console.error('[InputBar] recording setup failed:', err);
|
|
299
298
|
}
|
|
@@ -321,6 +320,7 @@ export default function InputBar({ onSend, onStop, streaming, whisperEnabled, on
|
|
|
321
320
|
(e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);
|
|
322
321
|
|
|
323
322
|
holdTimerRef.current = setTimeout(() => {
|
|
323
|
+
try { navigator.vibrate?.(50); } catch {}
|
|
324
324
|
beginRecording();
|
|
325
325
|
}, 200);
|
|
326
326
|
}, [isMobile, isRecording, voiceEnabled, beginRecording, stopRecording]);
|
|
@@ -537,8 +537,8 @@ export default function InputBar({ onSend, onStop, streaming, whisperEnabled, on
|
|
|
537
537
|
onPointerCancel={handleMicCancel}
|
|
538
538
|
>
|
|
539
539
|
<div
|
|
540
|
-
className="flex items-center justify-center h-11 w-11 rounded-full bg-destructive text-destructive-foreground
|
|
541
|
-
style={{
|
|
540
|
+
className="flex items-center justify-center h-11 w-11 rounded-full bg-destructive text-destructive-foreground"
|
|
541
|
+
style={{ animation: 'mic-pulse-scale 2s ease-in-out infinite' }}
|
|
542
542
|
>
|
|
543
543
|
<Mic className="h-5 w-5" />
|
|
544
544
|
</div>
|
|
@@ -131,10 +131,7 @@ body {
|
|
|
131
131
|
100% { transform: rotate(360deg); }
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
@keyframes mic-pulse {
|
|
135
|
-
0%, 100% {
|
|
136
|
-
50% {
|
|
137
|
-
}
|
|
138
|
-
.animate-mic-pulse {
|
|
139
|
-
animation: mic-pulse 1.5s ease-in-out infinite;
|
|
134
|
+
@keyframes mic-pulse-scale {
|
|
135
|
+
0%, 100% { transform: scale(1.1) translateY(-6px); }
|
|
136
|
+
50% { transform: scale(1.15) translateY(-8px); }
|
|
140
137
|
}
|
package/supervisor/widget.js
CHANGED
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
'#bloby-widget-panel.open{transform:translateX(0)}',
|
|
14
14
|
'#bloby-widget-panel iframe{width:100%;height:100%;border:none;background:#212121}',
|
|
15
15
|
'@media(max-width:480px){#bloby-widget-panel{width:100vw}}',
|
|
16
|
-
'@keyframes bloby-
|
|
17
|
-
'#bloby-widget-bubble.recording{animation:bloby-mic-pulse 1.5s ease-in-out infinite}',
|
|
16
|
+
'@keyframes bloby-bubble-record{0%,100%{transform:scale(1.2) translateY(-12px)}50%{transform:scale(1.25) translateY(-14px)}}',
|
|
18
17
|
].join('\n');
|
|
19
18
|
document.head.appendChild(style);
|
|
20
19
|
|
|
@@ -479,9 +478,15 @@
|
|
|
479
478
|
}
|
|
480
479
|
try { navigator.vibrate(50); } catch(e) {}
|
|
481
480
|
badgeEl.style.display = 'none';
|
|
481
|
+
// Grow + shift up, then start pulsating after the transition
|
|
482
482
|
canvas.style.transition = 'transform 0.2s ease';
|
|
483
|
-
canvas.style.transform = 'scale(1.
|
|
484
|
-
|
|
483
|
+
canvas.style.transform = 'scale(1.2) translateY(-12px)';
|
|
484
|
+
setTimeout(function() {
|
|
485
|
+
if (hpState === 'activating' || hpState === 'recording') {
|
|
486
|
+
canvas.style.transition = 'none';
|
|
487
|
+
canvas.style.animation = 'bloby-bubble-record 2s ease-in-out infinite';
|
|
488
|
+
}
|
|
489
|
+
}, 220);
|
|
485
490
|
hpState = 'activating';
|
|
486
491
|
hpFrame = HP_ACTIVATE_START;
|
|
487
492
|
hpPingPong = 1;
|
|
@@ -530,9 +535,10 @@
|
|
|
530
535
|
}
|
|
531
536
|
}
|
|
532
537
|
|
|
533
|
-
// Shrink back
|
|
538
|
+
// Shrink back smoothly
|
|
539
|
+
canvas.style.animation = '';
|
|
540
|
+
canvas.style.transition = 'transform 0.2s ease';
|
|
534
541
|
canvas.style.transform = '';
|
|
535
|
-
canvas.classList.remove('recording');
|
|
536
542
|
|
|
537
543
|
// v2 deactivation: reverse 40→11 (activate played backwards)
|
|
538
544
|
if (hpState === 'activating') {
|