@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.
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.relatedHelp = exports.entitiesHelp = void 0;
4
+ exports.runEntities = runEntities;
5
+ exports.runRelated = runRelated;
6
+ const format_js_1 = require("../format.js");
7
+ exports.entitiesHelp = `
8
+ ${(0, format_js_1.bold)('botmem entities')} -- Search and explore extracted entities
9
+
10
+ USAGE
11
+ botmem entities search <query> Search entities (people, orgs, topics)
12
+ botmem entities graph <value> Show entity graph (memories + relationships)
13
+
14
+ OPTIONS
15
+ --limit <n> Max results (default: 50)
16
+ --type <type> Filter by entity type (comma-separated, e.g. pet,person)
17
+ --json Output raw JSON
18
+
19
+ EXAMPLES
20
+ botmem entities search "Assad"
21
+ botmem entities search "Google" --type organization
22
+ botmem entities graph "Assad Mansoor"
23
+ botmem entities search "Google" --json
24
+ `.trim();
25
+ exports.relatedHelp = `
26
+ ${(0, format_js_1.bold)('botmem related')} -- Find memories related to a given memory
27
+
28
+ USAGE
29
+ botmem related <memory-id>
30
+
31
+ OPTIONS
32
+ --limit <n> Max results (default: 20)
33
+ --json Output raw JSON
34
+
35
+ EXAMPLES
36
+ botmem related abc123-def456
37
+ `.trim();
38
+ function truncate(text, maxLen) {
39
+ const oneLine = text.replace(/\n/g, ' ').trim();
40
+ if (oneLine.length <= maxLen)
41
+ return oneLine;
42
+ return oneLine.slice(0, maxLen - 1) + '\u2026';
43
+ }
44
+ async function runEntities(client, args, json) {
45
+ const subcommand = args[0];
46
+ const subArgs = args.slice(1);
47
+ if (!subcommand || subcommand === '--help' || subcommand === '-h') {
48
+ console.log(exports.entitiesHelp);
49
+ return;
50
+ }
51
+ let limit;
52
+ let type;
53
+ const queryParts = [];
54
+ for (let i = 0; i < subArgs.length; i++) {
55
+ if (subArgs[i] === '--limit') {
56
+ limit = parseInt(subArgs[++i], 10);
57
+ }
58
+ else if (subArgs[i] === '--type') {
59
+ type = subArgs[++i];
60
+ }
61
+ else if (!subArgs[i].startsWith('--')) {
62
+ queryParts.push(subArgs[i]);
63
+ }
64
+ }
65
+ const query = queryParts.join(' ');
66
+ switch (subcommand) {
67
+ case 'search': {
68
+ if (!query) {
69
+ console.error('Error: entities search requires a query');
70
+ process.exit(1);
71
+ }
72
+ const result = await client.searchEntities(query, limit, type);
73
+ if (json) {
74
+ console.log(JSON.stringify(result, null, 2));
75
+ return;
76
+ }
77
+ if (!result.entities.length) {
78
+ console.log((0, format_js_1.dim)('No entities found.'));
79
+ return;
80
+ }
81
+ console.log((0, format_js_1.bold)(`Found ${result.total} entities matching "${query}"`));
82
+ console.log('');
83
+ for (const e of result.entities) {
84
+ console.log(` ${(0, format_js_1.bold)(e.value)} ${(0, format_js_1.dim)(`(${e.type})`)} ${(0, format_js_1.cyan)(`${e.memoryCount} memories`)} ${(0, format_js_1.dim)(e.connectors.join(', '))}`);
85
+ }
86
+ break;
87
+ }
88
+ case 'graph': {
89
+ if (!query) {
90
+ console.error('Error: entities graph requires an entity value');
91
+ process.exit(1);
92
+ }
93
+ const result = await client.getEntityGraph(query, limit);
94
+ if (json) {
95
+ console.log(JSON.stringify(result, null, 2));
96
+ return;
97
+ }
98
+ console.log((0, format_js_1.bold)(`Entity: ${result.entity}`) + (0, format_js_1.dim)(` (${result.memoryCount} memories)`));
99
+ if (result.contacts.length) {
100
+ console.log('');
101
+ console.log((0, format_js_1.bold)('Matching Contacts:'));
102
+ for (const c of result.contacts) {
103
+ console.log(` ${c.displayName} ${(0, format_js_1.dim)(c.id)}`);
104
+ }
105
+ }
106
+ if (result.relatedEntities.length) {
107
+ console.log('');
108
+ console.log((0, format_js_1.bold)('Co-occurring Entities:'));
109
+ for (const e of result.relatedEntities.slice(0, 15)) {
110
+ console.log(` ${e.value} ${(0, format_js_1.dim)(`(${e.type})`)} ${(0, format_js_1.dim)(`×${e.count}`)}`);
111
+ }
112
+ }
113
+ if (result.memories.length) {
114
+ console.log('');
115
+ console.log((0, format_js_1.bold)('Recent Memories:'));
116
+ for (const m of result.memories.slice(0, 10)) {
117
+ console.log(` ${(0, format_js_1.dim)(m.eventTime ? new Date(m.eventTime).toLocaleDateString() : '')} ${(0, format_js_1.dim)(`[${m.sourceType}/${m.connectorType}]`)} ${truncate(m.text, 80)}`);
118
+ console.log(` ${(0, format_js_1.dim)(m.id)}`);
119
+ }
120
+ }
121
+ break;
122
+ }
123
+ default:
124
+ console.error(`Unknown entities subcommand: ${subcommand}`);
125
+ console.log(exports.entitiesHelp);
126
+ process.exit(1);
127
+ }
128
+ }
129
+ async function runRelated(client, args, json) {
130
+ const memoryId = args.find(a => !a.startsWith('--'));
131
+ if (!memoryId) {
132
+ console.error('Error: related requires a memory ID');
133
+ process.exit(1);
134
+ }
135
+ let limit;
136
+ for (let i = 0; i < args.length; i++) {
137
+ if (args[i] === '--limit')
138
+ limit = parseInt(args[++i], 10);
139
+ }
140
+ const result = await client.getRelated(memoryId, limit);
141
+ if (json) {
142
+ console.log(JSON.stringify(result, null, 2));
143
+ return;
144
+ }
145
+ if (!result.items.length) {
146
+ console.log((0, format_js_1.dim)('No related memories found.'));
147
+ return;
148
+ }
149
+ if (result.source) {
150
+ console.log((0, format_js_1.bold)('Source:') + ` ${truncate(result.source.text, 100)}`);
151
+ console.log('');
152
+ }
153
+ console.log((0, format_js_1.bold)(`${result.items.length} related memories:`));
154
+ console.log('');
155
+ for (const m of result.items) {
156
+ const rel = m.relationship === 'linked' ? (0, format_js_1.cyan)('[linked]') : m.relationship === 'similar' ? (0, format_js_1.dim)('[similar]') : (0, format_js_1.dim)('[co-participant]');
157
+ console.log(` ${rel} ${(0, format_js_1.dim)(`[${m.sourceType}/${m.connectorType}]`)} ${truncate(m.text, 90)}`);
158
+ console.log(` ${(0, format_js_1.dim)(m.id)} ${(0, format_js_1.dim)(`score: ${m.score.toFixed(3)}`)}`);
159
+ }
160
+ }
161
+ //# sourceMappingURL=entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/commands/entities.ts"],"names":[],"mappings":";;;AA0CA,kCA4EC;AAED,gCA2BC;AAlJD,4CAA+C;AAElC,QAAA,YAAY,GAAG;IACxB,IAAA,gBAAI,EAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;CAgB1B,CAAC,IAAI,EAAE,CAAC;AAEI,QAAA,WAAW,GAAG;IACvB,IAAA,gBAAI,EAAC,gBAAgB,CAAC;;;;;;;;;;;CAWzB,CAAC,IAAI,EAAE,CAAC;AAET,SAAS,QAAQ,CAAC,IAAY,EAAE,MAAc;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC;IAC7C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAa;IACnF,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE9B,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,oBAAY,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,KAAyB,CAAC;IAC9B,IAAI,IAAwB,CAAC;IAC7B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;aAChE,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAC,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;aACrD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAC1F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAE/D,IAAI,IAAI,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAEnE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,IAAA,eAAG,EAAC,oBAAoB,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,SAAS,MAAM,CAAC,KAAK,uBAAuB,KAAK,GAAG,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,gBAAI,EAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,IAAA,gBAAI,EAAC,GAAG,CAAC,CAAC,WAAW,WAAW,CAAC,KAAK,IAAA,eAAG,EAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACjI,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACjG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEzD,IAAI,IAAI,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAEnE,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAA,eAAG,EAAC,KAAK,MAAM,CAAC,WAAW,YAAY,CAAC,CAAC,CAAC;YAEzF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,oBAAoB,CAAC,CAAC,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,IAAI,IAAA,eAAG,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,wBAAwB,CAAC,CAAC,CAAC;gBAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,eAAG,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9J,OAAO,CAAC,GAAG,CAAC,cAAc,IAAA,eAAG,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;QAED;YACE,OAAO,CAAC,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,oBAAY,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAa;IAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEzF,IAAI,KAAyB,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAExD,IAAI,IAAI,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAEnE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,IAAA,eAAG,EAAC,4BAA4B,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAErF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,SAAS,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAA,gBAAI,EAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,eAAG,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAA,eAAG,EAAC,kBAAkB,CAAC,CAAC;QACvI,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,IAAA,eAAG,EAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,cAAc,IAAA,eAAG,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAA,eAAG,EAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { BotmemClient } from '../client.js';
2
+ export declare function runJobs(client: BotmemClient, args: string[], json: boolean): Promise<void>;
3
+ export declare function runSync(client: BotmemClient, args: string[], json: boolean): Promise<void>;
4
+ export declare function runRetry(client: BotmemClient, json: boolean): Promise<void>;
5
+ export declare function runAccounts(client: BotmemClient, json: boolean): Promise<void>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runJobs = runJobs;
4
+ exports.runSync = runSync;
5
+ exports.runRetry = runRetry;
6
+ exports.runAccounts = runAccounts;
7
+ const format_js_1 = require("../format.js");
8
+ async function runJobs(client, args, json) {
9
+ let accountId;
10
+ for (let i = 0; i < args.length; i++) {
11
+ if (args[i] === '--account')
12
+ accountId = args[++i];
13
+ }
14
+ const result = await client.listJobs(accountId);
15
+ if (json) {
16
+ console.log(JSON.stringify(result, null, 2));
17
+ }
18
+ else {
19
+ console.log((0, format_js_1.formatJobList)(result.jobs));
20
+ }
21
+ }
22
+ async function runSync(client, args, json) {
23
+ const accountId = args[0];
24
+ if (!accountId) {
25
+ console.error('Error: sync requires an account ID');
26
+ process.exit(1);
27
+ }
28
+ const result = await client.triggerSync(accountId);
29
+ if (json) {
30
+ console.log(JSON.stringify(result, null, 2));
31
+ }
32
+ else {
33
+ console.log(`Sync triggered. Job ID: ${result.job.id}`);
34
+ }
35
+ }
36
+ async function runRetry(client, json) {
37
+ const [jobResult, memResult] = await Promise.all([
38
+ client.retryFailedJobs(),
39
+ client.retryFailedMemories(),
40
+ ]);
41
+ if (json) {
42
+ console.log(JSON.stringify({ jobs: jobResult, memories: memResult }, null, 2));
43
+ }
44
+ else {
45
+ console.log(`Retried ${jobResult.retried} failed sync jobs.`);
46
+ console.log(`Re-enqueued ${memResult.enqueued} failed memories.`);
47
+ }
48
+ }
49
+ async function runAccounts(client, json) {
50
+ const result = await client.listAccounts();
51
+ if (json) {
52
+ console.log(JSON.stringify(result, null, 2));
53
+ }
54
+ else {
55
+ console.log((0, format_js_1.formatAccounts)(result.accounts));
56
+ }
57
+ }
58
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":";;AAGA,0BAYC;AAED,0BAaC;AAED,4BAYC;AAED,kCAOC;AApDD,4CAA6D;AAEtD,KAAK,UAAU,OAAO,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAa;IAC/E,IAAI,SAA6B,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;YAAE,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAa,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,MAAoB,EAAE,IAAc,EAAE,IAAa;IAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,MAAoB,EAAE,IAAa;IAChE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,MAAM,CAAC,eAAe,EAAE;QACxB,MAAM,CAAC,mBAAmB,EAAE;KAC7B,CAAC,CAAC;IAEH,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,OAAO,oBAAoB,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,CAAC,QAAQ,mBAAmB,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,MAAoB,EAAE,IAAa;IACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;IAC3C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,0BAAc,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BotmemClient } from '../client.js';
2
+ export declare function runMemories(client: BotmemClient, args: string[], json: boolean): Promise<void>;
3
+ export declare function runMemory(client: BotmemClient, args: string[], json: boolean): Promise<void>;
4
+ export declare function runStats(client: BotmemClient, json: boolean): Promise<void>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runMemories = runMemories;
4
+ exports.runMemory = runMemory;
5
+ exports.runStats = runStats;
6
+ const format_js_1 = require("../format.js");
7
+ async function runMemories(client, args, json) {
8
+ let limit;
9
+ let offset;
10
+ let sourceType;
11
+ let connectorType;
12
+ for (let i = 0; i < args.length; i++) {
13
+ const a = args[i];
14
+ if (a === '--limit')
15
+ limit = parseInt(args[++i], 10);
16
+ else if (a === '--offset')
17
+ offset = parseInt(args[++i], 10);
18
+ else if (a === '--source')
19
+ sourceType = args[++i];
20
+ else if (a === '--connector')
21
+ connectorType = args[++i];
22
+ }
23
+ const result = await client.listMemories({ limit, offset, connectorType, sourceType });
24
+ if (json) {
25
+ console.log(JSON.stringify(result, null, 2));
26
+ }
27
+ else {
28
+ console.log((0, format_js_1.formatMemoryList)(result.items, result.total));
29
+ }
30
+ }
31
+ async function runMemory(client, args, json) {
32
+ const id = args[0];
33
+ if (!id) {
34
+ console.error('Error: memory requires an ID');
35
+ process.exit(1);
36
+ }
37
+ if (args[1] === 'delete') {
38
+ const result = await client.deleteMemory(id);
39
+ if (json) {
40
+ console.log(JSON.stringify(result));
41
+ }
42
+ else {
43
+ console.log('Memory deleted.');
44
+ }
45
+ return;
46
+ }
47
+ const memory = await client.getMemory(id);
48
+ if (json) {
49
+ console.log(JSON.stringify(memory, null, 2));
50
+ }
51
+ else {
52
+ console.log((0, format_js_1.formatMemory)(memory));
53
+ }
54
+ }
55
+ async function runStats(client, json) {
56
+ const stats = await client.getMemoryStats();
57
+ if (json) {
58
+ console.log(JSON.stringify(stats, null, 2));
59
+ }
60
+ else {
61
+ console.log((0, format_js_1.formatStats)(stats));
62
+ }
63
+ }
64
+ //# sourceMappingURL=memories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memories.js","sourceRoot":"","sources":["../../src/commands/memories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BotmemClient } from '../client.js';
2
+ export declare const memoryBanksHelp: string;
3
+ export declare function runMemoryBanks(client: BotmemClient, args: string[], json: boolean): Promise<void>;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memoryBanksHelp = void 0;
4
+ exports.runMemoryBanks = runMemoryBanks;
5
+ const format_js_1 = require("../format.js");
6
+ exports.memoryBanksHelp = `
7
+ botmem memory-banks -- Manage memory banks
8
+
9
+ USAGE
10
+ botmem memory-banks List all banks
11
+ botmem memory-banks create <name> Create a new bank
12
+ botmem memory-banks rename <id> <name> Rename a bank
13
+ botmem memory-banks delete <id> Delete a bank
14
+
15
+ OPTIONS
16
+ --json Output raw JSON
17
+
18
+ EXAMPLES
19
+ botmem memory-banks
20
+ botmem memory-banks create "Work"
21
+ botmem memory-banks rename abc123 "Personal"
22
+ botmem memory-banks delete abc123
23
+ `.trim();
24
+ async function runMemoryBanks(client, args, json) {
25
+ const sub = args[0];
26
+ if (sub === 'create') {
27
+ const name = args[1];
28
+ if (!name) {
29
+ console.error('Error: create requires a name\n');
30
+ console.log(exports.memoryBanksHelp);
31
+ process.exit(1);
32
+ }
33
+ const result = await client.createMemoryBank(name);
34
+ if (json) {
35
+ console.log(JSON.stringify(result, null, 2));
36
+ }
37
+ else {
38
+ console.log(`Created memory bank "${result.name}" (${result.id})`);
39
+ }
40
+ return;
41
+ }
42
+ if (sub === 'rename') {
43
+ const id = args[1];
44
+ const name = args[2];
45
+ if (!id || !name) {
46
+ console.error('Error: rename requires <id> and <name>\n');
47
+ console.log(exports.memoryBanksHelp);
48
+ process.exit(1);
49
+ }
50
+ const result = await client.renameMemoryBank(id, name);
51
+ if (json) {
52
+ console.log(JSON.stringify(result, null, 2));
53
+ }
54
+ else {
55
+ console.log(`Renamed memory bank to "${result.name}" (${result.id})`);
56
+ }
57
+ return;
58
+ }
59
+ if (sub === 'delete') {
60
+ const id = args[1];
61
+ if (!id) {
62
+ console.error('Error: delete requires an id\n');
63
+ console.log(exports.memoryBanksHelp);
64
+ process.exit(1);
65
+ }
66
+ await client.deleteMemoryBank(id);
67
+ if (json) {
68
+ console.log(JSON.stringify({ ok: true, deleted: id }, null, 2));
69
+ }
70
+ else {
71
+ console.log(`Deleted memory bank ${id}`);
72
+ }
73
+ return;
74
+ }
75
+ // Default: list
76
+ const result = await client.listMemoryBanks();
77
+ const banks = result.memoryBanks || result;
78
+ if (json) {
79
+ console.log(JSON.stringify(banks, null, 2));
80
+ }
81
+ else {
82
+ console.log((0, format_js_1.formatMemoryBanks)(Array.isArray(banks) ? banks : []));
83
+ }
84
+ }
85
+ //# sourceMappingURL=memory-banks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-banks.js","sourceRoot":"","sources":["../../src/commands/memory-banks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BotmemClient } from '../client.js';
2
+ export declare const searchHelp: string;
3
+ export declare function runSearch(client: BotmemClient, args: string[], json: boolean): Promise<void>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchHelp = void 0;
4
+ exports.runSearch = runSearch;
5
+ const format_js_1 = require("../format.js");
6
+ exports.searchHelp = `
7
+ ${bold('botmem search')} -- Search memories semantically
8
+
9
+ USAGE
10
+ botmem search <query> [options]
11
+
12
+ OPTIONS
13
+ --source <type> Filter by source (email, message, photo, location)
14
+ --connector <type> Filter by connector (gmail, slack, whatsapp, imessage, locations)
15
+ --contact <id> Filter by contact UUID
16
+ --memory-bank <id> Filter by memory bank ID
17
+ --limit <n> Max results (default: 20)
18
+ --json Output raw JSON
19
+
20
+ EXAMPLES
21
+ botmem search "dinner plans"
22
+ botmem search "meeting" --connector gmail --limit 5
23
+ botmem search "photos from dubai" --source photo --json
24
+ `.trim();
25
+ function bold(s) { return `\x1b[1m${s}\x1b[0m`; }
26
+ async function runSearch(client, args, json) {
27
+ // Collect query words (everything that's not a flag or flag value)
28
+ const query = [];
29
+ const filters = {};
30
+ let limit;
31
+ let memoryBankId;
32
+ for (let i = 0; i < args.length; i++) {
33
+ const a = args[i];
34
+ if (a === '--source' || a === '--connector' || a === '--contact') {
35
+ const val = args[++i];
36
+ if (!val) {
37
+ console.error(`Missing value for ${a}`);
38
+ process.exit(1);
39
+ }
40
+ const key = a.slice(2);
41
+ if (key === 'source')
42
+ filters['sourceType'] = val;
43
+ else if (key === 'connector')
44
+ filters['connectorType'] = val;
45
+ else if (key === 'contact')
46
+ filters['contactId'] = val;
47
+ }
48
+ else if (a === '--memory-bank') {
49
+ memoryBankId = args[++i];
50
+ }
51
+ else if (a === '--limit') {
52
+ limit = parseInt(args[++i], 10);
53
+ }
54
+ else if (!a.startsWith('--')) {
55
+ query.push(a);
56
+ }
57
+ }
58
+ const queryStr = query.join(' ');
59
+ if (!queryStr) {
60
+ console.error('Error: search requires a query\n');
61
+ console.log(exports.searchHelp);
62
+ process.exit(1);
63
+ }
64
+ const response = await client.searchMemories(queryStr, Object.keys(filters).length ? filters : undefined, limit, memoryBankId);
65
+ const { items: results, fallback, resolvedEntities, parsed } = response;
66
+ if (json) {
67
+ console.log(JSON.stringify({ items: results, fallback, resolvedEntities, parsed }, null, 2));
68
+ }
69
+ else {
70
+ // Show NLQ parse info when present
71
+ if (parsed?.temporal && !parsed.temporalFallback) {
72
+ const fromStr = new Date(parsed.temporal.from).toLocaleDateString();
73
+ const toStr = new Date(parsed.temporal.to).toLocaleDateString();
74
+ console.log(`\x1b[36m⏱ Date filter: ${fromStr} to ${toStr}\x1b[0m`);
75
+ }
76
+ if (parsed?.temporalFallback) {
77
+ console.log(`\x1b[33m⚠ No results for that time range — showing all matches\x1b[0m`);
78
+ }
79
+ if (parsed?.intent && parsed.intent !== 'recall') {
80
+ console.log(`\x1b[36m⚡ Intent: ${parsed.intent}\x1b[0m`);
81
+ }
82
+ if (resolvedEntities) {
83
+ const names = resolvedEntities.contacts.map((c) => c.displayName).join(', ');
84
+ const topics = resolvedEntities.topicWords.length ? ` + "${resolvedEntities.topicWords.join(' ')}"` : '';
85
+ if (results.length > 0) {
86
+ console.log(`\x1b[36m→ Showing results for ${bold(names)}${topics}\x1b[0m\n`);
87
+ }
88
+ else {
89
+ console.log(`\x1b[33m⚠ No memories found for ${bold(names)}${topics}\x1b[0m\n`);
90
+ }
91
+ }
92
+ else if (fallback && results.length > 0) {
93
+ console.log('\x1b[33m⚠ No exact matches found. Showing semantically similar results:\x1b[0m\n');
94
+ }
95
+ console.log((0, format_js_1.formatSearchResults)(results));
96
+ }
97
+ }
98
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BotmemClient } from '../client.js';
2
+ export declare const timelineHelp: string;
3
+ export declare function runTimeline(client: BotmemClient, args: string[], json: boolean): Promise<void>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.timelineHelp = void 0;
4
+ exports.runTimeline = runTimeline;
5
+ const format_js_1 = require("../format.js");
6
+ exports.timelineHelp = `
7
+ ${(0, format_js_1.bold)('botmem timeline')} -- Query memories by time range
8
+
9
+ USAGE
10
+ botmem timeline [options]
11
+
12
+ OPTIONS
13
+ --from <date> Start date (ISO 8601, e.g. 2025-01-01)
14
+ --to <date> End date (ISO 8601, e.g. 2025-01-31)
15
+ --query <text> Filter by text content
16
+ --connector <type> Filter by connector
17
+ --source <type> Filter by source type
18
+ --limit <n> Max results (default: 50)
19
+ --json Output raw JSON
20
+
21
+ EXAMPLES
22
+ botmem timeline --from 2025-01-01 --to 2025-01-31
23
+ botmem timeline --from 2025-06-01 --query "meeting"
24
+ botmem timeline --connector gmail --limit 20
25
+ `.trim();
26
+ function truncate(text, maxLen) {
27
+ const oneLine = text.replace(/\n/g, ' ').trim();
28
+ if (oneLine.length <= maxLen)
29
+ return oneLine;
30
+ return oneLine.slice(0, maxLen - 1) + '\u2026';
31
+ }
32
+ async function runTimeline(client, args, json) {
33
+ const params = {};
34
+ let limit;
35
+ for (let i = 0; i < args.length; i++) {
36
+ const a = args[i];
37
+ if (a === '--from')
38
+ params.from = args[++i];
39
+ else if (a === '--to')
40
+ params.to = args[++i];
41
+ else if (a === '--query')
42
+ params.query = args[++i];
43
+ else if (a === '--connector')
44
+ params.connectorType = args[++i];
45
+ else if (a === '--source')
46
+ params.sourceType = args[++i];
47
+ else if (a === '--limit')
48
+ limit = parseInt(args[++i], 10);
49
+ }
50
+ const result = await client.getTimeline({ ...params, limit });
51
+ if (json) {
52
+ console.log(JSON.stringify(result, null, 2));
53
+ return;
54
+ }
55
+ if (!result.items.length) {
56
+ console.log((0, format_js_1.dim)('No memories found in the specified time range.'));
57
+ return;
58
+ }
59
+ console.log((0, format_js_1.bold)(`Timeline: ${result.total} memories`) +
60
+ (params.from || params.to ? (0, format_js_1.dim)(` (${params.from || '...'} → ${params.to || '...'})`) : ''));
61
+ console.log('');
62
+ let currentDate = '';
63
+ for (const m of result.items) {
64
+ const date = m.eventTime ? new Date(m.eventTime).toLocaleDateString() : 'unknown';
65
+ if (date !== currentDate) {
66
+ currentDate = date;
67
+ console.log((0, format_js_1.bold)(`\n--- ${date} ---`));
68
+ }
69
+ const time = m.eventTime ? new Date(m.eventTime).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : '';
70
+ console.log(` ${(0, format_js_1.dim)(time)} ${(0, format_js_1.dim)(`[${m.sourceType}/${m.connectorType}]`)} ${truncate(m.text, 100)}`);
71
+ console.log(` ${(0, format_js_1.dim)(m.id)}`);
72
+ }
73
+ console.log('');
74
+ console.log((0, format_js_1.dim)(`Showing ${result.items.length} of ${result.total}`));
75
+ }
76
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/commands/timeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BotmemClient } from '../client.js';
2
+ export declare const versionHelp: string;
3
+ export declare function runVersion(client: BotmemClient, json: boolean): Promise<void>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.versionHelp = void 0;
4
+ exports.runVersion = runVersion;
5
+ const format_js_1 = require("../format.js");
6
+ exports.versionHelp = `
7
+ botmem version -- Show API build info and uptime
8
+
9
+ USAGE
10
+ botmem version [--json]
11
+ `.trim();
12
+ async function runVersion(client, json) {
13
+ const data = await client.getVersion();
14
+ if (json) {
15
+ console.log(JSON.stringify(data, null, 2));
16
+ }
17
+ else {
18
+ console.log((0, format_js_1.formatVersion)(data));
19
+ }
20
+ }
21
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":";;;AAUA,gCAQC;AAjBD,4CAA6C;AAEhC,QAAA,WAAW,GAAG;;;;;CAK1B,CAAC,IAAI,EAAE,CAAC;AAEF,KAAK,UAAU,UAAU,CAAC,MAAoB,EAAE,IAAa;IAClE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAEvC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAa,EAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}