@dtoolkit/dbrain 0.3.0 → 0.3.2

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.
Files changed (63) hide show
  1. package/README.md +39 -7
  2. package/dist/cli/index.js +43 -4
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/cli/init.d.ts.map +1 -1
  5. package/dist/cli/init.js +16 -0
  6. package/dist/cli/init.js.map +1 -1
  7. package/dist/cli/keys.d.ts +11 -0
  8. package/dist/cli/keys.d.ts.map +1 -0
  9. package/dist/cli/keys.js +85 -0
  10. package/dist/cli/keys.js.map +1 -0
  11. package/dist/cli/link.d.ts +12 -0
  12. package/dist/cli/link.d.ts.map +1 -0
  13. package/dist/cli/link.js +118 -0
  14. package/dist/cli/link.js.map +1 -0
  15. package/dist/core/config.d.ts +17 -0
  16. package/dist/core/config.d.ts.map +1 -1
  17. package/dist/core/config.js +22 -1
  18. package/dist/core/config.js.map +1 -1
  19. package/dist/core/connections.d.ts +9 -0
  20. package/dist/core/connections.d.ts.map +1 -0
  21. package/dist/core/connections.js +25 -0
  22. package/dist/core/connections.js.map +1 -0
  23. package/dist/core/db.d.ts.map +1 -1
  24. package/dist/core/db.js +29 -0
  25. package/dist/core/db.js.map +1 -1
  26. package/dist/dashboard/index.html +250 -26
  27. package/dist/mcp/server.d.ts.map +1 -1
  28. package/dist/mcp/server.js +170 -12
  29. package/dist/mcp/server.js.map +1 -1
  30. package/dist/server/index.d.ts.map +1 -1
  31. package/dist/server/index.js +28 -2
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/server/routes/conversations.d.ts.map +1 -1
  34. package/dist/server/routes/conversations.js +7 -0
  35. package/dist/server/routes/conversations.js.map +1 -1
  36. package/dist/server/routes/entities.d.ts.map +1 -1
  37. package/dist/server/routes/entities.js +5 -0
  38. package/dist/server/routes/entities.js.map +1 -1
  39. package/dist/server/routes/facts.d.ts.map +1 -1
  40. package/dist/server/routes/facts.js +54 -1
  41. package/dist/server/routes/facts.js.map +1 -1
  42. package/dist/server/routes/health.d.ts.map +1 -1
  43. package/dist/server/routes/health.js +46 -2
  44. package/dist/server/routes/health.js.map +1 -1
  45. package/dist/server/routes/keys.d.ts +3 -0
  46. package/dist/server/routes/keys.d.ts.map +1 -0
  47. package/dist/server/routes/keys.js +73 -0
  48. package/dist/server/routes/keys.js.map +1 -0
  49. package/dist/server/routes/permissions.d.ts +3 -0
  50. package/dist/server/routes/permissions.d.ts.map +1 -0
  51. package/dist/server/routes/permissions.js +9 -0
  52. package/dist/server/routes/permissions.js.map +1 -0
  53. package/dist/server/routes/proxy.d.ts +3 -0
  54. package/dist/server/routes/proxy.d.ts.map +1 -0
  55. package/dist/server/routes/proxy.js +37 -0
  56. package/dist/server/routes/proxy.js.map +1 -0
  57. package/dist/server/routes/search.d.ts.map +1 -1
  58. package/dist/server/routes/search.js +112 -40
  59. package/dist/server/routes/search.js.map +1 -1
  60. package/dist/server/routes/workspace.d.ts.map +1 -1
  61. package/dist/server/routes/workspace.js +5 -0
  62. package/dist/server/routes/workspace.js.map +1 -1
  63. package/package.json +3 -2
package/README.md CHANGED
@@ -12,12 +12,32 @@
12
12
 
13
13
  Install it once, connect every AI you use — Claude Code at home, Claude Code at work, Gemini on your phone. All share the same identity, the same memories, the same knowledge.
14
14
 
15
- ```
16
- [Home] Claude Code ──MCP──┐
17
- [Work] Claude Code ──MCP──┤ ┌─────────────────────────────────┐
18
- [Mobile] Gemini ──REST──────┼────→│ dbrain (your mind) │
19
- [Server] OpenClaw ──REST────┤ │ identity + memory + knowledge │
20
- [Other] Custom AI ──API────┘ └─────────────────────────────────┘
15
+ ```mermaid
16
+ graph LR
17
+ subgraph Clients["Your AIs"]
18
+ home["🏠 Claude Code<br/><small>home</small>"]
19
+ work["💼 Claude Code<br/><small>work</small>"]
20
+ mobile["📱 Gemini<br/><small>mobile</small>"]
21
+ server["🖥️ OpenClaw<br/><small>server</small>"]
22
+ end
23
+
24
+ home -- MCP --> personal
25
+ work -- MCP --> personal
26
+ mobile -- REST --> personal
27
+ server -- REST --> personal
28
+
29
+ subgraph Federation["Federation"]
30
+ personal["dbrain<br/><strong>personal</strong><br/><small>identity + memory + knowledge</small>"]
31
+ shared["dbrain<br/><strong>shared / team</strong><br/><small>team knowledge + API keys</small>"]
32
+ end
33
+
34
+ personal -- "federated recall" --> shared
35
+ personal -- "share facts" --> shared
36
+
37
+ style personal fill:#2563eb,color:#fff,stroke:#1e40af
38
+ style shared fill:#7c3aed,color:#fff,stroke:#5b21b6
39
+ style Clients fill:#f8fafc,color:#1e293b,stroke:#e2e8f0
40
+ style Federation fill:#f8fafc,color:#1e293b,stroke:#e2e8f0
21
41
  ```
22
42
 
23
43
  ## Install
@@ -61,6 +81,7 @@ The brain has 4 layers:
61
81
  | **Conversations** | Raw chat history from every AI session | `conversations` + `messages` tables |
62
82
  | **Knowledge** | Structured facts organized by PARA | `entities` + `facts` tables with hot/warm/cold tiers |
63
83
  | **Recall** | Full-text search over all facts | FTS5 with OR logic for multi-language queries |
84
+ | **Federation** | Personal brains connect to shared team brains | Per-user API keys, federated recall, manual fact push |
64
85
 
65
86
  ### Memory tiers
66
87
 
@@ -85,6 +106,7 @@ Memories fade if you don't use them — like a real brain.
85
106
  | `log` | Send conversation messages for storage |
86
107
  | `wake_up` | Full identity load |
87
108
  | `overview` | Brain stats |
109
+ | `share` | Push a fact to a connected shared brain |
88
110
 
89
111
  ## REST API
90
112
 
@@ -99,8 +121,12 @@ All endpoints require `Authorization: Bearer <token>` except `/health`.
99
121
  | `POST` | `/entities/:id/facts` | Add facts to an entity |
100
122
  | `PATCH` | `/facts/:id/access` | Bump a memory (keep it hot) |
101
123
  | `GET/POST` | `/conversations` | Chat history |
102
- | `POST` | `/search` | Full-text search over all facts |
124
+ | `POST` | `/search` | Full-text search (supports `federated: true`) |
103
125
  | `GET` | `/memory/summary` | Overview: entities x tiers |
126
+ | `GET` | `/connections` | List connected brains with health status |
127
+ | `POST/GET/DELETE` | `/keys` | API key management (shared brains only) |
128
+ | `PATCH` | `/keys/:id` | Update API key permissions |
129
+ | `POST` | `/facts/:id/share` | Push a fact to a connected brain |
104
130
 
105
131
  ## CLI commands
106
132
 
@@ -110,6 +136,10 @@ All endpoints require `Authorization: Bearer <token>` except `/health`.
110
136
  | `dbrain start [path]` | Server | Start the API server + dashboard |
111
137
  | `dbrain connect <client> [url]` | Client | Connect a client to a running brain |
112
138
  | `dbrain status [path]` | Server | Check brain status |
139
+ | `dbrain link <url>` | Client | Connect to a shared brain |
140
+ | `dbrain unlink <name>` | Client | Disconnect from a shared brain |
141
+ | `dbrain connections` | Client | List connections with health status |
142
+ | `dbrain keys <action>` | Server | Manage per-user API keys (shared brains) |
113
143
 
114
144
  ## Dashboard
115
145
 
@@ -140,6 +170,8 @@ For non-interactive setup (Docker, CI):
140
170
  | `DBRAIN_AGENT_NAME` | `dBrain` | AI identity name |
141
171
  | `DBRAIN_OWNER_NAME` | `Human` | Owner name |
142
172
  | `DBRAIN_TIMEZONE` | Auto-detected | Owner timezone |
173
+ | `DBRAIN_BRAIN_NAME` | from identity | Brain display name |
174
+ | `DBRAIN_BRAIN_TYPE` | `personal` | `personal` or `shared` |
143
175
 
144
176
  ## License
145
177
 
package/dist/cli/index.js CHANGED
@@ -15,10 +15,7 @@ const banner = `\
15
15
  | (_| | |_) | | | (_| | | | | |
16
16
  \\__,_|_.__/|_| \\__,_|_|_| |_|`;
17
17
  const description = `${pc.green(banner)}\n\n${pc.green('Your distributed mind. Wherever you go, I remember.')}\n${pc.dim('Part of the dtoolkit suite')}`;
18
- program
19
- .name('dbrain')
20
- .description(description)
21
- .version(pkg.version);
18
+ program.name('dbrain').description(description).version(pkg.version);
22
19
  program
23
20
  .command('init')
24
21
  .description('Initialize a new brain (server)')
@@ -54,5 +51,47 @@ program
54
51
  const { status } = await import('./status.js');
55
52
  await status(path);
56
53
  });
54
+ program
55
+ .command('keys')
56
+ .description('Manage API keys (shared brains only)')
57
+ .argument('<action>', 'create | list | revoke')
58
+ .option('--url <url>', 'Brain URL (or DBRAIN_URL env)')
59
+ .option('--token <token>', 'Admin token (or DBRAIN_TOKEN env)')
60
+ .option('--user-id <userId>', 'User ID (create)')
61
+ .option('--user-name <userName>', 'User display name (create)')
62
+ .option('--permissions <perms>', 'read | write | read+write (create, default: read+write)')
63
+ .option('--key-id <keyId>', 'Key ID (revoke)')
64
+ .action(async (action, opts) => {
65
+ const { keys } = await import('./keys.js');
66
+ await keys(action, opts);
67
+ });
68
+ program
69
+ .command('link')
70
+ .description('Link to a shared brain')
71
+ .argument('<url>', 'Shared brain URL')
72
+ .option('--token <token>', 'Access token for the shared brain')
73
+ .option('--name <name>', 'Connection name (defaults to remote brain name)')
74
+ .option('--path <path>', 'Local brain data path')
75
+ .action(async (url, opts) => {
76
+ const { link } = await import('./link.js');
77
+ await link(url, opts);
78
+ });
79
+ program
80
+ .command('unlink')
81
+ .description('Remove a connection to a shared brain')
82
+ .argument('<name>', 'Connection name')
83
+ .option('--path <path>', 'Local brain data path')
84
+ .action(async (name, opts) => {
85
+ const { unlink } = await import('./link.js');
86
+ await unlink(name, opts);
87
+ });
88
+ program
89
+ .command('connections')
90
+ .description('List connected brains with health status')
91
+ .option('--path <path>', 'Local brain data path')
92
+ .action(async (opts) => {
93
+ const { connections } = await import('./link.js');
94
+ await connections(opts);
95
+ });
57
96
  program.parse();
58
97
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAElF,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,MAAM,GAAG;;;;;;kCAMmB,CAAC;AAEnC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,qDAAqD,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,CAAC;AAEzJ,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,WAAW,CAAC;KACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iCAAiC,CAAC;KAC9C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,IAAkC,EAAE,EAAE;IAC7E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,SAAS,CAAC;KACtB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;IACzC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,QAAQ,CAAC,UAAU,EAAE,uDAAuD,CAAC;KAC7E,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;KAC9B,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,GAAuB,EAAE,IAAwB,EAAE,EAAE;IAClF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oBAAoB,CAAC;KACjC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAmBA,wBAAsB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,iBAwLhF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAmBA,wBAAsB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,iBAoMhF"}
package/dist/cli/init.js CHANGED
@@ -51,6 +51,14 @@ export async function init(pathArg, flags) {
51
51
  message: 'Access token (leave default to auto-generate)',
52
52
  initialValue: generateToken(),
53
53
  }),
54
+ brainType: () => p.select({
55
+ message: 'Brain type?',
56
+ options: [
57
+ { value: 'personal', label: 'Personal — Your own brain' },
58
+ { value: 'shared', label: 'Shared — Team brain (issues per-user API keys)' },
59
+ ],
60
+ initialValue: 'personal',
61
+ }),
54
62
  agentName: () => p.text({
55
63
  message: "What's my name? (your AI's identity)",
56
64
  initialValue: 'dBrain',
@@ -83,6 +91,9 @@ export async function init(pathArg, flags) {
83
91
  port,
84
92
  host: answers.host,
85
93
  token: answers.token,
94
+ brainName: answers.agentName,
95
+ brainType: answers.brainType,
96
+ connections: [],
86
97
  tiers: { hotDays: 7, hotMinAccess: 10, warmDays: 30 },
87
98
  };
88
99
  const s = p.spinner();
@@ -142,6 +153,8 @@ function initNonInteractive(pathArg) {
142
153
  const host = process.env.DBRAIN_HOST || '0.0.0.0';
143
154
  const token = process.env.DBRAIN_TOKEN || generateToken();
144
155
  const agentName = process.env.DBRAIN_AGENT_NAME || 'dBrain';
156
+ const brainName = process.env.DBRAIN_BRAIN_NAME || agentName;
157
+ const brainType = (process.env.DBRAIN_BRAIN_TYPE || 'personal');
145
158
  const ownerName = process.env.DBRAIN_OWNER_NAME || 'Human';
146
159
  const ownerTimezone = process.env.DBRAIN_TIMEZONE || Intl.DateTimeFormat().resolvedOptions().timeZone;
147
160
  if (existsSync(join(dataPath, 'config.json'))) {
@@ -153,6 +166,9 @@ function initNonInteractive(pathArg) {
153
166
  port,
154
167
  host,
155
168
  token,
169
+ brainName,
170
+ brainType,
171
+ connections: [],
156
172
  tiers: { hotDays: 7, hotMinAccess: 10, warmDays: 30 },
157
173
  };
158
174
  mkdirSync(dataPath, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface KeysOptions {
2
+ url?: string;
3
+ token?: string;
4
+ userId?: string;
5
+ userName?: string;
6
+ permissions?: string;
7
+ keyId?: string;
8
+ }
9
+ export declare function keys(action: string, opts: KeysOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/cli/keys.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,iBA2F3D"}
@@ -0,0 +1,85 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ async function apiCall(url, token, method, path, body) {
4
+ const headers = { Authorization: `Bearer ${token}` };
5
+ if (body)
6
+ headers['Content-Type'] = 'application/json';
7
+ const res = await fetch(`${url}${path}`, {
8
+ method,
9
+ headers,
10
+ body: body ? JSON.stringify(body) : undefined,
11
+ });
12
+ const data = await res.json();
13
+ return { ok: res.ok, status: res.status, data };
14
+ }
15
+ export async function keys(action, opts) {
16
+ const url = opts.url || process.env.DBRAIN_URL;
17
+ const token = opts.token || process.env.DBRAIN_TOKEN;
18
+ if (!url || !token) {
19
+ p.log.error(`${pc.red('Missing --url and --token (or DBRAIN_URL / DBRAIN_TOKEN env vars)')}`);
20
+ process.exit(1);
21
+ }
22
+ if (action === 'create') {
23
+ const userId = opts.userId;
24
+ const userName = opts.userName;
25
+ if (!userId || !userName) {
26
+ p.log.error(`${pc.red('--user-id and --user-name are required for create')}`);
27
+ process.exit(1);
28
+ }
29
+ const { ok, data } = await apiCall(url, token, 'POST', '/keys', {
30
+ userId,
31
+ userName,
32
+ permissions: opts.permissions || 'read+write',
33
+ });
34
+ if (!ok) {
35
+ p.log.error(`${pc.red('Failed to create key:')} ${JSON.stringify(data)}`);
36
+ process.exit(1);
37
+ }
38
+ const key = data;
39
+ p.log.success(`${pc.green('Key created')}`);
40
+ p.note([
41
+ `ID: ${pc.dim(key.id)}`,
42
+ `User: ${pc.green(userName)} (${userId})`,
43
+ `Permissions: ${pc.green(key.permissions)}`,
44
+ `Token: ${pc.green(key.token)}`,
45
+ ``,
46
+ `${pc.dim('Save this token — it will not be shown again.')}`,
47
+ ].join('\n'), 'API Key');
48
+ }
49
+ else if (action === 'list') {
50
+ const { ok, data } = await apiCall(url, token, 'GET', '/keys');
51
+ if (!ok) {
52
+ p.log.error(`${pc.red('Failed to list keys:')} ${JSON.stringify(data)}`);
53
+ process.exit(1);
54
+ }
55
+ const keys = data;
56
+ if (keys.length === 0) {
57
+ p.log.info('No API keys found.');
58
+ return;
59
+ }
60
+ p.log.info(`${pc.bold(`${keys.length} key(s)`)}\n`);
61
+ for (const k of keys) {
62
+ const status = k.status === 'active' ? pc.green('active') : pc.red('revoked');
63
+ const lastUsed = k.lastUsed ? pc.dim(k.lastUsed) : pc.dim('never');
64
+ console.log(` ${pc.dim(k.id)} ${k.userName} (${k.userId}) ${k.permissions} ${status} last: ${lastUsed} ${pc.dim(k.tokenPreview)}`);
65
+ }
66
+ }
67
+ else if (action === 'revoke') {
68
+ const keyId = opts.keyId;
69
+ if (!keyId) {
70
+ p.log.error(`${pc.red('--key-id is required for revoke')}`);
71
+ process.exit(1);
72
+ }
73
+ const { ok, data } = await apiCall(url, token, 'DELETE', `/keys/${keyId}`);
74
+ if (!ok) {
75
+ p.log.error(`${pc.red('Failed to revoke key:')} ${JSON.stringify(data)}`);
76
+ process.exit(1);
77
+ }
78
+ p.log.success(`${pc.green('Key revoked:')} ${keyId}`);
79
+ }
80
+ else {
81
+ p.log.error(`${pc.red(`Unknown action: ${action}. Use create, list, or revoke.`)}`);
82
+ process.exit(1);
83
+ }
84
+ }
85
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/cli/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare function link(url: string, opts: {
2
+ path?: string;
3
+ token?: string;
4
+ name?: string;
5
+ }): Promise<void>;
6
+ export declare function unlink(name: string, opts: {
7
+ path?: string;
8
+ }): Promise<void>;
9
+ export declare function connections(opts: {
10
+ path?: string;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/cli/link.ts"],"names":[],"mappings":"AAoBA,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBA4D7F;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBAoBjE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBAmCxD"}
@@ -0,0 +1,118 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join, resolve } from 'node:path';
4
+ import * as p from '@clack/prompts';
5
+ import pc from 'picocolors';
6
+ import { loadConfig } from '../core/config.js';
7
+ function configPath(dataPath) {
8
+ return join(dataPath, 'config.json');
9
+ }
10
+ function saveConnections(dataPath, connections) {
11
+ const raw = JSON.parse(readFileSync(configPath(dataPath), 'utf-8'));
12
+ raw.connections = connections;
13
+ writeFileSync(configPath(dataPath), JSON.stringify(raw, null, 2) + '\n');
14
+ }
15
+ export async function link(url, opts) {
16
+ const dataPath = resolve(opts.path || join(homedir(), '.dbrain'));
17
+ let config;
18
+ try {
19
+ config = loadConfig(dataPath);
20
+ }
21
+ catch {
22
+ p.log.error(`${pc.red('No brain found.')} Run ${pc.bold('dbrain init')} first.`);
23
+ process.exit(1);
24
+ }
25
+ if (config.brainType === 'shared') {
26
+ p.log.error(`${pc.red('Shared brains cannot connect to other brains.')}`);
27
+ process.exit(1);
28
+ }
29
+ const token = opts.token;
30
+ if (!token) {
31
+ p.log.error(`${pc.red('--token is required')}`);
32
+ process.exit(1);
33
+ }
34
+ p.log.step(`Connecting to ${pc.blue(url)}...`);
35
+ let health;
36
+ try {
37
+ const res = await fetch(`${url}/health`, {
38
+ headers: { Authorization: `Bearer ${token}` },
39
+ });
40
+ if (!res.ok)
41
+ throw new Error(`HTTP ${res.status}`);
42
+ health = (await res.json());
43
+ }
44
+ catch (err) {
45
+ p.log.error(`${pc.red('Cannot reach brain:')} ${err.message}`);
46
+ process.exit(1);
47
+ }
48
+ if (health.brainType !== 'shared') {
49
+ p.log.error(`${pc.red('Target brain is not shared.')} Only personal → shared connections are allowed.`);
50
+ process.exit(1);
51
+ }
52
+ const name = opts.name || health.name || new URL(url).hostname;
53
+ const existing = config.connections.find((c) => c.url === url);
54
+ if (existing) {
55
+ p.log.warn(`${pc.yellow('Already linked to')} ${pc.bold(existing.name)} at ${url}`);
56
+ process.exit(0);
57
+ }
58
+ const connections = [...config.connections, { name, url, token }];
59
+ saveConnections(dataPath, connections);
60
+ p.log.success(`${pc.green('Linked to')} ${pc.bold(name)}`);
61
+ p.note([`Name: ${pc.green(name)}`, `URL: ${pc.dim(url)}`, `Type: ${pc.green('shared')}`].join('\n'), 'Connection');
62
+ }
63
+ export async function unlink(name, opts) {
64
+ const dataPath = resolve(opts.path || join(homedir(), '.dbrain'));
65
+ let config;
66
+ try {
67
+ config = loadConfig(dataPath);
68
+ }
69
+ catch {
70
+ p.log.error(`${pc.red('No brain found.')} Run ${pc.bold('dbrain init')} first.`);
71
+ process.exit(1);
72
+ }
73
+ const idx = config.connections.findIndex((c) => c.name === name);
74
+ if (idx === -1) {
75
+ p.log.error(`${pc.red(`Connection "${name}" not found.`)}`);
76
+ process.exit(1);
77
+ }
78
+ const connections = config.connections.filter((_, i) => i !== idx);
79
+ saveConnections(dataPath, connections);
80
+ p.log.success(`${pc.green('Unlinked')} ${pc.bold(name)}`);
81
+ }
82
+ export async function connections(opts) {
83
+ const dataPath = resolve(opts.path || join(homedir(), '.dbrain'));
84
+ let config;
85
+ try {
86
+ config = loadConfig(dataPath);
87
+ }
88
+ catch {
89
+ p.log.error(`${pc.red('No brain found.')} Run ${pc.bold('dbrain init')} first.`);
90
+ process.exit(1);
91
+ }
92
+ if (config.connections.length === 0) {
93
+ p.log.info('No connections. Use `dbrain link` to connect to a shared brain.');
94
+ return;
95
+ }
96
+ p.log.info(`${pc.bold(`${config.connections.length} connection(s)`)}\n`);
97
+ for (const conn of config.connections) {
98
+ let status = pc.dim('checking...');
99
+ try {
100
+ const res = await fetch(`${conn.url}/health`, {
101
+ headers: { Authorization: `Bearer ${conn.token}` },
102
+ signal: AbortSignal.timeout(3000),
103
+ });
104
+ if (res.ok) {
105
+ const h = (await res.json());
106
+ status = `${pc.green('online')} ${h.entities} entities, ${h.facts} facts`;
107
+ }
108
+ else {
109
+ status = pc.red(`error (${res.status})`);
110
+ }
111
+ }
112
+ catch {
113
+ status = pc.red('offline');
114
+ }
115
+ console.log(` ${pc.bold(conn.name)} ${pc.dim(conn.url)} ${status}`);
116
+ }
117
+ }
118
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/cli/link.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,25 @@
1
1
  import { z } from 'zod';
2
+ export declare const ConnectionSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ url: z.ZodString;
5
+ token: z.ZodString;
6
+ }, z.core.$strip>;
7
+ export type Connection = z.infer<typeof ConnectionSchema>;
2
8
  export declare const ConfigSchema: z.ZodObject<{
3
9
  dataPath: z.ZodString;
4
10
  port: z.ZodDefault<z.ZodNumber>;
5
11
  host: z.ZodDefault<z.ZodString>;
6
12
  token: z.ZodString;
13
+ brainName: z.ZodOptional<z.ZodString>;
14
+ brainType: z.ZodDefault<z.ZodEnum<{
15
+ personal: "personal";
16
+ shared: "shared";
17
+ }>>;
18
+ connections: z.ZodDefault<z.ZodArray<z.ZodObject<{
19
+ name: z.ZodString;
20
+ url: z.ZodString;
21
+ token: z.ZodString;
22
+ }, z.core.$strip>>>;
7
23
  tiers: z.ZodDefault<z.ZodObject<{
8
24
  hotDays: z.ZodDefault<z.ZodNumber>;
9
25
  hotMinAccess: z.ZodDefault<z.ZodNumber>;
@@ -12,4 +28,5 @@ export declare const ConfigSchema: z.ZodObject<{
12
28
  }, z.core.$strip>;
13
29
  export type Config = z.infer<typeof ConfigSchema>;
14
30
  export declare function loadConfig(dataPath: string): Config;
31
+ export declare function loadConnections(dataPath: string): Connection[];
15
32
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;;;;iBAYvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMnD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;iBAevB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CASnD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAK9D"}
@@ -1,11 +1,20 @@
1
1
  import { readFileSync, existsSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { z } from 'zod';
4
+ // Connections only go personal → shared. No chaining.
5
+ export const ConnectionSchema = z.object({
6
+ name: z.string(),
7
+ url: z.string(),
8
+ token: z.string(),
9
+ });
4
10
  export const ConfigSchema = z.object({
5
11
  dataPath: z.string(),
6
12
  port: z.number().default(7878),
7
13
  host: z.string().default('0.0.0.0'),
8
14
  token: z.string(),
15
+ brainName: z.string().optional(),
16
+ brainType: z.enum(['personal', 'shared']).default('personal'),
17
+ connections: z.array(ConnectionSchema).default([]),
9
18
  tiers: z
10
19
  .object({
11
20
  hotDays: z.number().default(7),
@@ -19,6 +28,18 @@ export function loadConfig(dataPath) {
19
28
  if (!existsSync(configPath)) {
20
29
  throw new Error(`Config not found at ${configPath}. Run 'dbrain init' first.`);
21
30
  }
22
- return ConfigSchema.parse(JSON.parse(readFileSync(configPath, 'utf-8')));
31
+ const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
32
+ if (process.env.DBRAIN_BRAIN_NAME)
33
+ raw.brainName = process.env.DBRAIN_BRAIN_NAME;
34
+ if (process.env.DBRAIN_BRAIN_TYPE)
35
+ raw.brainType = process.env.DBRAIN_BRAIN_TYPE;
36
+ return ConfigSchema.parse(raw);
37
+ }
38
+ export function loadConnections(dataPath) {
39
+ const configPath = join(dataPath, 'config.json');
40
+ if (!existsSync(configPath))
41
+ return [];
42
+ const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
43
+ return ConfigSchema.parse(raw).connections;
23
44
  }
24
45
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACjC,CAAC;SACD,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;CAC3D,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,4BAA4B,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACjC,CAAC;SACD,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;CAC3D,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,4BAA4B,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACjF,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACjF,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { DBrainClient } from '@dtoolkit/sdk';
2
+ import type { Connection } from './config.js';
3
+ export declare function getConnection(connections: Connection[], name?: string): DBrainClient | null;
4
+ export declare function getAllConnections(connections: Connection[]): Array<{
5
+ name: string;
6
+ client: DBrainClient;
7
+ }>;
8
+ export declare function clearCache(): void;
9
+ //# sourceMappingURL=connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../src/core/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,wBAAgB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAW3F;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,UAAU,EAAE,GACxB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC,CAK/C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}