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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bloby-bot",
3
- "version": "0.18.10",
3
+ "version": "0.18.12",
4
4
  "releaseNotes": [
5
5
  "1. react router implemented",
6
6
  "2. new workspace design",
@@ -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 - 14) + 'px;right:' + (BUBBLE_MARGIN - 5) + '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;';
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) => setStatus(r.ok ? 'healthy' : 'restarting'))
18
- .catch(() => {});
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="Bloby" className="h-6 w-auto" />
32
- <span className="font-semibold text-base">Bloby</span>
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="Bloby" className="h-7 w-auto" />
30
- <span className="font-bold text-lg" style={{ fontFamily: "'Space Grotesk', sans-serif" }}>Bloby</span>
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 */}