@botmem/cli 0.1.0
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/dist/cli.d.ts +2 -0
- package/dist/cli.js +512 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +238 -0
- package/dist/client.js +233 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/agent.d.ts +5 -0
- package/dist/commands/agent.js +102 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/contacts.d.ts +3 -0
- package/dist/commands/contacts.js +63 -0
- package/dist/commands/contacts.js.map +1 -0
- package/dist/commands/entities.d.ts +5 -0
- package/dist/commands/entities.js +161 -0
- package/dist/commands/entities.js.map +1 -0
- package/dist/commands/jobs.d.ts +5 -0
- package/dist/commands/jobs.js +58 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/memories.d.ts +4 -0
- package/dist/commands/memories.js +64 -0
- package/dist/commands/memories.js.map +1 -0
- package/dist/commands/memory-banks.d.ts +3 -0
- package/dist/commands/memory-banks.js +85 -0
- package/dist/commands/memory-banks.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.js +98 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/timeline.d.ts +3 -0
- package/dist/commands/timeline.js +76 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.js +21 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/format.d.ts +123 -0
- package/dist/format.js +364 -0
- package/dist/format.js.map +1 -0
- package/package.json +37 -0
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const fs_1 = require("fs");
|
|
38
|
+
const path_1 = require("path");
|
|
39
|
+
const os_1 = require("os");
|
|
40
|
+
const client_js_1 = require("./client.js");
|
|
41
|
+
const format_js_1 = require("./format.js");
|
|
42
|
+
const search_js_1 = require("./commands/search.js");
|
|
43
|
+
const memories_js_1 = require("./commands/memories.js");
|
|
44
|
+
const contacts_js_1 = require("./commands/contacts.js");
|
|
45
|
+
const jobs_js_1 = require("./commands/jobs.js");
|
|
46
|
+
const timeline_js_1 = require("./commands/timeline.js");
|
|
47
|
+
const entities_js_1 = require("./commands/entities.js");
|
|
48
|
+
const version_js_1 = require("./commands/version.js");
|
|
49
|
+
const agent_js_1 = require("./commands/agent.js");
|
|
50
|
+
const memory_banks_js_1 = require("./commands/memory-banks.js");
|
|
51
|
+
const DEFAULT_API_URL = 'https://api.botmem.xyz/api';
|
|
52
|
+
const CONFIG_DIR = (0, path_1.join)((0, os_1.homedir)(), '.botmem');
|
|
53
|
+
const CONFIG_FILE = (0, path_1.join)(CONFIG_DIR, 'config.json');
|
|
54
|
+
function loadConfig() {
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse((0, fs_1.readFileSync)(CONFIG_FILE, 'utf-8'));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function saveConfig(cfg) {
|
|
63
|
+
(0, fs_1.mkdirSync)(CONFIG_DIR, { recursive: true });
|
|
64
|
+
(0, fs_1.writeFileSync)(CONFIG_FILE, JSON.stringify(cfg, null, 2), { mode: 0o600 });
|
|
65
|
+
}
|
|
66
|
+
function loadStoredToken() {
|
|
67
|
+
const cfg = loadConfig();
|
|
68
|
+
return cfg.apiKey || cfg.token || null;
|
|
69
|
+
}
|
|
70
|
+
function storeToken(token) {
|
|
71
|
+
const cfg = loadConfig();
|
|
72
|
+
cfg.token = token;
|
|
73
|
+
saveConfig(cfg);
|
|
74
|
+
}
|
|
75
|
+
const HELP = `
|
|
76
|
+
botmem -- Query and manage your personal memory system
|
|
77
|
+
|
|
78
|
+
USAGE
|
|
79
|
+
botmem <command> [options]
|
|
80
|
+
|
|
81
|
+
COMMANDS
|
|
82
|
+
login Authenticate and store token
|
|
83
|
+
search <query> Search memories semantically
|
|
84
|
+
ask <query> Natural language query (agent)
|
|
85
|
+
context <contactId> Full contact context (agent)
|
|
86
|
+
timeline Query memories by time range
|
|
87
|
+
related <id> Find memories related to a given memory
|
|
88
|
+
entities search <q> Search extracted entities (people, orgs, topics)
|
|
89
|
+
entities graph <value> Show entity graph with relationships
|
|
90
|
+
memories List recent memories
|
|
91
|
+
memory <id> Get or delete a memory
|
|
92
|
+
memory-banks Manage memory banks (list/create/rename/delete)
|
|
93
|
+
stats Memory count breakdown by source/connector
|
|
94
|
+
contacts List contacts
|
|
95
|
+
contacts search <query> Search contacts by name/email/phone
|
|
96
|
+
contact <id> Get contact details or their memories
|
|
97
|
+
status Dashboard overview (memories, pipeline, connectors)
|
|
98
|
+
version Show API build info and uptime
|
|
99
|
+
jobs List sync/pipeline jobs
|
|
100
|
+
sync <accountId> Trigger a connector sync
|
|
101
|
+
retry Retry all failed jobs and memories
|
|
102
|
+
accounts List connected accounts
|
|
103
|
+
|
|
104
|
+
SETUP
|
|
105
|
+
botmem config set-host <url> Set API host (e.g. localhost:12412, api.botmem.xyz)
|
|
106
|
+
botmem config set-key <key> Store an API key (bm_sk_...)
|
|
107
|
+
botmem config set-recovery-key <key> Store recovery key for E2EE
|
|
108
|
+
botmem config show Show current config
|
|
109
|
+
botmem login Log in with email/password and store JWT
|
|
110
|
+
|
|
111
|
+
GLOBAL OPTIONS
|
|
112
|
+
--api-key <key> API key (env: BOTMEM_API_KEY) — preferred for agents
|
|
113
|
+
--token <jwt> JWT token (env: BOTMEM_TOKEN) — from email/password login
|
|
114
|
+
--api-url <url> API base URL override (env: BOTMEM_API_URL, default: https://api.botmem.xyz/api)
|
|
115
|
+
--json Output raw JSON (for piping to jq or scripts)
|
|
116
|
+
--toon Tool-optimized output: flattened JSON for LLM agents
|
|
117
|
+
-h, --help Show help (use with any command for details)
|
|
118
|
+
|
|
119
|
+
EXAMPLES
|
|
120
|
+
botmem search "coffee with Ahmed last week"
|
|
121
|
+
botmem search "meeting" --connector gmail --limit 5
|
|
122
|
+
botmem contacts search "Amr"
|
|
123
|
+
botmem contact abc123 memories
|
|
124
|
+
botmem status
|
|
125
|
+
botmem sync abc123
|
|
126
|
+
botmem timeline --from 2025-01-01 --to 2025-01-31
|
|
127
|
+
botmem related abc123-def456
|
|
128
|
+
botmem entities search "Assad"
|
|
129
|
+
botmem ask "what did Ahmed say?" --json
|
|
130
|
+
botmem memory-banks
|
|
131
|
+
botmem search "project update" --json | jq '.[].text'
|
|
132
|
+
`.trim();
|
|
133
|
+
const COMMAND_HELP = {
|
|
134
|
+
search: search_js_1.searchHelp,
|
|
135
|
+
ask: agent_js_1.askHelp,
|
|
136
|
+
context: agent_js_1.contextHelp,
|
|
137
|
+
version: version_js_1.versionHelp,
|
|
138
|
+
'memory-banks': memory_banks_js_1.memoryBanksHelp,
|
|
139
|
+
timeline: timeline_js_1.timelineHelp,
|
|
140
|
+
related: entities_js_1.relatedHelp,
|
|
141
|
+
entities: entities_js_1.entitiesHelp,
|
|
142
|
+
memories: `
|
|
143
|
+
botmem memories -- List recent memories
|
|
144
|
+
|
|
145
|
+
USAGE
|
|
146
|
+
botmem memories [options]
|
|
147
|
+
|
|
148
|
+
OPTIONS
|
|
149
|
+
--limit <n> Max results (default: 50)
|
|
150
|
+
--offset <n> Skip first N results
|
|
151
|
+
--source <type> Filter by source (email, message, photo, location)
|
|
152
|
+
--connector <type> Filter by connector (gmail, slack, whatsapp, imessage, locations)
|
|
153
|
+
--json Output raw JSON
|
|
154
|
+
`.trim(),
|
|
155
|
+
memory: `
|
|
156
|
+
botmem memory -- Get or delete a memory
|
|
157
|
+
|
|
158
|
+
USAGE
|
|
159
|
+
botmem memory <id> Get a memory by ID
|
|
160
|
+
botmem memory <id> delete Delete a memory
|
|
161
|
+
`.trim(),
|
|
162
|
+
stats: `
|
|
163
|
+
botmem stats -- Memory count breakdown
|
|
164
|
+
|
|
165
|
+
USAGE
|
|
166
|
+
botmem stats [--json]
|
|
167
|
+
`.trim(),
|
|
168
|
+
contacts: `
|
|
169
|
+
botmem contacts -- List or search contacts
|
|
170
|
+
|
|
171
|
+
USAGE
|
|
172
|
+
botmem contacts [options] List contacts
|
|
173
|
+
botmem contacts search <query> Search contacts
|
|
174
|
+
|
|
175
|
+
OPTIONS
|
|
176
|
+
--limit <n> Max results (default: 50)
|
|
177
|
+
--offset <n> Skip first N results
|
|
178
|
+
--json Output raw JSON
|
|
179
|
+
`.trim(),
|
|
180
|
+
contact: `
|
|
181
|
+
botmem contact -- Get contact details
|
|
182
|
+
|
|
183
|
+
USAGE
|
|
184
|
+
botmem contact <id> Get contact details
|
|
185
|
+
botmem contact <id> memories List contact's memories
|
|
186
|
+
`.trim(),
|
|
187
|
+
status: `
|
|
188
|
+
botmem status -- Dashboard overview
|
|
189
|
+
|
|
190
|
+
USAGE
|
|
191
|
+
botmem status [--json]
|
|
192
|
+
`.trim(),
|
|
193
|
+
jobs: `
|
|
194
|
+
botmem jobs -- List sync/pipeline jobs
|
|
195
|
+
|
|
196
|
+
USAGE
|
|
197
|
+
botmem jobs [--account <id>] [--json]
|
|
198
|
+
`.trim(),
|
|
199
|
+
sync: `
|
|
200
|
+
botmem sync -- Trigger a connector sync
|
|
201
|
+
|
|
202
|
+
USAGE
|
|
203
|
+
botmem sync <accountId>
|
|
204
|
+
`.trim(),
|
|
205
|
+
retry: `
|
|
206
|
+
botmem retry -- Retry all failed jobs and memories
|
|
207
|
+
|
|
208
|
+
USAGE
|
|
209
|
+
botmem retry [--json]
|
|
210
|
+
`.trim(),
|
|
211
|
+
accounts: `
|
|
212
|
+
botmem accounts -- List connected accounts
|
|
213
|
+
|
|
214
|
+
USAGE
|
|
215
|
+
botmem accounts [--json]
|
|
216
|
+
`.trim(),
|
|
217
|
+
};
|
|
218
|
+
function parseGlobalArgs(argv) {
|
|
219
|
+
const storedCfg = loadConfig();
|
|
220
|
+
let apiUrl = process.env['BOTMEM_API_URL'] || storedCfg.apiUrl || DEFAULT_API_URL;
|
|
221
|
+
let token = process.env['BOTMEM_API_KEY'] || process.env['BOTMEM_TOKEN'] || '';
|
|
222
|
+
let json = false;
|
|
223
|
+
let toon = false;
|
|
224
|
+
let help = false;
|
|
225
|
+
const rest = [];
|
|
226
|
+
for (let i = 0; i < argv.length; i++) {
|
|
227
|
+
const a = argv[i];
|
|
228
|
+
if (a === '--api-url') {
|
|
229
|
+
apiUrl = argv[++i];
|
|
230
|
+
}
|
|
231
|
+
else if (a === '--api-key') {
|
|
232
|
+
token = argv[++i];
|
|
233
|
+
}
|
|
234
|
+
else if (a === '--token') {
|
|
235
|
+
token = argv[++i];
|
|
236
|
+
}
|
|
237
|
+
else if (a === '--json') {
|
|
238
|
+
json = true;
|
|
239
|
+
}
|
|
240
|
+
else if (a === '--toon') {
|
|
241
|
+
toon = true;
|
|
242
|
+
json = true; // toon implies json
|
|
243
|
+
}
|
|
244
|
+
else if (a === '--help' || a === '-h') {
|
|
245
|
+
help = true;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
rest.push(a);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Resolve: explicit flag > env var > stored config
|
|
252
|
+
if (!token)
|
|
253
|
+
token = loadStoredToken() || '';
|
|
254
|
+
return { apiUrl, token, json, toon, help, rest };
|
|
255
|
+
}
|
|
256
|
+
const configHelp = `
|
|
257
|
+
botmem config -- Manage CLI configuration
|
|
258
|
+
|
|
259
|
+
USAGE
|
|
260
|
+
botmem config show Show current config
|
|
261
|
+
botmem config set-host <url> Set API host (e.g. localhost:12412, api.botmem.xyz)
|
|
262
|
+
botmem config set-key <key> Store API key (bm_sk_...)
|
|
263
|
+
botmem config set-recovery-key <k> Store recovery key for E2EE
|
|
264
|
+
botmem config clear Reset config to defaults
|
|
265
|
+
|
|
266
|
+
EXAMPLES
|
|
267
|
+
botmem config set-host localhost:12412
|
|
268
|
+
botmem config set-host api.botmem.xyz
|
|
269
|
+
botmem config set-key bm_sk_abc123def456
|
|
270
|
+
botmem config set-recovery-key oasULlqb...
|
|
271
|
+
botmem config show
|
|
272
|
+
`.trim();
|
|
273
|
+
function runConfig(args) {
|
|
274
|
+
const sub = args[0];
|
|
275
|
+
if (sub === 'show' || !sub) {
|
|
276
|
+
const cfg = loadConfig();
|
|
277
|
+
console.log(`Config: ${CONFIG_FILE}`);
|
|
278
|
+
console.log(` Host: ${cfg.apiUrl || DEFAULT_API_URL} ${!cfg.apiUrl ? '(default)' : ''}`);
|
|
279
|
+
console.log(` API Key: ${cfg.apiKey ? cfg.apiKey.slice(0, 10) + '...' + cfg.apiKey.slice(-4) : '(not set)'}`);
|
|
280
|
+
console.log(` Token: ${cfg.token ? '(set)' : '(not set)'}`);
|
|
281
|
+
console.log(` Recovery Key: ${cfg.recoveryKey ? '(set)' : '(not set)'}`);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if (sub === 'set-host') {
|
|
285
|
+
let host = args[1];
|
|
286
|
+
if (!host) {
|
|
287
|
+
console.error('Error: set-host requires a URL\n');
|
|
288
|
+
console.log(configHelp);
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}
|
|
291
|
+
// Normalize: add https:// if no scheme, add /api suffix if missing
|
|
292
|
+
if (!host.startsWith('http://') && !host.startsWith('https://')) {
|
|
293
|
+
// localhost or 127.0.0.1 → http, everything else → https
|
|
294
|
+
const isLocal = host.startsWith('localhost') || host.startsWith('127.0.0.1');
|
|
295
|
+
host = `${isLocal ? 'http' : 'https'}://${host}`;
|
|
296
|
+
}
|
|
297
|
+
if (!host.endsWith('/api')) {
|
|
298
|
+
host = host.replace(/\/+$/, '') + '/api';
|
|
299
|
+
}
|
|
300
|
+
const cfg = loadConfig();
|
|
301
|
+
cfg.apiUrl = host;
|
|
302
|
+
saveConfig(cfg);
|
|
303
|
+
console.log(`API URL set to ${host}`);
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (sub === 'set-key') {
|
|
307
|
+
const key = args[1];
|
|
308
|
+
if (!key) {
|
|
309
|
+
console.error('Error: set-key requires an API key\n');
|
|
310
|
+
console.log(configHelp);
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
const cfg = loadConfig();
|
|
314
|
+
cfg.apiKey = key;
|
|
315
|
+
saveConfig(cfg);
|
|
316
|
+
console.log(`API key stored (${key.slice(0, 10)}...${key.slice(-4)})`);
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
if (sub === 'set-recovery-key') {
|
|
320
|
+
const key = args[1];
|
|
321
|
+
if (!key) {
|
|
322
|
+
console.error('Error: set-recovery-key requires a recovery key\n');
|
|
323
|
+
console.log(configHelp);
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
const cfg = loadConfig();
|
|
327
|
+
cfg.recoveryKey = key;
|
|
328
|
+
saveConfig(cfg);
|
|
329
|
+
console.log('Recovery key stored');
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
if (sub === 'clear') {
|
|
333
|
+
saveConfig({});
|
|
334
|
+
console.log('Config cleared');
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
console.error(`Unknown config command: ${sub}\n`);
|
|
338
|
+
console.log(configHelp);
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
async function runStatus(client, json) {
|
|
342
|
+
const [stats, queues, { accounts }] = await Promise.all([
|
|
343
|
+
client.getMemoryStats(),
|
|
344
|
+
client.getQueueStats(),
|
|
345
|
+
client.listAccounts(),
|
|
346
|
+
]);
|
|
347
|
+
if (json) {
|
|
348
|
+
console.log(JSON.stringify({ stats, queues, accounts }, null, 2));
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
console.log((0, format_js_1.formatStatus)(stats, queues, accounts));
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
async function runLogin(client, args) {
|
|
355
|
+
// Accept email/password as positional args or prompt-style from env
|
|
356
|
+
let email = args[0] || process.env['BOTMEM_EMAIL'] || '';
|
|
357
|
+
let password = args[1] || process.env['BOTMEM_PASSWORD'] || '';
|
|
358
|
+
if (!email || !password) {
|
|
359
|
+
// Read from stdin if not provided
|
|
360
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
361
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
362
|
+
const ask = (q) => new Promise(r => rl.question(q, r));
|
|
363
|
+
if (!email)
|
|
364
|
+
email = await ask('Email: ');
|
|
365
|
+
if (!password)
|
|
366
|
+
password = await ask('Password: ');
|
|
367
|
+
rl.close();
|
|
368
|
+
}
|
|
369
|
+
const result = await client.login(email, password);
|
|
370
|
+
storeToken(result.accessToken);
|
|
371
|
+
console.log(`Logged in as ${result.user.name} (${result.user.email})`);
|
|
372
|
+
console.log(`Token stored in ${CONFIG_FILE}`);
|
|
373
|
+
}
|
|
374
|
+
async function main() {
|
|
375
|
+
const argv = process.argv.slice(2);
|
|
376
|
+
const { apiUrl, token, json, toon, help, rest } = parseGlobalArgs(argv);
|
|
377
|
+
// --toon: intercept JSON output and flatten for LLM consumption
|
|
378
|
+
if (toon) {
|
|
379
|
+
const origLog = console.log.bind(console);
|
|
380
|
+
console.log = (...args) => {
|
|
381
|
+
if (args.length === 1 && typeof args[0] === 'string') {
|
|
382
|
+
try {
|
|
383
|
+
const parsed = JSON.parse(args[0]);
|
|
384
|
+
origLog((0, format_js_1.toonify)(parsed));
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
catch { /* not JSON, pass through */ }
|
|
388
|
+
}
|
|
389
|
+
origLog(...args);
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
const command = rest[0];
|
|
393
|
+
const commandArgs = rest.slice(1);
|
|
394
|
+
if (help && !command) {
|
|
395
|
+
console.log(HELP);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (help && command && COMMAND_HELP[command]) {
|
|
399
|
+
console.log(COMMAND_HELP[command]);
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
if (!command) {
|
|
403
|
+
console.log(HELP);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
const client = new client_js_1.BotmemClient(apiUrl);
|
|
407
|
+
if (token)
|
|
408
|
+
client.setToken(token);
|
|
409
|
+
// Auto-submit recovery key if stored (needed for E2EE decryption)
|
|
410
|
+
const storedCfg = loadConfig();
|
|
411
|
+
if (token && storedCfg.recoveryKey) {
|
|
412
|
+
try {
|
|
413
|
+
await client.submitRecoveryKey(storedCfg.recoveryKey);
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
// Non-fatal — key may already be cached server-side
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
try {
|
|
420
|
+
switch (command) {
|
|
421
|
+
case 'config':
|
|
422
|
+
if (help) {
|
|
423
|
+
console.log(configHelp);
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
runConfig(commandArgs);
|
|
427
|
+
return;
|
|
428
|
+
case 'login':
|
|
429
|
+
await runLogin(client, commandArgs);
|
|
430
|
+
return;
|
|
431
|
+
case 'version':
|
|
432
|
+
await (0, version_js_1.runVersion)(client, json);
|
|
433
|
+
break;
|
|
434
|
+
case 'ask':
|
|
435
|
+
await (0, agent_js_1.runAsk)(client, commandArgs, json);
|
|
436
|
+
break;
|
|
437
|
+
case 'context':
|
|
438
|
+
await (0, agent_js_1.runContext)(client, commandArgs, json);
|
|
439
|
+
break;
|
|
440
|
+
case 'memory-banks':
|
|
441
|
+
await (0, memory_banks_js_1.runMemoryBanks)(client, commandArgs, json);
|
|
442
|
+
break;
|
|
443
|
+
case 'search':
|
|
444
|
+
if (help) {
|
|
445
|
+
console.log(COMMAND_HELP['search']);
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
await (0, search_js_1.runSearch)(client, commandArgs, json);
|
|
449
|
+
break;
|
|
450
|
+
case 'memories':
|
|
451
|
+
await (0, memories_js_1.runMemories)(client, commandArgs, json);
|
|
452
|
+
break;
|
|
453
|
+
case 'memory':
|
|
454
|
+
await (0, memories_js_1.runMemory)(client, commandArgs, json);
|
|
455
|
+
break;
|
|
456
|
+
case 'stats':
|
|
457
|
+
await (0, memories_js_1.runStats)(client, json);
|
|
458
|
+
break;
|
|
459
|
+
case 'contacts':
|
|
460
|
+
await (0, contacts_js_1.runContacts)(client, commandArgs, json);
|
|
461
|
+
break;
|
|
462
|
+
case 'contact':
|
|
463
|
+
await (0, contacts_js_1.runContact)(client, commandArgs, json);
|
|
464
|
+
break;
|
|
465
|
+
case 'status':
|
|
466
|
+
await runStatus(client, json);
|
|
467
|
+
break;
|
|
468
|
+
case 'jobs':
|
|
469
|
+
await (0, jobs_js_1.runJobs)(client, commandArgs, json);
|
|
470
|
+
break;
|
|
471
|
+
case 'sync':
|
|
472
|
+
await (0, jobs_js_1.runSync)(client, commandArgs, json);
|
|
473
|
+
break;
|
|
474
|
+
case 'retry':
|
|
475
|
+
await (0, jobs_js_1.runRetry)(client, json);
|
|
476
|
+
break;
|
|
477
|
+
case 'accounts':
|
|
478
|
+
await (0, jobs_js_1.runAccounts)(client, json);
|
|
479
|
+
break;
|
|
480
|
+
case 'timeline':
|
|
481
|
+
await (0, timeline_js_1.runTimeline)(client, commandArgs, json);
|
|
482
|
+
break;
|
|
483
|
+
case 'related':
|
|
484
|
+
await (0, entities_js_1.runRelated)(client, commandArgs, json);
|
|
485
|
+
break;
|
|
486
|
+
case 'entities':
|
|
487
|
+
await (0, entities_js_1.runEntities)(client, commandArgs, json);
|
|
488
|
+
break;
|
|
489
|
+
default:
|
|
490
|
+
console.error(`Unknown command: ${command}\n`);
|
|
491
|
+
console.log(HELP);
|
|
492
|
+
process.exit(1);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
catch (err) {
|
|
496
|
+
if (err instanceof client_js_1.BotmemApiError) {
|
|
497
|
+
if (err.status === 0) {
|
|
498
|
+
console.error(`Error: Cannot connect to Botmem API at ${apiUrl}`);
|
|
499
|
+
console.error('Make sure the API server is running (pnpm dev)');
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
console.error(`Error: API returned ${err.status} — ${err.message}`);
|
|
503
|
+
if (err.body)
|
|
504
|
+
console.error(JSON.stringify(err.body, null, 2));
|
|
505
|
+
}
|
|
506
|
+
process.exit(1);
|
|
507
|
+
}
|
|
508
|
+
throw err;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
main();
|
|
512
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|