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.
Files changed (2) hide show
  1. package/bin/memshell.js +102 -0
  2. package/package.json +2 -2
@@ -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.0",
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": "./bin/mem.js"
7
+ "memshell": "bin/memshell.js"
8
8
  },
9
9
  "scripts": {
10
10
  "start": "node server.js",