@dtoolkit/dbrain 0.4.0 → 0.4.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/README.md +15 -1
- package/dist/dashboard/index.html +73 -31
- package/dist/dashboard/logo-dbrain-complete.png +0 -0
- package/dist/dashboard/logo-dbrain.png +0 -0
- package/dist/dashboard/server.js +6 -6
- package/dist/dashboard/server.js.map +1 -1
- package/package.json +2 -2
- package/dist/dashboard/logo-complete.png +0 -0
- package/dist/dashboard/logo-image.png +0 -0
package/README.md
CHANGED
|
@@ -107,6 +107,7 @@ Memories fade if you don't use them — like a real brain.
|
|
|
107
107
|
| `wake_up` | Full identity load |
|
|
108
108
|
| `overview` | Brain stats |
|
|
109
109
|
| `share` | Push a fact to a connected shared brain |
|
|
110
|
+
| `compact` | Run compaction (dedup + tier recalc) |
|
|
110
111
|
|
|
111
112
|
## REST API
|
|
112
113
|
|
|
@@ -127,6 +128,8 @@ All endpoints require `Authorization: Bearer <token>` except `/health`.
|
|
|
127
128
|
| `POST/GET/DELETE` | `/keys` | API key management (shared brains only) |
|
|
128
129
|
| `PATCH` | `/keys/:id` | Update API key permissions |
|
|
129
130
|
| `POST` | `/facts/:id/share` | Push a fact to a connected brain |
|
|
131
|
+
| `GET` | `/me` | Current user/admin info |
|
|
132
|
+
| `POST` | `/compact` | Run compaction (admin-only) |
|
|
130
133
|
|
|
131
134
|
## CLI commands
|
|
132
135
|
|
|
@@ -139,11 +142,22 @@ All endpoints require `Authorization: Bearer <token>` except `/health`.
|
|
|
139
142
|
| `dbrain link <url>` | Client | Connect to a shared brain |
|
|
140
143
|
| `dbrain unlink <name>` | Client | Disconnect from a shared brain |
|
|
141
144
|
| `dbrain connections` | Client | List connections with health status |
|
|
145
|
+
| `dbrain compact [path]` | Server | Run compaction (dedup + tier recalc) |
|
|
146
|
+
| `dbrain configure [path]` | Server | Interactive config editor |
|
|
142
147
|
| `dbrain keys <action>` | Server | Manage per-user API keys (shared brains) |
|
|
143
148
|
|
|
144
149
|
## Dashboard
|
|
145
150
|
|
|
146
|
-
Web dashboard on port `7879
|
|
151
|
+
Web dashboard on port `7879` (API port + 1). Single-file React 18 app — CDN deps, no build step.
|
|
152
|
+
|
|
153
|
+
- Brain status with live pulse indicator and stats (entities, facts by tier, conversations).
|
|
154
|
+
- Entity grid with PARA category coloring and hot/warm/cold tier badges.
|
|
155
|
+
- Entity detail view with all facts.
|
|
156
|
+
- Conversation list with source, date, and click-to-view messages.
|
|
157
|
+
- Full-text search over all memories.
|
|
158
|
+
- Light / Dark themes (Cloud / Ocean).
|
|
159
|
+
- Mobile responsive with hamburger menu.
|
|
160
|
+
- Token-based auth (validated against `/memory/summary`).
|
|
147
161
|
|
|
148
162
|
## Stack
|
|
149
163
|
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
5
5
|
<title>dbrain - Your distributed brain</title>
|
|
6
|
-
<link rel="icon" type="image/png" href="/
|
|
7
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
8
|
-
<link rel="shortcut icon" href="/favicon.ico">
|
|
9
|
-
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
10
|
-
<link rel="manifest" href="/site.webmanifest">
|
|
6
|
+
<link rel="icon" type="image/png" href="/logo-dbrain.png">
|
|
11
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
12
8
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600;9..40,700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
13
9
|
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
@@ -297,10 +293,10 @@ html,body{height:100%;font-family:var(--font);background:var(--bg);color:var(--t
|
|
|
297
293
|
.login-card{
|
|
298
294
|
position:relative;z-index:1;background:var(--surface);
|
|
299
295
|
border:1px solid var(--border);border-radius:16px;
|
|
300
|
-
padding:40px 44px;width:400px;text-align:center;
|
|
296
|
+
padding:40px 44px;width:400px;max-width:calc(100vw - 32px);text-align:center;
|
|
301
297
|
box-shadow:0 20px 60px oklch(0 0 0/.12),0 0 0 1px oklch(from var(--accent) l c h /.08);
|
|
302
298
|
}
|
|
303
|
-
.login-logo{width:
|
|
299
|
+
.login-logo{width:280px;max-width:100%;height:auto;margin:0 auto 28px;display:block}
|
|
304
300
|
.login-token-label{font-size:13px;color:var(--text-2);margin-bottom:10px;text-align:left}
|
|
305
301
|
.login-input{
|
|
306
302
|
width:100%;padding:11px 14px;background:var(--surface-2);
|
|
@@ -312,10 +308,47 @@ html,body{height:100%;font-family:var(--font);background:var(--bg);color:var(--t
|
|
|
312
308
|
.login-input.err{border-color:#e53e3e}
|
|
313
309
|
.login-hint{font-size:12px;color:var(--text-3);margin-bottom:14px}
|
|
314
310
|
.login-err{font-size:12px;color:#e53e3e;margin-bottom:14px}
|
|
311
|
+
.login-btn{
|
|
312
|
+
width:100%;padding:11px;background:var(--accent);color:#fff;border:none;
|
|
313
|
+
border-radius:var(--r);font-family:var(--font);font-size:14px;font-weight:600;cursor:pointer;
|
|
314
|
+
transition:opacity .12s;
|
|
315
|
+
}
|
|
316
|
+
.login-btn:hover{opacity:.9}
|
|
315
317
|
|
|
316
318
|
/* ── LOADING ────────────────────────────── */
|
|
317
319
|
.loading{display:flex;align-items:center;justify-content:center;height:60vh;color:var(--text-3);font-size:13px}
|
|
318
320
|
.empty{color:var(--text-3);font-size:13px;padding:32px;text-align:center;background:var(--surface);border-radius:var(--r);border:1px solid var(--border-subtle)}
|
|
321
|
+
|
|
322
|
+
/* ── MOBILE HAMBURGER ──────────────────── */
|
|
323
|
+
.mobile-toggle{
|
|
324
|
+
display:none;position:fixed;top:12px;left:12px;z-index:60;
|
|
325
|
+
width:32px;height:32px;border-radius:6px;border:none;
|
|
326
|
+
background:none;cursor:pointer;align-items:center;justify-content:center;
|
|
327
|
+
padding:0;
|
|
328
|
+
}
|
|
329
|
+
.mobile-toggle svg{color:var(--text-2)}
|
|
330
|
+
.sidebar-overlay{display:none;position:fixed;inset:0;z-index:45;background:oklch(0 0 0/.3)}
|
|
331
|
+
|
|
332
|
+
/* ── RESPONSIVE ────────────────────────── */
|
|
333
|
+
@media(max-width:768px){
|
|
334
|
+
.mobile-toggle{display:flex}
|
|
335
|
+
.sidebar{transform:translateX(-100%);transition:transform .2s}
|
|
336
|
+
.sidebar.open{transform:translateX(0)}
|
|
337
|
+
.sidebar-overlay.open{display:block}
|
|
338
|
+
.main{margin-left:0}
|
|
339
|
+
.topbar{padding:0 16px;padding-left:52px}
|
|
340
|
+
.page{padding:20px 16px 60px}
|
|
341
|
+
.stats-row{grid-template-columns:repeat(2,1fr)}
|
|
342
|
+
.entity-grid{grid-template-columns:1fr}
|
|
343
|
+
.conv-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
|
|
344
|
+
.meta-grid{grid-template-columns:1fr}
|
|
345
|
+
.detail-stat-row{flex-direction:column}
|
|
346
|
+
.detail-stat{border-right:none;border-bottom:1px solid var(--border-subtle)}
|
|
347
|
+
.detail-stat:last-child{border-bottom:none}
|
|
348
|
+
.login-card{padding:28px 20px}
|
|
349
|
+
.login-logo{width:100%}
|
|
350
|
+
.form-row{flex-direction:column}
|
|
351
|
+
}
|
|
319
352
|
</style>
|
|
320
353
|
</head>
|
|
321
354
|
<body>
|
|
@@ -423,7 +456,7 @@ const BrainIcon = () => (
|
|
|
423
456
|
</svg>
|
|
424
457
|
);
|
|
425
458
|
|
|
426
|
-
function Sidebar({ route, nav, palette, onTogglePalette, brain, connections, user, onLogout, activeBrain, onBrainSwitch }) {
|
|
459
|
+
function Sidebar({ route, nav, palette, onTogglePalette, brain, connections, user, onLogout, activeBrain, onBrainSwitch, sidebarOpen }) {
|
|
427
460
|
const brainItems = [
|
|
428
461
|
{ name: null, label: brain.name || 'My Brain', badge: brain.brainType, online: true },
|
|
429
462
|
...(connections || []).map(c => ({
|
|
@@ -459,9 +492,9 @@ function Sidebar({ route, nav, palette, onTogglePalette, brain, connections, use
|
|
|
459
492
|
};
|
|
460
493
|
|
|
461
494
|
return (
|
|
462
|
-
<aside className=
|
|
495
|
+
<aside className={`sidebar ${sidebarOpen ? 'open' : ''}`}>
|
|
463
496
|
<div className="sb-logo">
|
|
464
|
-
<img src="/logo-
|
|
497
|
+
<img src="/logo-dbrain.png" alt="dbrain" />
|
|
465
498
|
<div className="sb-logo-info">
|
|
466
499
|
<span className="sb-logo-text">dbrain</span>
|
|
467
500
|
<span className="sb-version">v{brain.version}</span>
|
|
@@ -493,13 +526,13 @@ function Sidebar({ route, nav, palette, onTogglePalette, brain, connections, use
|
|
|
493
526
|
<button className={`palette-toggle-opt ${palette === 'ocean' ? 'active' : ''}`} onClick={() => onTogglePalette('ocean')}>● Dark</button>
|
|
494
527
|
</div>
|
|
495
528
|
</div>
|
|
496
|
-
|
|
529
|
+
<div className="sb-user">
|
|
497
530
|
<div className="sb-user-info">
|
|
498
|
-
<span className="sb-user-name">{user.userName}</span>
|
|
499
|
-
<span className="sb-user-role">{user.isAdmin ? 'admin' : user.permissions}</span>
|
|
531
|
+
<span className="sb-user-name">{user ? user.userName : 'Admin'}</span>
|
|
532
|
+
<span className="sb-user-role">{user ? (user.isAdmin ? 'admin' : user.permissions) : ''}</span>
|
|
500
533
|
</div>
|
|
501
534
|
<button className="sb-logout" onClick={onLogout}>Logout</button>
|
|
502
|
-
</div>
|
|
535
|
+
</div>
|
|
503
536
|
</div>
|
|
504
537
|
</aside>
|
|
505
538
|
);
|
|
@@ -509,29 +542,31 @@ function Sidebar({ route, nav, palette, onTogglePalette, brain, connections, use
|
|
|
509
542
|
function LoginPage({ onLogin }) {
|
|
510
543
|
const [token, setToken] = useState('');
|
|
511
544
|
const [err, setErr] = useState('');
|
|
512
|
-
const
|
|
513
|
-
|
|
545
|
+
const handleSubmit = async (e) => {
|
|
546
|
+
e.preventDefault();
|
|
514
547
|
if (!token.trim()) return;
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
548
|
+
try {
|
|
549
|
+
const r = await fetch(`${API_BASE}/memory/summary`, { headers: { 'Authorization': `Bearer ${token}` } });
|
|
550
|
+
if (!r.ok) throw new Error('fail');
|
|
551
|
+
onLogin(token);
|
|
552
|
+
} catch {
|
|
553
|
+
setErr('Invalid token or brain unreachable.');
|
|
554
|
+
}
|
|
520
555
|
};
|
|
521
556
|
return (
|
|
522
557
|
<div className="login-bg">
|
|
523
|
-
<
|
|
524
|
-
<img src="logo-complete.png" alt="dbrain" className="login-logo" />
|
|
525
|
-
<
|
|
558
|
+
<form className="login-card" onSubmit={handleSubmit}>
|
|
559
|
+
<img src="/logo-dbrain-complete.png" alt="dbrain" className="login-logo" />
|
|
560
|
+
<div className="login-token-label">Access token</div>
|
|
526
561
|
<input className={`login-input${err ? ' err' : ''}`} type="password"
|
|
527
562
|
placeholder="sk-dbr_..." value={token}
|
|
528
|
-
onChange={e => { setToken(e.target.value); setErr(''); }}
|
|
529
|
-
onKeyDown={e => e.key === 'Enter' && submit()} autoFocus spellCheck="false" />
|
|
563
|
+
onChange={e => { setToken(e.target.value); setErr(''); }} autoFocus />
|
|
530
564
|
{err
|
|
531
|
-
? <
|
|
532
|
-
: <
|
|
565
|
+
? <div className="login-err">{err}</div>
|
|
566
|
+
: <div className="login-hint">Find your token in ~/.dbrain/config.json</div>
|
|
533
567
|
}
|
|
534
|
-
|
|
568
|
+
<button className="login-btn" type="submit">Connect</button>
|
|
569
|
+
</form>
|
|
535
570
|
</div>
|
|
536
571
|
);
|
|
537
572
|
}
|
|
@@ -1040,6 +1075,7 @@ function App() {
|
|
|
1040
1075
|
const [connections, setConnections] = useState([]);
|
|
1041
1076
|
const [user, setUser] = useState(null);
|
|
1042
1077
|
const [activeBrain, setActiveBrain] = useState(null);
|
|
1078
|
+
const [sidebarOpen, setSidebarOpen] = useState(false);
|
|
1043
1079
|
const authed = Boolean(token);
|
|
1044
1080
|
|
|
1045
1081
|
const togglePalette = (p) => {
|
|
@@ -1103,10 +1139,16 @@ function App() {
|
|
|
1103
1139
|
return <DashboardPage nav={nav} overview={overview} conversations={conversations} brainName={activeBrainName} />;
|
|
1104
1140
|
};
|
|
1105
1141
|
|
|
1142
|
+
const mobileNav = (path) => { nav(path); setSidebarOpen(false); };
|
|
1143
|
+
|
|
1106
1144
|
return (
|
|
1107
1145
|
<div className="shell">
|
|
1108
|
-
<
|
|
1109
|
-
|
|
1146
|
+
<button className="mobile-toggle" onClick={() => setSidebarOpen(!sidebarOpen)}>
|
|
1147
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
|
|
1148
|
+
</button>
|
|
1149
|
+
<div className={`sidebar-overlay ${sidebarOpen ? 'open' : ''}`} onClick={() => setSidebarOpen(false)} />
|
|
1150
|
+
<Sidebar route={route} nav={mobileNav} palette={palette} onTogglePalette={togglePalette} brain={brain} connections={connections} user={user}
|
|
1151
|
+
activeBrain={activeBrain} onBrainSwitch={(name) => { handleBrainSwitch(name); setSidebarOpen(false); }} sidebarOpen={sidebarOpen}
|
|
1110
1152
|
onLogout={() => { localStorage.removeItem(TOKEN_KEY); setToken(''); setHealth(null); setUser(null); setActiveBrain(null); nav('#/login'); }} />
|
|
1111
1153
|
<div className="main">{renderPage()}</div>
|
|
1112
1154
|
</div>
|
|
Binary file
|
|
Binary file
|
package/dist/dashboard/server.js
CHANGED
|
@@ -12,17 +12,17 @@ const MIME = {
|
|
|
12
12
|
};
|
|
13
13
|
export function startDashboard(port) {
|
|
14
14
|
const app = Fastify();
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const logoSquare = readFileSync(join(__dirname, 'logo-dbrain.png'));
|
|
16
|
+
const logoComplete = readFileSync(join(__dirname, 'logo-dbrain-complete.png'));
|
|
17
17
|
app.get('/', (_, reply) => {
|
|
18
18
|
const html = readFileSync(join(__dirname, 'index.html'), 'utf-8');
|
|
19
19
|
reply.type('text/html').send(html);
|
|
20
20
|
});
|
|
21
|
-
app.get('/logo-
|
|
22
|
-
reply.type('image/png').send(
|
|
21
|
+
app.get('/logo-dbrain.png', (_, reply) => {
|
|
22
|
+
reply.type('image/png').send(logoSquare);
|
|
23
23
|
});
|
|
24
|
-
app.get('/logo-complete.png', (_, reply) => {
|
|
25
|
-
reply.type('image/png').send(
|
|
24
|
+
app.get('/logo-dbrain-complete.png', (_, reply) => {
|
|
25
|
+
reply.type('image/png').send(logoComplete);
|
|
26
26
|
});
|
|
27
27
|
app.get('/:file', (req, reply) => {
|
|
28
28
|
const { file } = req.params;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,IAAI,GAA2B;IACnC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,cAAc;IACtB,cAAc,EAAE,2BAA2B;CAC5C,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dtoolkit/dbrain",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Your distributed mind. Persistent knowledge across all your AIs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"picocolors": "^1.1.1",
|
|
45
45
|
"zod": "^4.4.2",
|
|
46
46
|
"@dtoolkit/core": "0.5.0",
|
|
47
|
-
"@dtoolkit/sdk": "0.
|
|
47
|
+
"@dtoolkit/sdk": "0.5.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/better-sqlite3": "^7.6.13",
|
|
Binary file
|
|
Binary file
|