memshell 0.2.0 → 0.2.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/bin/memshell.js +102 -0
- package/package.json +2 -2
package/bin/memshell.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const mem = require('../src/index');
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const cmd = args[0];
|
|
8
|
+
const rest = args.slice(1).join(' ');
|
|
9
|
+
|
|
10
|
+
const HELP = `
|
|
11
|
+
mem.sh — persistent memory for AI agents
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
mem set <text> Store a memory
|
|
15
|
+
mem recall <query> Semantic recall
|
|
16
|
+
mem list List all memories
|
|
17
|
+
mem forget <id> Delete a memory by ID
|
|
18
|
+
mem clear Wipe all memories
|
|
19
|
+
mem serve [--port N] Start API server
|
|
20
|
+
|
|
21
|
+
Options:
|
|
22
|
+
--agent <name> Agent namespace
|
|
23
|
+
--api <url> Use remote API instead of local
|
|
24
|
+
--key <key> API key for remote server
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
mem set "user prefers dark mode"
|
|
28
|
+
mem recall "what theme?"
|
|
29
|
+
mem list
|
|
30
|
+
mem forget 3
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
// Parse flags
|
|
34
|
+
function flag(name) {
|
|
35
|
+
const i = args.indexOf('--' + name);
|
|
36
|
+
if (i === -1) return null;
|
|
37
|
+
return args[i + 1] || true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function main() {
|
|
41
|
+
const agent = flag('agent') || 'default';
|
|
42
|
+
const api = flag('api');
|
|
43
|
+
const key = flag('key');
|
|
44
|
+
|
|
45
|
+
if (api) mem.configure({ api, key, agent });
|
|
46
|
+
else mem.configure({ agent });
|
|
47
|
+
|
|
48
|
+
const opts = { agent };
|
|
49
|
+
|
|
50
|
+
switch (cmd) {
|
|
51
|
+
case 'set': case 's': case 'save': case 'remember': {
|
|
52
|
+
const text = args.slice(1).filter(a => !a.startsWith('--')).join(' ').replace(/^["']|["']$/g, '');
|
|
53
|
+
if (!text) return console.log('Usage: mem set <text>');
|
|
54
|
+
const r = await mem.set(text, opts);
|
|
55
|
+
console.log(`✓ Stored (id: ${r.id})`);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case 'recall': case 'r': case 'search': case 'q': {
|
|
59
|
+
const query = args.slice(1).filter(a => !a.startsWith('--')).join(' ').replace(/^["']|["']$/g, '');
|
|
60
|
+
if (!query) return console.log('Usage: mem recall <query>');
|
|
61
|
+
const results = await mem.recall(query, opts);
|
|
62
|
+
if (!results.length) return console.log('No memories found.');
|
|
63
|
+
for (const r of results) {
|
|
64
|
+
console.log(` [${r.id}] ${r.text} (score: ${r.score})`);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 'list': case 'ls': case 'l': {
|
|
69
|
+
const all = await mem.list(opts);
|
|
70
|
+
if (!all.length) return console.log('No memories stored.');
|
|
71
|
+
for (const r of all) {
|
|
72
|
+
console.log(` [${r.id}] ${r.text} (${r.created_at})`);
|
|
73
|
+
}
|
|
74
|
+
console.log(`\n ${all.length} memor${all.length === 1 ? 'y' : 'ies'}`);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case 'forget': case 'delete': case 'rm': {
|
|
78
|
+
const id = args[1];
|
|
79
|
+
if (!id) return console.log('Usage: mem forget <id>');
|
|
80
|
+
await mem.forget(id);
|
|
81
|
+
console.log(`✓ Forgotten (id: ${id})`);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case 'clear': case 'wipe': case 'reset': {
|
|
85
|
+
await mem.clear(opts);
|
|
86
|
+
console.log('✓ All memories cleared');
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'serve': case 'server': {
|
|
90
|
+
const port = flag('port') || 3456;
|
|
91
|
+
const authKey = flag('key') || process.env.MEM_KEY || '';
|
|
92
|
+
process.env.MEM_PORT = port;
|
|
93
|
+
if (authKey) process.env.MEM_KEY = authKey;
|
|
94
|
+
require('../server');
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
console.log(HELP);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
main().catch(e => { console.error('Error:', e.message); process.exit(1); });
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memshell",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Persistent memory for AI agents. Like localStorage but for LLMs.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"memshell": "
|
|
7
|
+
"memshell": "bin/memshell.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"start": "node server.js",
|