bloby-bot 0.18.10 → 0.18.12
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 +1 -1
- package/supervisor/widget.js +1 -1
- package/worker/prompts/bloby-system-prompt.txt +2 -0
- package/workspace/client/src/App.tsx +3 -1
- package/workspace/client/src/components/Layout/DashboardLayout.tsx +15 -7
- package/workspace/client/src/components/Layout/MobileNav.tsx +2 -2
- package/workspace/client/src/components/Layout/Sidebar.tsx +4 -3
package/package.json
CHANGED
package/supervisor/widget.js
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
// ── Badge element ──
|
|
63
63
|
var badgeEl = document.createElement('div');
|
|
64
64
|
badgeEl.id = 'bloby-widget-badge';
|
|
65
|
-
badgeEl.style.cssText = 'display:none;position:fixed;bottom:' + (BUBBLE_MARGIN + BUBBLE_SIZE -
|
|
65
|
+
badgeEl.style.cssText = 'display:none;position:fixed;bottom:' + (BUBBLE_MARGIN + BUBBLE_SIZE - 29) + 'px;right:' + (BUBBLE_MARGIN + 10) + 'px;z-index:99999;min-width:20px;height:20px;border-radius:10px;background:#F04D68;color:#fff;font:bold 11px -apple-system,BlinkMacSystemFont,sans-serif;text-align:center;line-height:20px;padding:0 5px;box-sizing:border-box;pointer-events:none;';
|
|
66
66
|
document.body.appendChild(badgeEl);
|
|
67
67
|
|
|
68
68
|
// ══════════════════════════════════════════════════════════════════
|
|
@@ -28,6 +28,8 @@ You wake up fresh each session. Files are your **only** persistence layer. There
|
|
|
28
28
|
|
|
29
29
|
## Memory Files
|
|
30
30
|
|
|
31
|
+
**All memory paths are relative to your CWD.** Never construct absolute paths (like `~/bloby/...` or `/Users/.../...`) — always use the relative paths listed below. Your CWD is already set to the workspace root; relative paths will resolve correctly.
|
|
32
|
+
|
|
31
33
|
### Daily Notes — `memory/YYYY-MM-DD.md`
|
|
32
34
|
Raw, append-only log of what happened today. Write entries as you go — don't wait until the end.
|
|
33
35
|
|
|
@@ -27,6 +27,7 @@ function DashboardError() {
|
|
|
27
27
|
export default function App() {
|
|
28
28
|
const [showOnboard, setShowOnboard] = useState(false);
|
|
29
29
|
const [userName, setUserName] = useState('');
|
|
30
|
+
const [botName, setBotName] = useState('Bloby');
|
|
30
31
|
const [rebuildState, setRebuildState] = useState<'idle' | 'rebuilding' | 'error'>('idle');
|
|
31
32
|
const [buildError, setBuildError] = useState('');
|
|
32
33
|
|
|
@@ -113,6 +114,7 @@ export default function App() {
|
|
|
113
114
|
if (!s) return;
|
|
114
115
|
if (s.onboard_complete !== 'true') setShowOnboard(true);
|
|
115
116
|
if (s.user_name) setUserName(s.user_name);
|
|
117
|
+
if (s.agent_name) setBotName(s.agent_name);
|
|
116
118
|
})
|
|
117
119
|
.catch(() => {});
|
|
118
120
|
}, []);
|
|
@@ -155,7 +157,7 @@ export default function App() {
|
|
|
155
157
|
return (
|
|
156
158
|
<>
|
|
157
159
|
<ErrorBoundary fallback={<DashboardError />}>
|
|
158
|
-
<DashboardLayout userName={userName}>
|
|
160
|
+
<DashboardLayout userName={userName} botName={botName}>
|
|
159
161
|
<Routes>
|
|
160
162
|
<Route path="/" element={<DashboardPage />} />
|
|
161
163
|
<Route path="*" element={<DashboardPage />} />
|
|
@@ -6,16 +6,24 @@ import MobileNav from './MobileNav';
|
|
|
6
6
|
interface Props {
|
|
7
7
|
children: ReactNode;
|
|
8
8
|
userName?: string;
|
|
9
|
+
botName?: string;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
export default function DashboardLayout({ children, userName }: Props) {
|
|
12
|
+
export default function DashboardLayout({ children, userName, botName = 'Bloby' }: Props) {
|
|
12
13
|
const [status, setStatus] = useState<'healthy' | 'restarting'>('healthy');
|
|
13
14
|
|
|
14
15
|
useEffect(() => {
|
|
15
16
|
const check = () => {
|
|
17
|
+
console.log('[health] checking /app/api/health…');
|
|
16
18
|
fetch('/app/api/health', { signal: AbortSignal.timeout(3000) })
|
|
17
|
-
.then((r) =>
|
|
18
|
-
|
|
19
|
+
.then((r) => {
|
|
20
|
+
console.log(`[health] response: ${r.status} ok=${r.ok}`);
|
|
21
|
+
setStatus(r.ok ? 'healthy' : 'restarting');
|
|
22
|
+
})
|
|
23
|
+
.catch((err) => {
|
|
24
|
+
console.warn('[health] fetch failed:', err.message ?? err);
|
|
25
|
+
setStatus('restarting');
|
|
26
|
+
});
|
|
19
27
|
};
|
|
20
28
|
check();
|
|
21
29
|
const id = setInterval(check, 10_000);
|
|
@@ -26,10 +34,10 @@ export default function DashboardLayout({ children, userName }: Props) {
|
|
|
26
34
|
<div className="flex h-dvh flex-col">
|
|
27
35
|
{/* Mobile header */}
|
|
28
36
|
<header className="flex items-center justify-between px-4 py-3 md:hidden">
|
|
29
|
-
<MobileNav userName={userName} backendStatus={status} />
|
|
37
|
+
<MobileNav userName={userName} botName={botName} backendStatus={status} />
|
|
30
38
|
<div className="flex items-center gap-2">
|
|
31
|
-
<img src="/bloby.png" alt=
|
|
32
|
-
<span className="font-semibold text-base">
|
|
39
|
+
<img src="/bloby.png" alt={botName} className="h-6 w-auto" />
|
|
40
|
+
<span className="font-semibold text-base">{botName}</span>
|
|
33
41
|
</div>
|
|
34
42
|
<div className="w-10" />
|
|
35
43
|
</header>
|
|
@@ -41,7 +49,7 @@ export default function DashboardLayout({ children, userName }: Props) {
|
|
|
41
49
|
{/* Shiny border highlight */}
|
|
42
50
|
<div className="absolute inset-0 rounded-3xl bg-gradient-to-b from-white/[0.12] via-white/[0.04] to-transparent pointer-events-none" />
|
|
43
51
|
<div className="relative rounded-3xl bg-[#1A1A1A] m-px h-full">
|
|
44
|
-
<Sidebar userName={userName} backendStatus={status} />
|
|
52
|
+
<Sidebar userName={userName} botName={botName} backendStatus={status} />
|
|
45
53
|
</div>
|
|
46
54
|
</div>
|
|
47
55
|
</div>
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from '@/components/ui/sheet';
|
|
8
8
|
import Sidebar from './Sidebar';
|
|
9
9
|
|
|
10
|
-
export default function MobileNav({ userName, backendStatus }: { userName?: string; backendStatus?: 'healthy' | 'restarting' }) {
|
|
10
|
+
export default function MobileNav({ userName, botName, backendStatus }: { userName?: string; botName?: string; backendStatus?: 'healthy' | 'restarting' }) {
|
|
11
11
|
const [open, setOpen] = useState(false);
|
|
12
12
|
|
|
13
13
|
return (
|
|
@@ -22,7 +22,7 @@ export default function MobileNav({ userName, backendStatus }: { userName?: stri
|
|
|
22
22
|
<Sheet open={open} onOpenChange={setOpen}>
|
|
23
23
|
<SheetContent side="left" className="p-0 w-64" showCloseButton={false}>
|
|
24
24
|
<SheetTitle className="sr-only">Navigation</SheetTitle>
|
|
25
|
-
<Sidebar userName={userName} backendStatus={backendStatus} onNavigate={() => setOpen(false)} />
|
|
25
|
+
<Sidebar userName={userName} botName={botName} backendStatus={backendStatus} onNavigate={() => setOpen(false)} />
|
|
26
26
|
</SheetContent>
|
|
27
27
|
</Sheet>
|
|
28
28
|
</>
|
|
@@ -16,18 +16,19 @@ function getGreeting(): string {
|
|
|
16
16
|
|
|
17
17
|
interface SidebarProps {
|
|
18
18
|
userName?: string;
|
|
19
|
+
botName?: string;
|
|
19
20
|
backendStatus?: 'healthy' | 'restarting';
|
|
20
21
|
onNavigate?: () => void;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
export default function Sidebar({ userName, backendStatus = 'healthy', onNavigate }: SidebarProps) {
|
|
24
|
+
export default function Sidebar({ userName, botName = 'Bloby', backendStatus = 'healthy', onNavigate }: SidebarProps) {
|
|
24
25
|
const firstName = userName?.split(/\s+/)[0] || 'Human';
|
|
25
26
|
return (
|
|
26
27
|
<aside className="flex flex-col h-full w-64 bg-transparent p-5 pt-8">
|
|
27
28
|
{/* Logo */}
|
|
28
29
|
<div className="flex items-center gap-2.5 mb-8">
|
|
29
|
-
<img src="/bloby.png" alt=
|
|
30
|
-
<span className="font-bold text-lg" style={{ fontFamily: "'Space Grotesk', sans-serif" }}>
|
|
30
|
+
<img src="/bloby.png" alt={botName} className="h-7 w-auto" />
|
|
31
|
+
<span className="font-bold text-lg" style={{ fontFamily: "'Space Grotesk', sans-serif" }}>{botName}</span>
|
|
31
32
|
</div>
|
|
32
33
|
|
|
33
34
|
{/* Greeting */}
|