@crewx/memory 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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @crewx/memory
2
+
3
+ Memory engine for CrewX - markdown + frontmatter based long-term memory.
4
+
5
+ ```bash
6
+ npx memory index <agent_id>
7
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,365 @@
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 = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const engine_1 = require("./src/engine");
40
+ const types_1 = require("./src/types");
41
+ const mindmap_1 = require("./src/mindmap");
42
+ function readStdin() {
43
+ return new Promise((resolve, reject) => {
44
+ const chunks = [];
45
+ process.stdin.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
46
+ process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8').trim()));
47
+ process.stdin.on('error', reject);
48
+ });
49
+ }
50
+ function loadTracer() {
51
+ const candidates = [
52
+ path.join(__dirname, '../../../../skills/lib/skill-tracer.js'),
53
+ path.join(__dirname, '../../../skills/lib/skill-tracer.js'),
54
+ ];
55
+ for (const p of candidates) {
56
+ try {
57
+ if (fs.existsSync(p))
58
+ return require(p);
59
+ }
60
+ catch { }
61
+ }
62
+ return null;
63
+ }
64
+ function showSkillHelp() {
65
+ const skillMd = path.join(__dirname, '..', 'SKILL.md');
66
+ if (fs.existsSync(skillMd)) {
67
+ process.stdout.write(fs.readFileSync(skillMd, 'utf-8'));
68
+ }
69
+ else {
70
+ console.log('No SKILL.md found. Use --help for usage.');
71
+ }
72
+ }
73
+ function printUsage() {
74
+ console.log('@crewx/memory - Agent memory management CLI\n');
75
+ console.log('Usage: npx memory <command> <agent_id> [args]\n');
76
+ console.log('Commands:');
77
+ console.log(' save <summary> [category] 새 기억 저장');
78
+ console.log(' 예: npx memory save myagent "API 설계 결정" decision --tags=api,backend');
79
+ console.log(' index 전체 인덱스 보기');
80
+ console.log(' 예: npx memory index myagent');
81
+ console.log(' list [--category=...] [--tag=...] [--sort=date] 구조적 필터링');
82
+ console.log(' 예: npx memory list myagent --category=backlog --tag=status:pending');
83
+ console.log(' stats 카테고리/태그 통계');
84
+ console.log(' 예: npx memory stats myagent');
85
+ console.log(' tags [tag_name] 전체 태그 목록 또는 특정 태그 필터');
86
+ console.log(' 예: npx memory tags myagent');
87
+ console.log(' 예: npx memory tags myagent api');
88
+ console.log(' recent (alias: ls) 최근 N일 기억');
89
+ console.log(' 예: npx memory recent myagent 7');
90
+ console.log(' find <keyword> 키워드 검색 (빠름)');
91
+ console.log(' 예: npx memory find myagent "API"');
92
+ console.log(' search <query> AI 시멘틱 검색 (@memory_searcher 에이전트)');
93
+ console.log(' 예: npx memory search myagent "인증 관련 결정 사항"');
94
+ console.log(' get (alias: read) <id> 기억 상세 조회');
95
+ console.log(' 예: npx memory get myagent PWN3qt');
96
+ console.log(' update <id> [--summary=...] [--body=...] 기억 수정');
97
+ console.log(' 예: npx memory update myagent PWN3qt --tags=api,v2');
98
+ console.log(' delete (alias: rm) <id> [--force] 기억 삭제');
99
+ console.log(' 예: npx memory delete myagent PWN3qt --force');
100
+ console.log(' merge <id1> <id2> 두 기억 병합');
101
+ console.log(' 예: npx memory merge myagent id1 id2 --summary="병합 요약"');
102
+ console.log(' summarize [--force] summary.md 생성/갱신');
103
+ console.log(' summarize-dirty dirty summary만 갱신');
104
+ console.log(' mindmap <sub> [agent_id] 기억 연결 그래프 (build/show/related/add/remove/html/open)');
105
+ console.log(' 예: npx memory mindmap build myagent');
106
+ console.log('');
107
+ console.log('Other:');
108
+ console.log(' help SKILL.md 출력');
109
+ console.log(' --help, -h 이 도움말 출력');
110
+ }
111
+ const ALIASES = {
112
+ read: 'get',
113
+ rm: 'delete',
114
+ ls: 'recent',
115
+ };
116
+ const BOOLEAN_FLAGS = new Set([
117
+ 'help', 'force', 'verbose', 'full', 'important', 'no-important', 'json', 'all',
118
+ ]);
119
+ function parseArgs(args) {
120
+ const result = { positional: [], options: {} };
121
+ for (let i = 0; i < args.length; i++) {
122
+ const arg = args[i];
123
+ if (arg === '-h') {
124
+ result.options['help'] = true;
125
+ }
126
+ else if (arg.startsWith('--')) {
127
+ const eqIdx = arg.indexOf('=');
128
+ if (eqIdx !== -1) {
129
+ const key = arg.slice(2, eqIdx);
130
+ const value = arg.slice(eqIdx + 1);
131
+ result.options[key] = value;
132
+ }
133
+ else {
134
+ const key = arg.slice(2);
135
+ if (!BOOLEAN_FLAGS.has(key)) {
136
+ const nextArg = args[i + 1];
137
+ if (nextArg !== undefined && !nextArg.startsWith('--') && nextArg !== '-h') {
138
+ result.options[key] = nextArg;
139
+ i++;
140
+ }
141
+ else {
142
+ result.options[key] = true;
143
+ }
144
+ }
145
+ else {
146
+ result.options[key] = true;
147
+ }
148
+ }
149
+ }
150
+ else {
151
+ result.positional.push(arg);
152
+ }
153
+ }
154
+ return result;
155
+ }
156
+ async function main() {
157
+ const args = process.argv.slice(2);
158
+ const { positional, options } = parseArgs(args);
159
+ const [command, agentId, ...rest] = positional;
160
+ if (options.help) {
161
+ printUsage();
162
+ return;
163
+ }
164
+ if (command === 'help') {
165
+ showSkillHelp();
166
+ return;
167
+ }
168
+ if (!command) {
169
+ printUsage();
170
+ return;
171
+ }
172
+ const resolvedCommand = ALIASES[command] ?? command;
173
+ if (resolvedCommand === 'mindmap') {
174
+ const dataDir = process.env['MEMORY_DATA_DIR'] ?? path.resolve(process.cwd(), 'memory');
175
+ const mindmap = new mindmap_1.MindmapEngine(dataDir);
176
+ const subcommand = agentId;
177
+ const mAgentId = rest[0];
178
+ const mRest = rest.slice(1);
179
+ if (!subcommand) {
180
+ console.log('Usage: npx memory mindmap <subcommand> [agent_id] [args]');
181
+ console.log('');
182
+ console.log('Subcommands:');
183
+ console.log(' build <agent_id> - 그래프 빌드');
184
+ console.log(' show <agent_id> [--period=stm|mtm|ltm] [--format=mermaid|text] - 그래프 요약');
185
+ console.log(' related <agent_id> <memory_id> - 연결된 기억 조회');
186
+ console.log(' add <agent_id> <from_id> <to_id> [type] - 수동 연결 추가');
187
+ console.log(' remove <agent_id> <from_id> <to_id> - 연결 제거');
188
+ console.log(' html - 공용 HTML 생성');
189
+ console.log(' open [agent_id] - 브라우저에서 열기');
190
+ process.exit(1);
191
+ }
192
+ switch (subcommand) {
193
+ case 'build':
194
+ if (!mAgentId) {
195
+ console.log('Error: agent_id is required');
196
+ process.exit(1);
197
+ }
198
+ mindmap.build(mAgentId, options);
199
+ break;
200
+ case 'show':
201
+ if (!mAgentId) {
202
+ console.log('Error: agent_id is required');
203
+ process.exit(1);
204
+ }
205
+ mindmap.show(mAgentId, { period: options.period, format: options.format });
206
+ break;
207
+ case 'related':
208
+ if (!mAgentId || !mRest?.[0]) {
209
+ console.log('Error: agent_id and memory_id are required');
210
+ process.exit(1);
211
+ }
212
+ mindmap.related(mAgentId, mRest[0]);
213
+ break;
214
+ case 'add':
215
+ if (!mAgentId || !mRest?.[0] || !mRest?.[1]) {
216
+ console.log('Error: agent_id, from_id and to_id are required');
217
+ process.exit(1);
218
+ }
219
+ mindmap.add(mAgentId, mRest[0], mRest[1], mRest[2]);
220
+ break;
221
+ case 'remove':
222
+ if (!mAgentId || !mRest?.[0] || !mRest?.[1]) {
223
+ console.log('Error: agent_id, from_id and to_id are required');
224
+ process.exit(1);
225
+ }
226
+ mindmap.remove(mAgentId, mRest[0], mRest[1]);
227
+ break;
228
+ case 'html':
229
+ mindmap.html();
230
+ break;
231
+ case 'open':
232
+ mindmap.open(mAgentId);
233
+ break;
234
+ default:
235
+ console.log(`Unknown mindmap subcommand: ${subcommand}`);
236
+ process.exit(1);
237
+ }
238
+ return;
239
+ }
240
+ const engine = new engine_1.MemoryEngine();
241
+ if (resolvedCommand === 'summarize-dirty') {
242
+ engine.summarizeDirty();
243
+ return;
244
+ }
245
+ if (!agentId) {
246
+ console.log('Error: agent_id is required');
247
+ process.exit(1);
248
+ }
249
+ switch (resolvedCommand) {
250
+ case 'save': {
251
+ const summary = rest[0];
252
+ if (!summary) {
253
+ console.log('Error: summary is required');
254
+ process.exit(1);
255
+ }
256
+ let category;
257
+ if (rest[1] && types_1.CATEGORIES.includes(rest[1])) {
258
+ category = rest[1];
259
+ }
260
+ else {
261
+ category = 'general';
262
+ if (rest[1] && !options.tags) {
263
+ options.tags = rest[1];
264
+ }
265
+ }
266
+ if (rest[2] && !options.body) {
267
+ options.body = rest[2];
268
+ }
269
+ if (!options.body && !process.stdin.isTTY) {
270
+ const stdinBody = await Promise.race([
271
+ readStdin(),
272
+ new Promise((resolve) => setTimeout(() => resolve(''), 100)),
273
+ ]);
274
+ if (stdinBody) {
275
+ options.body = stdinBody;
276
+ }
277
+ }
278
+ engine.save(agentId, summary, category, options);
279
+ break;
280
+ }
281
+ case 'index':
282
+ engine.index(agentId, options);
283
+ break;
284
+ case 'list':
285
+ engine.list(agentId, options);
286
+ break;
287
+ case 'stats':
288
+ engine.stats(agentId);
289
+ break;
290
+ case 'tags':
291
+ if (rest[0]) {
292
+ engine.topic(agentId, rest[0]);
293
+ }
294
+ else {
295
+ engine.tags(agentId);
296
+ }
297
+ break;
298
+ case 'recent':
299
+ engine.recent(agentId, parseInt(rest[0] ?? '', 10) || 30);
300
+ break;
301
+ case 'find':
302
+ if (!rest[0]) {
303
+ console.log('Error: keyword is required');
304
+ process.exit(1);
305
+ }
306
+ engine.find(agentId, rest[0]);
307
+ break;
308
+ case 'get':
309
+ if (!rest[0]) {
310
+ console.log('Error: memory_id is required');
311
+ process.exit(1);
312
+ }
313
+ engine.get(agentId, rest[0]);
314
+ break;
315
+ case 'search':
316
+ if (!rest[0]) {
317
+ console.log('Error: query is required');
318
+ process.exit(1);
319
+ }
320
+ engine.search(agentId, rest.join(' '));
321
+ break;
322
+ case 'update':
323
+ if (!rest[0]) {
324
+ console.log('Error: memory_id is required');
325
+ process.exit(1);
326
+ }
327
+ engine.update(agentId, rest[0], options);
328
+ break;
329
+ case 'delete':
330
+ if (!rest[0]) {
331
+ console.log('Error: memory_id is required');
332
+ process.exit(1);
333
+ }
334
+ engine.delete(agentId, rest[0], options);
335
+ break;
336
+ case 'merge':
337
+ if (!rest[0] || !rest[1]) {
338
+ console.log('Error: two memory_ids are required');
339
+ console.log('Usage: node cli.ts merge <agent_id> <id1> <id2> [--summary="병합 요약"]');
340
+ process.exit(1);
341
+ }
342
+ engine.merge(agentId, rest[0], rest[1], options);
343
+ break;
344
+ case 'summarize':
345
+ engine.summarize(agentId, options);
346
+ break;
347
+ default:
348
+ console.log(`Unknown command: ${command}`);
349
+ process.exit(1);
350
+ }
351
+ }
352
+ const tracer = loadTracer();
353
+ if (tracer) {
354
+ tracer.run('crewx/memory', () => main()).catch((e) => {
355
+ console.error(e.message);
356
+ process.exit(1);
357
+ });
358
+ }
359
+ else {
360
+ main().catch((e) => {
361
+ console.error(e.message);
362
+ process.exit(1);
363
+ });
364
+ }
365
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { MemoryEntry, SaveOptions, IndexOptions, ListOptions, UpdateOptions, DeleteOptions, MergeOptions, SummarizeOptions, SummaryResult, MemoryEngineConfig } from './types';
2
+ export declare class MemoryEngine {
3
+ private readonly dataDir;
4
+ private readonly summaryDays;
5
+ private readonly recentDays;
6
+ private readonly shortTermHours;
7
+ constructor(config?: MemoryEngineConfig);
8
+ private getAgentDir;
9
+ private getEntriesDir;
10
+ private getSummaryPath;
11
+ private getDirtySummaryPath;
12
+ private ensureDir;
13
+ private generateId;
14
+ private getToday;
15
+ private getLocalISO8601;
16
+ private getPrimaryTag;
17
+ private toEntryTimestamp;
18
+ private markSummaryDirty;
19
+ loadAllEntries(agentId: string): MemoryEntry[];
20
+ private findEntryById;
21
+ save(agentId: string, summary: string, category?: string, options?: SaveOptions): void;
22
+ index(agentId: string, options?: IndexOptions): void;
23
+ private generateIndexContent;
24
+ topic(agentId: string, topicName: string): void;
25
+ recent(agentId: string, days?: number): void;
26
+ find(agentId: string, keyword: string): void;
27
+ list(agentId: string, options?: ListOptions): void;
28
+ stats(agentId: string): void;
29
+ tags(agentId: string): void;
30
+ get(agentId: string, memoryId: string): void;
31
+ update(agentId: string, memoryId: string, options?: UpdateOptions): void;
32
+ delete(agentId: string, memoryId: string, options?: DeleteOptions): void;
33
+ merge(agentId: string, memoryId1: string, memoryId2: string, options?: MergeOptions): void;
34
+ private buildFallbackSummary;
35
+ private callSummarizer;
36
+ generateSummary(agentId: string, options?: SummarizeOptions): SummaryResult;
37
+ summarize(agentId: string, options?: SummarizeOptions): void;
38
+ summarizeDirty(): void;
39
+ search(agentId: string, query: string): void;
40
+ }
41
+ export declare function createMemoryEngine(config?: MemoryEngineConfig): MemoryEngine;
42
+ export { CATEGORIES, MemoryCategory } from './types';
43
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAqEA,OAAO,EAGL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,aAAa,EAEb,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,MAAM,GAAE,kBAAuB;IAoB3C,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;IAOxB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE;IAwB9C,OAAO,CAAC,aAAa;IAyBrB,IAAI,CACF,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,EAC5B,OAAO,GAAE,WAAgB,GACxB,IAAI;IAkDP,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,IAAI;IA6GxD,OAAO,CAAC,oBAAoB;IAkD5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAmB/C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,IAAI;IAwBhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAoD5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IAwCtD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAiD5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA4B3B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA6E5C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,IAAI;IA2C5E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,IAAI;IA6B5E,KAAK,CACH,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,YAAiB,GACzB,IAAI;IAiEP,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,cAAc;IAqBtB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,aAAa;IA+H/E,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI;IAsBhE,cAAc,IAAI,IAAI;IA6CtB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAqC7C;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAE5E;AAGD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}